From 8deee04a637b589c9ba1acd736ea65a4b90fe216 Mon Sep 17 00:00:00 2001 From: bizrockman Date: Fri, 28 Feb 2025 22:04:39 +0100 Subject: [PATCH 001/115] fix: handle empty content correctly in FilesStore saveFile() (#1381) * Fix FilesStore: Handle empty content correctly in saveFile(). Happens when user creates files in the web terminal * updated logic --------- Co-authored-by: Anirban Kar --- app/lib/stores/files.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/lib/stores/files.ts b/app/lib/stores/files.ts index 687b8037..60904a65 100644 --- a/app/lib/stores/files.ts +++ b/app/lib/stores/files.ts @@ -115,7 +115,7 @@ export class FilesStore { const oldContent = this.getFile(filePath)?.content; - if (!oldContent) { + if (!oldContent && oldContent !== '') { unreachable('Expected content to be defined'); } From 3368b7903e5feb56c008655b10884a1333e40631 Mon Sep 17 00:00:00 2001 From: Anirban Kar Date: Sun, 2 Mar 2025 03:41:58 +0530 Subject: [PATCH 002/115] fix: OpenAILike api key not showing up (#1403) --- app/components/chat/BaseChat.tsx | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/app/components/chat/BaseChat.tsx b/app/components/chat/BaseChat.tsx index 12929b10..b8712202 100644 --- a/app/components/chat/BaseChat.tsx +++ b/app/components/chat/BaseChat.tsx @@ -413,15 +413,17 @@ export const BaseChat = React.forwardRef( apiKeys={apiKeys} modelLoading={isModelLoading} /> - {(providerList || []).length > 0 && provider && !LOCAL_PROVIDERS.includes(provider.name) && ( - { - onApiKeysChange(provider.name, key); - }} - /> - )} + {(providerList || []).length > 0 && + provider && + (!LOCAL_PROVIDERS.includes(provider.name) || 'OpenAILike') && ( + { + onApiKeysChange(provider.name, key); + }} + /> + )} )} From 4404f4a5c0a4bb5848d0f7121564b9e55007408a Mon Sep 17 00:00:00 2001 From: Anirban Kar Date: Sun, 2 Mar 2025 12:58:13 +0530 Subject: [PATCH 003/115] fix: git connection fix for starter template (#1411) --- .../@settings/tabs/connections/GithubConnection.tsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/components/@settings/tabs/connections/GithubConnection.tsx b/app/components/@settings/tabs/connections/GithubConnection.tsx index e2d8924f..9f433724 100644 --- a/app/components/@settings/tabs/connections/GithubConnection.tsx +++ b/app/components/@settings/tabs/connections/GithubConnection.tsx @@ -3,6 +3,7 @@ import { motion } from 'framer-motion'; import { toast } from 'react-toastify'; import { logStore } from '~/lib/stores/logs'; import { classNames } from '~/utils/classNames'; +import Cookies from 'js-cookie'; interface GitHubUserResponse { login: string; @@ -175,6 +176,8 @@ export function GithubConnection() { if (parsed.user && parsed.token) { fetchGitHubStats(parsed.token); } + } else if (import.meta.env.VITE_GITHUB_ACCESS_TOKEN) { + fetchGithubUser(import.meta.env.VITE_GITHUB_ACCESS_TOKEN); } setIsLoading(false); @@ -206,6 +209,10 @@ export function GithubConnection() { }; localStorage.setItem('github_connection', JSON.stringify(newConnection)); + Cookies.set('githubToken', token); + Cookies.set('githubUsername', data.login); + Cookies.set('git:github.com', JSON.stringify({ username: token, password: 'x-oauth-basic' })); + setConnection(newConnection); await fetchGitHubStats(token); From b01874205ebb294d88a2db57b9bad437ba4ee299 Mon Sep 17 00:00:00 2001 From: KevIsDev Date: Mon, 3 Mar 2025 09:24:39 +0000 Subject: [PATCH 004/115] fix: support php language in diff view --- app/components/workbench/DiffView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/workbench/DiffView.tsx b/app/components/workbench/DiffView.tsx index aa635ba6..73a5a339 100644 --- a/app/components/workbench/DiffView.tsx +++ b/app/components/workbench/DiffView.tsx @@ -556,7 +556,7 @@ const InlineDiffComparison = memo(({ beforeCode, afterCode, filename, language } useEffect(() => { getHighlighter({ themes: ['github-dark', 'github-light'], - langs: ['typescript', 'javascript', 'json', 'html', 'css', 'jsx', 'tsx'], + langs: ['typescript', 'javascript', 'json', 'html', 'css', 'jsx', 'tsx', 'python', 'php'], }).then(setHighlighter); }, []); From 964e1973fbb6b211ce200f408af469eaace7f132 Mon Sep 17 00:00:00 2001 From: KevIsDev Date: Mon, 3 Mar 2025 09:39:16 +0000 Subject: [PATCH 005/115] fix: added a bunch more common languages to diff view including: java, c, cpp, csharp, go ruby, rust --- app/components/workbench/DiffView.tsx | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/app/components/workbench/DiffView.tsx b/app/components/workbench/DiffView.tsx index 73a5a339..146076c5 100644 --- a/app/components/workbench/DiffView.tsx +++ b/app/components/workbench/DiffView.tsx @@ -556,7 +556,25 @@ const InlineDiffComparison = memo(({ beforeCode, afterCode, filename, language } useEffect(() => { getHighlighter({ themes: ['github-dark', 'github-light'], - langs: ['typescript', 'javascript', 'json', 'html', 'css', 'jsx', 'tsx', 'python', 'php'], + langs: [ + 'typescript', + 'javascript', + 'json', + 'html', + 'css', + 'jsx', + 'tsx', + 'python', + 'php', + 'java', + 'c', + 'cpp', + 'csharp', + 'go', + 'ruby', + 'rust', + 'plaintext', + ], }).then(setHighlighter); }, []); From 8c83c3c9aaaa5299bf04be5a34fbdf7359c31ac9 Mon Sep 17 00:00:00 2001 From: KevIsDev Date: Mon, 3 Mar 2025 12:16:13 +0000 Subject: [PATCH 006/115] feat: add creation of files and folders in the FileTree - Drag and drop images directly in the file tree. Image will convert to base64 format --- app/components/workbench/FileTree.tsx | 232 +++++++++++++++++++++++--- app/lib/stores/workbench.ts | 48 ++++++ 2 files changed, 257 insertions(+), 23 deletions(-) diff --git a/app/components/workbench/FileTree.tsx b/app/components/workbench/FileTree.tsx index eed791ef..ff4f531d 100644 --- a/app/components/workbench/FileTree.tsx +++ b/app/components/workbench/FileTree.tsx @@ -1,10 +1,13 @@ -import { memo, useEffect, useMemo, useState, type ReactNode } from 'react'; +import { memo, useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react'; import type { FileMap } from '~/lib/stores/files'; import { classNames } from '~/utils/classNames'; import { createScopedLogger, renderLogger } from '~/utils/logger'; import * as ContextMenu from '@radix-ui/react-context-menu'; import type { FileHistory } from '~/types/actions'; import { diffLines, type Change } from 'diff'; +import { workbenchStore } from '~/lib/stores/workbench'; +import { toast } from 'react-toastify'; +import { path } from '~/utils/path'; const logger = createScopedLogger('FileTree'); @@ -25,6 +28,13 @@ interface Props { className?: string; } +interface InlineInputProps { + depth: number; + placeholder: string; + onSubmit: (value: string) => void; + onCancel: () => void; +} + export const FileTree = memo( ({ files = {}, @@ -213,28 +223,204 @@ function ContextMenuItem({ onSelect, children }: { onSelect?: () => void; childr ); } -function FileContextMenu({ onCopyPath, onCopyRelativePath, children }: FolderContextMenuProps) { +function InlineInput({ depth, placeholder, onSubmit, onCancel }: InlineInputProps) { + const inputRef = useRef(null); + + useEffect(() => { + const timer = setTimeout(() => { + if (inputRef.current) { + inputRef.current.focus(); + } + }, 50); + + return () => clearTimeout(timer); + }, []); + + const handleKeyDown = (e: React.KeyboardEvent) => { + if (e.key === 'Enter') { + const value = inputRef.current?.value.trim(); + + if (value) { + onSubmit(value); + } + } else if (e.key === 'Escape') { + onCancel(); + } + }; + return ( - - {children} - - - - Copy path - Copy relative path - - - - +
+
+ { + setTimeout(() => { + if (document.activeElement !== inputRef.current) { + onCancel(); + } + }, 100); + }} + /> +
); } +// Modify the FileContextMenu component +function FileContextMenu({ + onCopyPath, + onCopyRelativePath, + fullPath, + children, +}: FolderContextMenuProps & { fullPath: string }) { + const [isCreatingFile, setIsCreatingFile] = useState(false); + const [isCreatingFolder, setIsCreatingFolder] = useState(false); + const [isDragging, setIsDragging] = useState(false); + const depth = useMemo(() => fullPath.split('/').length, [fullPath]); + + const handleDragOver = useCallback((e: React.DragEvent) => { + e.preventDefault(); + e.stopPropagation(); + setIsDragging(true); + }, []); + + const handleDragLeave = useCallback((e: React.DragEvent) => { + e.preventDefault(); + e.stopPropagation(); + setIsDragging(false); + }, []); + + const handleDrop = useCallback( + async (e: React.DragEvent) => { + e.preventDefault(); + e.stopPropagation(); + + const items = Array.from(e.dataTransfer.items); + const imageFiles = items.filter((item) => item.type.startsWith('image/')); + + for (const item of imageFiles) { + const file = item.getAsFile(); + + if (file) { + try { + const filePath = path.join(fullPath, file.name); + const success = await workbenchStore.createNewFile(filePath, file); + + if (success) { + toast.success(`Image ${file.name} uploaded successfully`); + } else { + toast.error(`Failed to upload image ${file.name}`); + } + } catch (error) { + toast.error(`Error uploading ${file.name}`); + logger.error(error); + } + } + } + + setIsDragging(false); + }, + [fullPath], + ); + + const handleCreateFile = async (fileName: string) => { + const newFilePath = path.join(fullPath, fileName); + const success = await workbenchStore.createNewFile(newFilePath); + + if (success) { + toast.success('File created successfully'); + } else { + toast.error('Failed to create file'); + } + + setIsCreatingFile(false); + }; + + const handleCreateFolder = async (folderName: string) => { + const newFolderPath = path.join(fullPath, folderName); + const success = await workbenchStore.createNewFolder(newFolderPath); + + if (success) { + toast.success('Folder created successfully'); + } else { + toast.error('Failed to create folder'); + } + + setIsCreatingFolder(false); + }; + + return ( + <> + + +
+ {children} +
+
+ + + + setIsCreatingFile(true)}> +
+
+ New File +
+ + setIsCreatingFolder(true)}> +
+
+ New Folder +
+ + + + Copy path + Copy relative path + + + + + {isCreatingFile && ( + setIsCreatingFile(false)} + /> + )} + {isCreatingFolder && ( + setIsCreatingFolder(false)} + /> + )} + + ); +} + +// Update the Folder component to pass the fullPath function Folder({ folder, collapsed, selected = false, onCopyPath, onCopyRelativePath, onClick }: FolderProps) { return ( - + { if (!fileModifications?.originalContent) { return { additions: 0, deletions: 0 }; } - // Usar a mesma lΓ³gica do DiffView para processar as mudanΓ§as const normalizedOriginal = fileModifications.originalContent.replace(/\r\n/g, '\n'); const normalizedCurrent = fileModifications.versions[fileModifications.versions.length - 1]?.content.replace(/\r\n/g, '\n') || ''; @@ -317,7 +503,7 @@ function File({ const showStats = additions > 0 || deletions > 0; return ( - + Date: Mon, 3 Mar 2025 15:57:25 +0100 Subject: [PATCH 007/115] Delete wrangler.toml --- wrangler.toml | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 wrangler.toml diff --git a/wrangler.toml b/wrangler.toml deleted file mode 100644 index addd1007..00000000 --- a/wrangler.toml +++ /dev/null @@ -1,6 +0,0 @@ -#:schema node_modules/wrangler/config-schema.json -name = "bolt" -compatibility_flags = ["nodejs_compat"] -compatibility_date = "2024-07-01" -pages_build_output_dir = "./build/client" -send_metrics = false \ No newline at end of file From 2780b2ebe1226ff6f88df591e34d049d257653fe Mon Sep 17 00:00:00 2001 From: Leex Date: Mon, 3 Mar 2025 15:57:41 +0100 Subject: [PATCH 008/115] Delete .tool-versions --- .tool-versions | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 .tool-versions diff --git a/.tool-versions b/.tool-versions deleted file mode 100644 index 74c88f6a..00000000 --- a/.tool-versions +++ /dev/null @@ -1,2 +0,0 @@ -nodejs 20.15.1 -pnpm 9.4.0 \ No newline at end of file From 8d1f1382243e801ae1b0fcfca7eac6f8ebb0cf0c Mon Sep 17 00:00:00 2001 From: Anirban Kar Date: Mon, 3 Mar 2025 21:21:04 +0530 Subject: [PATCH 009/115] Revert "Delete wrangler.toml" This reverts commit 60b6f476d7515c34a1aafe65a55f6661e00ff8cc. --- wrangler.toml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 wrangler.toml diff --git a/wrangler.toml b/wrangler.toml new file mode 100644 index 00000000..addd1007 --- /dev/null +++ b/wrangler.toml @@ -0,0 +1,6 @@ +#:schema node_modules/wrangler/config-schema.json +name = "bolt" +compatibility_flags = ["nodejs_compat"] +compatibility_date = "2024-07-01" +pages_build_output_dir = "./build/client" +send_metrics = false \ No newline at end of file From b079a56788f7871a46f490cd79d1d3108e354bdb Mon Sep 17 00:00:00 2001 From: KevIsDev Date: Mon, 3 Mar 2025 16:14:31 +0000 Subject: [PATCH 010/115] add: add file renaming and delete functionality --- app/components/workbench/FileTree.tsx | 96 +++++++++++++++++++++++--- app/lib/stores/workbench.ts | 98 +++++++++++++++++++++++++++ 2 files changed, 186 insertions(+), 8 deletions(-) diff --git a/app/components/workbench/FileTree.tsx b/app/components/workbench/FileTree.tsx index ff4f531d..d1087361 100644 --- a/app/components/workbench/FileTree.tsx +++ b/app/components/workbench/FileTree.tsx @@ -31,6 +31,7 @@ interface Props { interface InlineInputProps { depth: number; placeholder: string; + initialValue?: string; onSubmit: (value: string) => void; onCancel: () => void; } @@ -223,18 +224,23 @@ function ContextMenuItem({ onSelect, children }: { onSelect?: () => void; childr ); } -function InlineInput({ depth, placeholder, onSubmit, onCancel }: InlineInputProps) { +function InlineInput({ depth, placeholder, initialValue = '', onSubmit, onCancel }: InlineInputProps) { const inputRef = useRef(null); useEffect(() => { const timer = setTimeout(() => { if (inputRef.current) { inputRef.current.focus(); + + if (initialValue) { + inputRef.current.value = initialValue; + inputRef.current.select(); + } } }, 50); return () => clearTimeout(timer); - }, []); + }, [initialValue]); const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter') { @@ -272,7 +278,6 @@ function InlineInput({ depth, placeholder, onSubmit, onCancel }: InlineInputProp ); } -// Modify the FileContextMenu component function FileContextMenu({ onCopyPath, onCopyRelativePath, @@ -281,8 +286,10 @@ function FileContextMenu({ }: FolderContextMenuProps & { fullPath: string }) { const [isCreatingFile, setIsCreatingFile] = useState(false); const [isCreatingFolder, setIsCreatingFolder] = useState(false); + const [isRenaming, setIsRenaming] = useState(false); const [isDragging, setIsDragging] = useState(false); const depth = useMemo(() => fullPath.split('/').length, [fullPath]); + const fileName = useMemo(() => path.basename(fullPath), [fullPath]); const handleDragOver = useCallback((e: React.DragEvent) => { e.preventDefault(); @@ -355,6 +362,59 @@ function FileContextMenu({ setIsCreatingFolder(false); }; + const handleDelete = async () => { + try { + if (confirm(`Are you sure you want to delete ${fileName}?`)) { + const isDirectory = path.extname(fullPath) === ''; + + const success = isDirectory + ? await workbenchStore.deleteFolder(fullPath) + : await workbenchStore.deleteFile(fullPath); + + if (success) { + toast.success('Deleted successfully'); + } else { + toast.error('Failed to delete'); + } + } + } catch (error) { + toast.error('Error during delete operation'); + logger.error(error); + } + }; + + const handleRename = async (newName: string) => { + if (newName === fileName) { + setIsRenaming(false); + return; + } + + const parentDir = path.dirname(fullPath); + const newPath = path.join(parentDir, newName); + + try { + const files = workbenchStore.files.get(); + const fileEntry = files[fullPath]; + + const isDirectory = !fileEntry || fileEntry.type === 'folder'; + + const success = isDirectory + ? await workbenchStore.renameFolder(fullPath, newPath) + : await workbenchStore.renameFile(fullPath, newPath); + + if (success) { + toast.success('Renamed successfully'); + } else { + toast.error('Failed to rename'); + } + } catch (error) { + toast.error('Error during rename operation'); + logger.error(error); + } + + setIsRenaming(false); + }; + return ( <> @@ -368,7 +428,17 @@ function FileContextMenu({ isDragging, })} > - {children} + {!isRenaming && children} + + {isRenaming && ( + setIsRenaming(false)} + /> + )}
@@ -389,6 +459,18 @@ function FileContextMenu({ New Folder
+ setIsRenaming(true)}> +
+
+ Rename +
+ + +
+
+ Delete +
+ Copy path @@ -413,11 +495,11 @@ function FileContextMenu({ onCancel={() => setIsCreatingFolder(false)} /> )} + {/* Remove the isRenaming InlineInput from here since we moved it above */} ); } -// Update the Folder component to pass the fullPath function Folder({ folder, collapsed, selected = false, onCopyPath, onCopyRelativePath, onClick }: FolderProps) { return ( @@ -440,7 +522,6 @@ function Folder({ folder, collapsed, selected = false, onCopyPath, onCopyRelativ ); } -// Add this interface after the FolderProps interface interface FileProps { file: FileNode; selected: boolean; @@ -461,7 +542,6 @@ function File({ fileHistory = {}, }: FileProps) { const { depth, name, fullPath } = file; - const parentPath = fullPath.substring(0, fullPath.lastIndexOf('/')); const fileModifications = fileHistory[fullPath]; @@ -503,7 +583,7 @@ function File({ const showStats = additions > 0 || deletions > 0; return ( - + filePath.startsWith(oldPath)) + .map(([filePath, dirent]) => ({ path: filePath, dirent })); + + for (const { path: filePath, dirent } of filesToMove) { + if (dirent?.type === 'file') { + const relativePath = filePath.substring(oldPath.length); + const newFilePath = path.join(newPath, relativePath); + + await this.createNewFile(newFilePath, dirent.content); + } + } + + await this.deleteFolder(oldPath); + + const selectedFile = this.selectedFile.get(); + + if (selectedFile && selectedFile.startsWith(oldPath)) { + const relativePath = selectedFile.substring(oldPath.length); + const newSelectedPath = path.join(newPath, relativePath); + this.setSelectedFile(newSelectedPath); + } + + return true; + } catch (error) { + console.error('Error renaming folder:', error); + return false; + } + } } export const workbenchStore = new WorkbenchStore(); From 9b2a204ddc3ff0cb75236fe4e56ee103e32dcbb2 Mon Sep 17 00:00:00 2001 From: Anirban Kar Date: Tue, 4 Mar 2025 20:28:51 +0530 Subject: [PATCH 011/115] ci: added arm64 build and tags build --- .github/workflows/docker.yaml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index 42070f9f..b44e63a0 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -5,6 +5,9 @@ on: branches: - main - stable + tags: + - 'v*' + - '*.*.*' workflow_dispatch: permissions: @@ -21,6 +24,10 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 @@ -37,12 +44,17 @@ jobs: uses: docker/metadata-action@v4 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=ref,event=branch + type=ref,event=tag + type=sha - name: Build and push Docker image for main if: github.ref == 'refs/heads/main' uses: docker/build-push-action@v6 with: context: . + platforms: linux/amd64,linux/arm64 push: true tags: | ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest @@ -54,8 +66,20 @@ jobs: uses: docker/build-push-action@v6 with: context: . + platforms: linux/amd64,linux/arm64 push: true tags: | ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:stable ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} labels: ${{ steps.meta.outputs.labels }} + + - name: Build and push Docker image for tags + if: startsWith(github.ref, 'refs/tags/') + uses: docker/build-push-action@v6 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: true + tags: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.ref_name }} + labels: ${{ steps.meta.outputs.labels }} From 2452f9413d835508df3e6ea50b57bcbccd0645c8 Mon Sep 17 00:00:00 2001 From: Anirban Kar Date: Tue, 4 Mar 2025 20:37:33 +0530 Subject: [PATCH 012/115] ci: updated to have concise and parallel builds --- .github/workflows/docker.yaml | 58 ++++++++++------------------------- 1 file changed, 17 insertions(+), 41 deletions(-) diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index b44e63a0..05ab7831 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -2,14 +2,14 @@ name: Docker Publish on: push: - branches: - - main - - stable - tags: - - 'v*' - - '*.*.*' + branches: [main, stable] + tags: ['v*', '*.*.*'] workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + permissions: packages: write contents: read @@ -21,17 +21,14 @@ env: jobs: docker-build-publish: runs-on: ubuntu-latest + # timeout-minutes: 30 steps: - name: Checkout code uses: actions/checkout@v4 - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - + - name: Log in to GitHub Container Registry uses: docker/login-action@v3 with: @@ -45,41 +42,20 @@ jobs: with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: | - type=ref,event=branch + type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }} + type=raw,value=stable,enable=${{ github.ref == 'refs/heads/stable' }} type=ref,event=tag - type=sha + type=sha,format=short + type=raw,value=${{ github.ref_name }},enable=${{ startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/main' || github.ref == 'refs/heads/stable' }} - - name: Build and push Docker image for main - if: github.ref == 'refs/heads/main' + - name: Build and push Docker image uses: docker/build-push-action@v6 with: context: . platforms: linux/amd64,linux/arm64 push: true - tags: | - ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest - ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} - labels: ${{ steps.meta.outputs.labels }} - - - name: Build and push Docker image for stable - if: github.ref == 'refs/heads/stable' - uses: docker/build-push-action@v6 - with: - context: . - platforms: linux/amd64,linux/arm64 - push: true - tags: | - ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:stable - ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} - labels: ${{ steps.meta.outputs.labels }} - - - name: Build and push Docker image for tags - if: startsWith(github.ref, 'refs/tags/') - uses: docker/build-push-action@v6 - with: - context: . - platforms: linux/amd64,linux/arm64 - push: true - tags: | - ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.ref_name }} + tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} + + - name: Check manifest + run: docker buildx imagetools inspect ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.version }} \ No newline at end of file From f9436d4929bbb41a316dee69472145d8b71cca0a Mon Sep 17 00:00:00 2001 From: Anirban Kar Date: Wed, 5 Mar 2025 03:58:01 +0530 Subject: [PATCH 013/115] ci: updated target for docker build (#1451) --- .github/workflows/docker.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index 05ab7831..a038e02f 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -53,6 +53,7 @@ jobs: with: context: . platforms: linux/amd64,linux/arm64 + target: bolt-ai-production push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} From 73a0f3ae24c3dc79c68d075b49dea3883d4ce694 Mon Sep 17 00:00:00 2001 From: Anirban Kar Date: Wed, 5 Mar 2025 04:23:01 +0530 Subject: [PATCH 014/115] fix: git clone modal to work with non main as default branch (#1428) --- .../components/RepositorySelectionDialog.tsx | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/app/components/@settings/tabs/connections/components/RepositorySelectionDialog.tsx b/app/components/@settings/tabs/connections/components/RepositorySelectionDialog.tsx index 06202850..5f07e727 100644 --- a/app/components/@settings/tabs/connections/components/RepositorySelectionDialog.tsx +++ b/app/components/@settings/tabs/connections/components/RepositorySelectionDialog.tsx @@ -292,11 +292,24 @@ export function RepositorySelectionDialog({ isOpen, onClose, onSelect }: Reposit const connection = getLocalStorage('github_connection'); const headers: HeadersInit = connection?.token ? { Authorization: `Bearer ${connection.token}` } : {}; - - // Fetch repository tree - const treeResponse = await fetch(`https://api.github.com/repos/${owner}/${repo}/git/trees/main?recursive=1`, { + const repoObjResponse = await fetch(`https://api.github.com/repos/${owner}/${repo}`, { headers, }); + const repoObjData = (await repoObjResponse.json()) as any; + + if (!repoObjData.default_branch) { + throw new Error('Failed to fetch repository branch'); + } + + const defaultBranch = repoObjData.default_branch; + + // Fetch repository tree + const treeResponse = await fetch( + `https://api.github.com/repos/${owner}/${repo}/git/trees/${defaultBranch}?recursive=1`, + { + headers, + }, + ); if (!treeResponse.ok) { throw new Error('Failed to fetch repository structure'); From 1f940391b19e7187890623150136d24f0adb6322 Mon Sep 17 00:00:00 2001 From: Anirban Kar Date: Wed, 5 Mar 2025 10:59:48 +0530 Subject: [PATCH 015/115] feat: restoring project from snapshot on reload (#444) * feat:(project-snapshot) restoring project from snapshot on reload * minor bugfix * updated message * added snapshot reload with auto run dev commands * added message context * snapshot updated --- app/lib/persistence/types.ts | 7 + app/lib/persistence/useChatHistory.ts | 218 +++++++++++++++++++++++++- 2 files changed, 217 insertions(+), 8 deletions(-) create mode 100644 app/lib/persistence/types.ts diff --git a/app/lib/persistence/types.ts b/app/lib/persistence/types.ts new file mode 100644 index 00000000..56dacd61 --- /dev/null +++ b/app/lib/persistence/types.ts @@ -0,0 +1,7 @@ +import type { FileMap } from '~/lib/stores/files'; + +export interface Snapshot { + chatIndex: string; + files: FileMap; + summary?: string; +} diff --git a/app/lib/persistence/useChatHistory.ts b/app/lib/persistence/useChatHistory.ts index 7baefa56..b8b5c833 100644 --- a/app/lib/persistence/useChatHistory.ts +++ b/app/lib/persistence/useChatHistory.ts @@ -1,7 +1,7 @@ import { useLoaderData, useNavigate, useSearchParams } from '@remix-run/react'; -import { useState, useEffect } from 'react'; +import { useState, useEffect, useCallback } from 'react'; import { atom } from 'nanostores'; -import type { Message } from 'ai'; +import { generateId, type JSONValue, type Message } from 'ai'; import { toast } from 'react-toastify'; import { workbenchStore } from '~/lib/stores/workbench'; import { logStore } from '~/lib/stores/logs'; // Import logStore @@ -15,6 +15,11 @@ import { createChatFromMessages, type IChatMetadata, } from './db'; +import type { FileMap } from '~/lib/stores/files'; +import type { Snapshot } from './types'; +import { webcontainer } from '~/lib/webcontainer'; +import { createCommandsMessage, detectProjectCommands } from '~/utils/projectCommands'; +import type { ContextAnnotation } from '~/types/context'; export interface ChatHistoryItem { id: string; @@ -37,6 +42,7 @@ export function useChatHistory() { const { id: mixedId } = useLoaderData<{ id?: string }>(); const [searchParams] = useSearchParams(); + const [archivedMessages, setArchivedMessages] = useState([]); const [initialMessages, setInitialMessages] = useState([]); const [ready, setReady] = useState(false); const [urlId, setUrlId] = useState(); @@ -56,14 +62,128 @@ export function useChatHistory() { if (mixedId) { getMessages(db, mixedId) - .then((storedMessages) => { + .then(async (storedMessages) => { if (storedMessages && storedMessages.messages.length > 0) { + const snapshotStr = localStorage.getItem(`snapshot:${mixedId}`); + const snapshot: Snapshot = snapshotStr ? JSON.parse(snapshotStr) : { chatIndex: 0, files: {} }; + const summary = snapshot.summary; + const rewindId = searchParams.get('rewindTo'); - const filteredMessages = rewindId - ? storedMessages.messages.slice(0, storedMessages.messages.findIndex((m) => m.id === rewindId) + 1) - : storedMessages.messages; + let startingIdx = 0; + const endingIdx = rewindId + ? storedMessages.messages.findIndex((m) => m.id === rewindId) + 1 + : storedMessages.messages.length; + const snapshotIndex = storedMessages.messages.findIndex((m) => m.id === snapshot.chatIndex); + + if (snapshotIndex >= 0 && snapshotIndex < endingIdx) { + startingIdx = snapshotIndex; + } + + if (snapshotIndex > 0 && storedMessages.messages[snapshotIndex].id == rewindId) { + startingIdx = 0; + } + + let filteredMessages = storedMessages.messages.slice(startingIdx + 1, endingIdx); + let archivedMessages: Message[] = []; + + if (startingIdx > 0) { + archivedMessages = storedMessages.messages.slice(0, startingIdx + 1); + } + + setArchivedMessages(archivedMessages); + + if (startingIdx > 0) { + const files = Object.entries(snapshot?.files || {}) + .map(([key, value]) => { + if (value?.type !== 'file') { + return null; + } + + return { + content: value.content, + path: key, + }; + }) + .filter((x) => !!x); + const projectCommands = await detectProjectCommands(files); + const commands = createCommandsMessage(projectCommands); + + filteredMessages = [ + { + id: generateId(), + role: 'user', + content: `Restore project from snapshot + `, + annotations: ['no-store', 'hidden'], + }, + { + id: storedMessages.messages[snapshotIndex].id, + role: 'assistant', + content: ` πŸ“¦ Chat Restored from snapshot, You can revert this message to load the full chat history + + ${Object.entries(snapshot?.files || {}) + .filter((x) => !x[0].endsWith('lock.json')) + .map(([key, value]) => { + if (value?.type === 'file') { + return ` + +${value.content} + + `; + } else { + return ``; + } + }) + .join('\n')} + + `, + annotations: [ + 'no-store', + ...(summary + ? [ + { + chatId: storedMessages.messages[snapshotIndex].id, + type: 'chatSummary', + summary, + } satisfies ContextAnnotation, + ] + : []), + ], + }, + ...(commands !== null + ? [ + { + id: `${storedMessages.messages[snapshotIndex].id}-2`, + role: 'user' as const, + content: `setup project`, + annotations: ['no-store', 'hidden'], + }, + { + ...commands, + id: `${storedMessages.messages[snapshotIndex].id}-3`, + annotations: [ + 'no-store', + ...(commands.annotations || []), + ...(summary + ? [ + { + chatId: `${storedMessages.messages[snapshotIndex].id}-3`, + type: 'chatSummary', + summary, + } satisfies ContextAnnotation, + ] + : []), + ], + }, + ] + : []), + ...filteredMessages, + ]; + restoreSnapshot(mixedId); + } setInitialMessages(filteredMessages); + setUrlId(storedMessages.urlId); description.set(storedMessages.description); chatId.set(storedMessages.id); @@ -75,10 +195,64 @@ export function useChatHistory() { setReady(true); }) .catch((error) => { + console.error(error); + logStore.logError('Failed to load chat messages', error); toast.error(error.message); }); } + }, [mixedId]); + + const takeSnapshot = useCallback( + async (chatIdx: string, files: FileMap, _chatId?: string | undefined, chatSummary?: string) => { + const id = _chatId || chatId; + + if (!id) { + return; + } + + const snapshot: Snapshot = { + chatIndex: chatIdx, + files, + summary: chatSummary, + }; + localStorage.setItem(`snapshot:${id}`, JSON.stringify(snapshot)); + }, + [chatId], + ); + + const restoreSnapshot = useCallback(async (id: string) => { + const snapshotStr = localStorage.getItem(`snapshot:${id}`); + const container = await webcontainer; + + // if (snapshotStr)setSnapshot(JSON.parse(snapshotStr)); + const snapshot: Snapshot = snapshotStr ? JSON.parse(snapshotStr) : { chatIndex: 0, files: {} }; + + if (!snapshot?.files) { + return; + } + + Object.entries(snapshot.files).forEach(async ([key, value]) => { + if (key.startsWith(container.workdir)) { + key = key.replace(container.workdir, ''); + } + + if (value?.type === 'folder') { + await container.fs.mkdir(key, { recursive: true }); + } + }); + Object.entries(snapshot.files).forEach(async ([key, value]) => { + if (value?.type === 'file') { + if (key.startsWith(container.workdir)) { + key = key.replace(container.workdir, ''); + } + + await container.fs.writeFile(key, value.content, { encoding: value.isBinary ? undefined : 'utf8' }); + } else { + } + }); + + // workbenchStore.files.setKey(snapshot?.files) }, []); return { @@ -105,14 +279,34 @@ export function useChatHistory() { } const { firstArtifact } = workbenchStore; + messages = messages.filter((m) => !m.annotations?.includes('no-store')); + + let _urlId = urlId; if (!urlId && firstArtifact?.id) { const urlId = await getUrlId(db, firstArtifact.id); - + _urlId = urlId; navigateChat(urlId); setUrlId(urlId); } + let chatSummary: string | undefined = undefined; + const lastMessage = messages[messages.length - 1]; + + if (lastMessage.role === 'assistant') { + const annotations = lastMessage.annotations as JSONValue[]; + const filteredAnnotations = (annotations?.filter( + (annotation: JSONValue) => + annotation && typeof annotation === 'object' && Object.keys(annotation).includes('type'), + ) || []) as { type: string; value: any } & { [key: string]: any }[]; + + if (filteredAnnotations.find((annotation) => annotation.type === 'chatSummary')) { + chatSummary = filteredAnnotations.find((annotation) => annotation.type === 'chatSummary')?.summary; + } + } + + takeSnapshot(messages[messages.length - 1].id, workbenchStore.files.get(), _urlId, chatSummary); + if (!description.get() && firstArtifact?.title) { description.set(firstArtifact?.title); } @@ -127,7 +321,15 @@ export function useChatHistory() { } } - await setMessages(db, chatId.get() as string, messages, urlId, description.get(), undefined, chatMetadata.get()); + await setMessages( + db, + chatId.get() as string, + [...archivedMessages, ...messages], + urlId, + description.get(), + undefined, + chatMetadata.get(), + ); }, duplicateCurrentChat: async (listItemId: string) => { if (!db || (!mixedId && !listItemId)) { From 20722a108ca619c7eca68b063ae6c7af786d4efe Mon Sep 17 00:00:00 2001 From: Burhanuddin Khatri <144617735+BurhanCantCode@users.noreply.github.com> Date: Wed, 5 Mar 2025 18:42:52 +0500 Subject: [PATCH 016/115] feat: add Claude 3.7 Sonnet model as static list and update API key reference (#1449) --- app/lib/modules/llm/providers/anthropic.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/lib/modules/llm/providers/anthropic.ts b/app/lib/modules/llm/providers/anthropic.ts index f8dca5a8..70f93c07 100644 --- a/app/lib/modules/llm/providers/anthropic.ts +++ b/app/lib/modules/llm/providers/anthropic.ts @@ -13,6 +13,12 @@ export default class AnthropicProvider extends BaseProvider { }; staticModels: ModelInfo[] = [ + { + name: 'claude-3-7-sonnet-20250219', + label: 'Claude 3.7 Sonnet', + provider: 'Anthropic', + maxTokenAllowed: 8000, + }, { name: 'claude-3-5-sonnet-latest', label: 'Claude 3.5 Sonnet (new)', @@ -46,7 +52,7 @@ export default class AnthropicProvider extends BaseProvider { providerSettings: settings, serverEnv: serverEnv as any, defaultBaseUrlKey: '', - defaultApiTokenKey: 'OPENAI_API_KEY', + defaultApiTokenKey: 'ANTHROPIC_API_KEY', }); if (!apiKey) { From 9780393b17de28c9bad6fecee4a5ce713541eb0f Mon Sep 17 00:00:00 2001 From: Anirban Kar Date: Fri, 7 Mar 2025 00:29:44 +0530 Subject: [PATCH 017/115] fix: git cookies are auto set anytime connects changed or loaded (#1461) --- .../tabs/connections/GithubConnection.tsx | 94 +++++++++++-------- 1 file changed, 54 insertions(+), 40 deletions(-) diff --git a/app/components/@settings/tabs/connections/GithubConnection.tsx b/app/components/@settings/tabs/connections/GithubConnection.tsx index 9f433724..36197f2e 100644 --- a/app/components/@settings/tabs/connections/GithubConnection.tsx +++ b/app/components/@settings/tabs/connections/GithubConnection.tsx @@ -77,6 +77,46 @@ export function GithubConnection() { const [isFetchingStats, setIsFetchingStats] = useState(false); const [isStatsExpanded, setIsStatsExpanded] = useState(false); + const fetchGithubUser = async (token: string) => { + try { + setIsConnecting(true); + + const response = await fetch('https://api.github.com/user', { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + + if (!response.ok) { + throw new Error('Invalid token or unauthorized'); + } + + const data = (await response.json()) as GitHubUserResponse; + const newConnection: GitHubConnection = { + user: data, + token, + tokenType: connection.tokenType, + }; + + localStorage.setItem('github_connection', JSON.stringify(newConnection)); + Cookies.set('githubToken', token); + Cookies.set('githubUsername', data.login); + Cookies.set('git:github.com', JSON.stringify({ username: token, password: 'x-oauth-basic' })); + + setConnection(newConnection); + + await fetchGitHubStats(token); + + toast.success('Successfully connected to GitHub'); + } catch (error) { + logStore.logError('Failed to authenticate with GitHub', { error }); + toast.error('Failed to connect to GitHub'); + setConnection({ user: null, token: '', tokenType: 'classic' }); + } finally { + setIsConnecting(false); + } + }; + const fetchGitHubStats = async (token: string) => { try { setIsFetchingStats(true); @@ -182,51 +222,25 @@ export function GithubConnection() { setIsLoading(false); }, []); + useEffect(() => { + if (!connection) { + return; + } + + const token = connection.token; + const data = connection.user; + Cookies.set('githubToken', token); + Cookies.set('git:github.com', JSON.stringify({ username: token, password: 'x-oauth-basic' })); + + if (data) { + Cookies.set('githubUsername', data.login); + } + }, [connection]); if (isLoading || isConnecting || isFetchingStats) { return ; } - const fetchGithubUser = async (token: string) => { - try { - setIsConnecting(true); - - const response = await fetch('https://api.github.com/user', { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - - if (!response.ok) { - throw new Error('Invalid token or unauthorized'); - } - - const data = (await response.json()) as GitHubUserResponse; - const newConnection: GitHubConnection = { - user: data, - token, - tokenType: connection.tokenType, - }; - - localStorage.setItem('github_connection', JSON.stringify(newConnection)); - Cookies.set('githubToken', token); - Cookies.set('githubUsername', data.login); - Cookies.set('git:github.com', JSON.stringify({ username: token, password: 'x-oauth-basic' })); - - setConnection(newConnection); - - await fetchGitHubStats(token); - - toast.success('Successfully connected to GitHub'); - } catch (error) { - logStore.logError('Failed to authenticate with GitHub', { error }); - toast.error('Failed to connect to GitHub'); - setConnection({ user: null, token: '', tokenType: 'classic' }); - } finally { - setIsConnecting(false); - } - }; - const handleConnect = async (event: React.FormEvent) => { event.preventDefault(); await fetchGithubUser(connection.token); From cd4a5e83809759efb82ed0e26abc7a9349ae47ff Mon Sep 17 00:00:00 2001 From: Anirban Kar Date: Fri, 7 Mar 2025 14:10:37 +0530 Subject: [PATCH 018/115] fix: fix git proxy to work with other git provider (#1466) --- app/lib/persistence/useChatHistory.ts | 6 +- app/routes/api.git-proxy.$.ts | 176 +++++++++++++++++++++----- 2 files changed, 145 insertions(+), 37 deletions(-) diff --git a/app/lib/persistence/useChatHistory.ts b/app/lib/persistence/useChatHistory.ts index b8b5c833..3077ca44 100644 --- a/app/lib/persistence/useChatHistory.ts +++ b/app/lib/persistence/useChatHistory.ts @@ -69,7 +69,7 @@ export function useChatHistory() { const summary = snapshot.summary; const rewindId = searchParams.get('rewindTo'); - let startingIdx = 0; + let startingIdx = -1; const endingIdx = rewindId ? storedMessages.messages.findIndex((m) => m.id === rewindId) + 1 : storedMessages.messages.length; @@ -80,13 +80,13 @@ export function useChatHistory() { } if (snapshotIndex > 0 && storedMessages.messages[snapshotIndex].id == rewindId) { - startingIdx = 0; + startingIdx = -1; } let filteredMessages = storedMessages.messages.slice(startingIdx + 1, endingIdx); let archivedMessages: Message[] = []; - if (startingIdx > 0) { + if (startingIdx >= 0) { archivedMessages = storedMessages.messages.slice(0, startingIdx + 1); } diff --git a/app/routes/api.git-proxy.$.ts b/app/routes/api.git-proxy.$.ts index 9e6cb3b1..45230520 100644 --- a/app/routes/api.git-proxy.$.ts +++ b/app/routes/api.git-proxy.$.ts @@ -1,6 +1,47 @@ import { json } from '@remix-run/cloudflare'; import type { ActionFunctionArgs, LoaderFunctionArgs } from '@remix-run/cloudflare'; +// Allowed headers to forward to the target server +const ALLOW_HEADERS = [ + 'accept-encoding', + 'accept-language', + 'accept', + 'access-control-allow-origin', + 'authorization', + 'cache-control', + 'connection', + 'content-length', + 'content-type', + 'dnt', + 'pragma', + 'range', + 'referer', + 'user-agent', + 'x-authorization', + 'x-http-method-override', + 'x-requested-with', +]; + +// Headers to expose from the target server's response +const EXPOSE_HEADERS = [ + 'accept-ranges', + 'age', + 'cache-control', + 'content-length', + 'content-language', + 'content-type', + 'date', + 'etag', + 'expires', + 'last-modified', + 'pragma', + 'server', + 'transfer-encoding', + 'vary', + 'x-github-request-id', + 'x-redirected-url', +]; + // Handle all HTTP methods export async function action({ request, params }: ActionFunctionArgs) { return handleProxyRequest(request, params['*']); @@ -16,50 +57,117 @@ async function handleProxyRequest(request: Request, path: string | undefined) { return json({ error: 'Invalid proxy URL format' }, { status: 400 }); } - const url = new URL(request.url); - - // Reconstruct the target URL - const targetURL = `https://${path}${url.search}`; - - // Forward the request to the target URL - const response = await fetch(targetURL, { - method: request.method, - headers: { - ...Object.fromEntries(request.headers), - - // Override host header with the target host - host: new URL(targetURL).host, - }, - body: ['GET', 'HEAD'].includes(request.method) ? null : await request.arrayBuffer(), - }); - - // Create response with CORS headers - const corsHeaders = { - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS', - 'Access-Control-Allow-Headers': '*', - }; - - // Handle preflight requests + // Handle CORS preflight request if (request.method === 'OPTIONS') { return new Response(null, { - headers: corsHeaders, - status: 204, + status: 200, + headers: { + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Methods': 'POST, GET, OPTIONS', + 'Access-Control-Allow-Headers': ALLOW_HEADERS.join(', '), + 'Access-Control-Expose-Headers': EXPOSE_HEADERS.join(', '), + 'Access-Control-Max-Age': '86400', + }, }); } - // Forward the response with CORS headers - const responseHeaders = new Headers(response.headers); - Object.entries(corsHeaders).forEach(([key, value]) => { - responseHeaders.set(key, value); - }); + // Extract domain and remaining path + const parts = path.match(/([^\/]+)\/?(.*)/); + if (!parts) { + return json({ error: 'Invalid path format' }, { status: 400 }); + } + + const domain = parts[1]; + const remainingPath = parts[2] || ''; + + // Reconstruct the target URL with query parameters + const url = new URL(request.url); + const targetURL = `https://${domain}/${remainingPath}${url.search}`; + + console.log('Target URL:', targetURL); + + // Filter and prepare headers + const headers = new Headers(); + + // Only forward allowed headers + for (const header of ALLOW_HEADERS) { + if (request.headers.has(header)) { + headers.set(header, request.headers.get(header)!); + } + } + + // Set the host header + headers.set('Host', domain); + + // Set Git user agent if not already present + if (!headers.has('user-agent') || !headers.get('user-agent')?.startsWith('git/')) { + headers.set('User-Agent', 'git/@isomorphic-git/cors-proxy'); + } + + console.log('Request headers:', Object.fromEntries(headers.entries())); + + // Prepare fetch options + const fetchOptions: RequestInit = { + method: request.method, + headers, + redirect: 'follow', + }; + + // Add body and duplex option for non-GET/HEAD requests + if (!['GET', 'HEAD'].includes(request.method)) { + fetchOptions.body = request.body; + fetchOptions.duplex = 'half'; // This fixes the "duplex option is required when sending a body" error + } + + // Forward the request to the target URL + const response = await fetch(targetURL, fetchOptions); + + console.log('Response status:', response.status); + + // Create response headers + const responseHeaders = new Headers(); + + // Add CORS headers + responseHeaders.set('Access-Control-Allow-Origin', '*'); + responseHeaders.set('Access-Control-Allow-Methods', 'POST, GET, OPTIONS'); + responseHeaders.set('Access-Control-Allow-Headers', ALLOW_HEADERS.join(', ')); + responseHeaders.set('Access-Control-Expose-Headers', EXPOSE_HEADERS.join(', ')); + + // Copy exposed headers from the target response + for (const header of EXPOSE_HEADERS) { + // Skip content-length as we'll use the original response's content-length + if (header === 'content-length') { + continue; + } + + if (response.headers.has(header)) { + responseHeaders.set(header, response.headers.get(header)!); + } + } + + // If the response was redirected, add the x-redirected-url header + if (response.redirected) { + responseHeaders.set('x-redirected-url', response.url); + } + + console.log('Response headers:', Object.fromEntries(responseHeaders.entries())); + + // Return the response with the target's body stream piped directly return new Response(response.body, { status: response.status, + statusText: response.statusText, headers: responseHeaders, }); } catch (error) { - console.error('Git proxy error:', error); - return json({ error: 'Proxy error' }, { status: 500 }); + console.error('Proxy error:', error); + return json( + { + error: 'Proxy error', + message: error instanceof Error ? error.message : 'Unknown error', + url: path ? `https://${path}` : 'Invalid URL', + }, + { status: 500 }, + ); } } From 7ff48e1d45ff3ab9b7394218c230948b318ed2e1 Mon Sep 17 00:00:00 2001 From: Anirban Kar Date: Sat, 8 Mar 2025 12:44:46 +0530 Subject: [PATCH 019/115] fix: attachment not getting sent on first message if starter template is turned on (#1472) --- app/components/chat/Chat.client.tsx | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/app/components/chat/Chat.client.tsx b/app/components/chat/Chat.client.tsx index c08dd6d8..8ac5d286 100644 --- a/app/components/chat/Chat.client.tsx +++ b/app/components/chat/Chat.client.tsx @@ -323,7 +323,16 @@ export const ChatImpl = memo( { id: `1-${new Date().getTime()}`, role: 'user', - content: messageContent, + content: [ + { + type: 'text', + text: `[Model: ${model}]\n\n[Provider: ${provider.name}]\n\n${messageContent}`, + }, + ...imageDataList.map((imageData) => ({ + type: 'image', + image: imageData, + })), + ] as any, }, { id: `2-${new Date().getTime()}`, @@ -338,6 +347,15 @@ export const ChatImpl = memo( }, ]); reload(); + setInput(''); + Cookies.remove(PROMPT_COOKIE_KEY); + + setUploadedFiles([]); + setImageDataList([]); + + resetEnhancer(); + + textareaRef.current?.blur(); setFakeLoading(false); return; @@ -364,6 +382,15 @@ export const ChatImpl = memo( ]); reload(); setFakeLoading(false); + setInput(''); + Cookies.remove(PROMPT_COOKIE_KEY); + + setUploadedFiles([]); + setImageDataList([]); + + resetEnhancer(); + + textareaRef.current?.blur(); return; } From 50dd74de071dba4ed90a42a25884a2e9c0128cc2 Mon Sep 17 00:00:00 2001 From: Stijnus <72551117+Stijnus@users.noreply.github.com> Date: Sat, 8 Mar 2025 20:37:56 +0100 Subject: [PATCH 020/115] fix: settings bugfix error building my application issue #1414 (#1436) * Fix: error building my application #1414 * fix for vite * Update vite.config.ts * Update root.tsx * fix the root.tsx and the debugtab * lm studio fix and fix for the api key * Update api.enhancer for prompt enhancement * bugfixes * Revert api.enhancer.ts back to original code * Update api.enhancer.ts * Update api.git-proxy.$.ts * Update api.git-proxy.$.ts * Update api.enhancer.ts --- .../tabs/connections/ConnectionsTab.tsx | 25 +- .../tabs/connections/GithubConnection.tsx | 2 +- .../tabs/connections/NetlifyConnection.tsx | 2 +- app/lib/hooks/useShortcuts.ts | 2 +- app/lib/modules/llm/providers/lmstudio.ts | 2 +- app/lib/modules/llm/providers/ollama.ts | 31 +- app/root.tsx | 7 +- app/routes/api.check-env-key.ts | 33 +- app/routes/api.deploy.ts | 12 +- app/routes/api.enhancer.ts | 18 +- app/routes/api.git-proxy.$.ts | 8 +- app/routes/api.health.ts | 20 +- app/routes/api.system.app-info.ts | 47 +- app/routes/api.system.git-info.ts | 168 ++--- app/routes/api.update.ts | 580 +----------------- package.json | 1 + pnpm-lock.yaml | 3 + vite.config.ts | 43 +- 18 files changed, 233 insertions(+), 771 deletions(-) diff --git a/app/components/@settings/tabs/connections/ConnectionsTab.tsx b/app/components/@settings/tabs/connections/ConnectionsTab.tsx index 450d241a..72ff6434 100644 --- a/app/components/@settings/tabs/connections/ConnectionsTab.tsx +++ b/app/components/@settings/tabs/connections/ConnectionsTab.tsx @@ -1,6 +1,19 @@ import { motion } from 'framer-motion'; -import { GithubConnection } from './GithubConnection'; -import { NetlifyConnection } from './NetlifyConnection'; +import React, { Suspense } from 'react'; + +// Use React.lazy for dynamic imports +const GithubConnection = React.lazy(() => import('./GithubConnection')); +const NetlifyConnection = React.lazy(() => import('./NetlifyConnection')); + +// Loading fallback component +const LoadingFallback = () => ( +
+
+
+ Loading connection... +
+
+); export default function ConnectionsTab() { return ( @@ -20,8 +33,12 @@ export default function ConnectionsTab() {

- - + }> + + + }> + +
); diff --git a/app/components/@settings/tabs/connections/GithubConnection.tsx b/app/components/@settings/tabs/connections/GithubConnection.tsx index 36197f2e..789cf0b1 100644 --- a/app/components/@settings/tabs/connections/GithubConnection.tsx +++ b/app/components/@settings/tabs/connections/GithubConnection.tsx @@ -66,7 +66,7 @@ interface GitHubConnection { stats?: GitHubStats; } -export function GithubConnection() { +export default function GithubConnection() { const [connection, setConnection] = useState({ user: null, token: '', diff --git a/app/components/@settings/tabs/connections/NetlifyConnection.tsx b/app/components/@settings/tabs/connections/NetlifyConnection.tsx index 5881b761..d811602e 100644 --- a/app/components/@settings/tabs/connections/NetlifyConnection.tsx +++ b/app/components/@settings/tabs/connections/NetlifyConnection.tsx @@ -13,7 +13,7 @@ import { } from '~/lib/stores/netlify'; import type { NetlifyUser } from '~/types/netlify'; -export function NetlifyConnection() { +export default function NetlifyConnection() { const connection = useStore(netlifyConnection); const connecting = useStore(isConnecting); const fetchingStats = useStore(isFetchingStats); diff --git a/app/lib/hooks/useShortcuts.ts b/app/lib/hooks/useShortcuts.ts index 39308fcd..447a97e3 100644 --- a/app/lib/hooks/useShortcuts.ts +++ b/app/lib/hooks/useShortcuts.ts @@ -41,7 +41,7 @@ export function useShortcuts(): void { } // Debug logging in development only - if (process.env.NODE_ENV === 'development') { + if (import.meta.env.DEV) { console.log('Key pressed:', { key: event.key, code: event.code, diff --git a/app/lib/modules/llm/providers/lmstudio.ts b/app/lib/modules/llm/providers/lmstudio.ts index 9dabc3eb..fe5b27cd 100644 --- a/app/lib/modules/llm/providers/lmstudio.ts +++ b/app/lib/modules/llm/providers/lmstudio.ts @@ -75,7 +75,7 @@ export default class LMStudioProvider extends BaseProvider { throw new Error('No baseUrl found for LMStudio provider'); } - const isDocker = process.env.RUNNING_IN_DOCKER === 'true' || serverEnv?.RUNNING_IN_DOCKER === 'true'; + const isDocker = process?.env?.RUNNING_IN_DOCKER === 'true' || serverEnv?.RUNNING_IN_DOCKER === 'true'; if (typeof window === 'undefined') { baseUrl = isDocker ? baseUrl.replace('localhost', 'host.docker.internal') : baseUrl; diff --git a/app/lib/modules/llm/providers/ollama.ts b/app/lib/modules/llm/providers/ollama.ts index a3974ab3..e50ecae5 100644 --- a/app/lib/modules/llm/providers/ollama.ts +++ b/app/lib/modules/llm/providers/ollama.ts @@ -27,8 +27,6 @@ export interface OllamaApiResponse { models: OllamaModel[]; } -export const DEFAULT_NUM_CTX = process?.env?.DEFAULT_NUM_CTX ? parseInt(process.env.DEFAULT_NUM_CTX, 10) : 32768; - export default class OllamaProvider extends BaseProvider { name = 'Ollama'; getApiKeyLink = 'https://ollama.com/download'; @@ -41,6 +39,26 @@ export default class OllamaProvider extends BaseProvider { staticModels: ModelInfo[] = []; + private _convertEnvToRecord(env?: Env): Record { + if (!env) { + return {}; + } + + // Convert Env to a plain object with string values + return Object.entries(env).reduce( + (acc, [key, value]) => { + acc[key] = String(value); + return acc; + }, + {} as Record, + ); + } + + getDefaultNumCtx(serverEnv?: Env): number { + const envRecord = this._convertEnvToRecord(serverEnv); + return envRecord.DEFAULT_NUM_CTX ? parseInt(envRecord.DEFAULT_NUM_CTX, 10) : 32768; + } + async getDynamicModels( apiKeys?: Record, settings?: IProviderSetting, @@ -81,6 +99,7 @@ export default class OllamaProvider extends BaseProvider { maxTokenAllowed: 8000, })); } + getModelInstance: (options: { model: string; serverEnv?: Env; @@ -88,10 +107,12 @@ export default class OllamaProvider extends BaseProvider { providerSettings?: Record; }) => LanguageModelV1 = (options) => { const { apiKeys, providerSettings, serverEnv, model } = options; + const envRecord = this._convertEnvToRecord(serverEnv); + let { baseUrl } = this.getProviderBaseUrlAndKey({ apiKeys, providerSettings: providerSettings?.[this.name], - serverEnv: serverEnv as any, + serverEnv: envRecord, defaultBaseUrlKey: 'OLLAMA_API_BASE_URL', defaultApiTokenKey: '', }); @@ -101,14 +122,14 @@ export default class OllamaProvider extends BaseProvider { throw new Error('No baseUrl found for OLLAMA provider'); } - const isDocker = process?.env?.RUNNING_IN_DOCKER === 'true' || serverEnv?.RUNNING_IN_DOCKER === 'true'; + const isDocker = process?.env?.RUNNING_IN_DOCKER === 'true' || envRecord.RUNNING_IN_DOCKER === 'true'; baseUrl = isDocker ? baseUrl.replace('localhost', 'host.docker.internal') : baseUrl; baseUrl = isDocker ? baseUrl.replace('127.0.0.1', 'host.docker.internal') : baseUrl; logger.debug('Ollama Base Url used: ', baseUrl); const ollamaInstance = ollama(model, { - numCtx: DEFAULT_NUM_CTX, + numCtx: this.getDefaultNumCtx(serverEnv), }) as LanguageModelV1 & { config: any }; ollamaInstance.config.baseURL = `${baseUrl}/api`; diff --git a/app/root.tsx b/app/root.tsx index b49d7355..a7ccb285 100644 --- a/app/root.tsx +++ b/app/root.tsx @@ -8,6 +8,7 @@ import { createHead } from 'remix-island'; import { useEffect } from 'react'; import { DndProvider } from 'react-dnd'; import { HTML5Backend } from 'react-dnd-html5-backend'; +import { ClientOnly } from 'remix-utils/client-only'; import reactToastifyStyles from 'react-toastify/dist/ReactToastify.css?url'; import globalStyles from './styles/index.scss?url'; @@ -72,11 +73,11 @@ export function Layout({ children }: { children: React.ReactNode }) { }, [theme]); return ( - - {children} + <> + {() => {children}} - + ); } diff --git a/app/routes/api.check-env-key.ts b/app/routes/api.check-env-key.ts index 14d21236..70f65bf0 100644 --- a/app/routes/api.check-env-key.ts +++ b/app/routes/api.check-env-key.ts @@ -1,16 +1,41 @@ import type { LoaderFunction } from '@remix-run/cloudflare'; -import { providerBaseUrlEnvKeys } from '~/utils/constants'; +import { LLMManager } from '~/lib/modules/llm/manager'; +import { getApiKeysFromCookie } from '~/lib/api/cookies'; export const loader: LoaderFunction = async ({ context, request }) => { const url = new URL(request.url); const provider = url.searchParams.get('provider'); - if (!provider || !providerBaseUrlEnvKeys[provider].apiTokenKey) { + if (!provider) { return Response.json({ isSet: false }); } - const envVarName = providerBaseUrlEnvKeys[provider].apiTokenKey; - const isSet = !!(process.env[envVarName] || (context?.cloudflare?.env as Record)?.[envVarName]); + const llmManager = LLMManager.getInstance(context?.cloudflare?.env as any); + const providerInstance = llmManager.getProvider(provider); + + if (!providerInstance || !providerInstance.config.apiTokenKey) { + return Response.json({ isSet: false }); + } + + const envVarName = providerInstance.config.apiTokenKey; + + // Get API keys from cookie + const cookieHeader = request.headers.get('Cookie'); + const apiKeys = getApiKeysFromCookie(cookieHeader); + + /* + * Check API key in order of precedence: + * 1. Client-side API keys (from cookies) + * 2. Server environment variables (from Cloudflare env) + * 3. Process environment variables (from .env.local) + * 4. LLMManager environment variables + */ + const isSet = !!( + apiKeys?.[provider] || + (context?.cloudflare?.env as Record)?.[envVarName] || + process.env[envVarName] || + llmManager.env[envVarName] + ); return Response.json({ isSet }); }; diff --git a/app/routes/api.deploy.ts b/app/routes/api.deploy.ts index 48543e97..0bc1c5e4 100644 --- a/app/routes/api.deploy.ts +++ b/app/routes/api.deploy.ts @@ -1,5 +1,4 @@ import { type ActionFunctionArgs, json } from '@remix-run/cloudflare'; -import crypto from 'crypto'; import type { NetlifySiteInfo } from '~/types/netlify'; interface DeployRequestBody { @@ -8,6 +7,15 @@ interface DeployRequestBody { chatId: string; } +async function sha1(message: string) { + const msgBuffer = new TextEncoder().encode(message); + const hashBuffer = await crypto.subtle.digest('SHA-1', msgBuffer); + const hashArray = Array.from(new Uint8Array(hashBuffer)); + const hashHex = hashArray.map((b) => b.toString(16).padStart(2, '0')).join(''); + + return hashHex; +} + export async function action({ request }: ActionFunctionArgs) { try { const { siteId, files, token, chatId } = (await request.json()) as DeployRequestBody & { token: string }; @@ -104,7 +112,7 @@ export async function action({ request }: ActionFunctionArgs) { for (const [filePath, content] of Object.entries(files)) { // Ensure file path starts with a forward slash const normalizedPath = filePath.startsWith('/') ? filePath : '/' + filePath; - const hash = crypto.createHash('sha1').update(content).digest('hex'); + const hash = await sha1(content); fileDigests[normalizedPath] = hash; } diff --git a/app/routes/api.enhancer.ts b/app/routes/api.enhancer.ts index 4ab54f31..1e7bad5f 100644 --- a/app/routes/api.enhancer.ts +++ b/app/routes/api.enhancer.ts @@ -95,24 +95,28 @@ async function enhancerAction({ context, request }: ActionFunctionArgs) { }, }); + // Handle streaming errors in a non-blocking way (async () => { - for await (const part of result.fullStream) { - if (part.type === 'error') { - const error: any = part.error; - logger.error(error); - - return; + try { + for await (const part of result.fullStream) { + if (part.type === 'error') { + const error: any = part.error; + logger.error('Streaming error:', error); + break; + } } + } catch (error) { + logger.error('Error processing stream:', error); } })(); + // Return the text stream directly since it's already text data return new Response(result.textStream, { status: 200, headers: { 'Content-Type': 'text/event-stream', Connection: 'keep-alive', 'Cache-Control': 'no-cache', - 'Text-Encoding': 'chunked', }, }); } catch (error: unknown) { diff --git a/app/routes/api.git-proxy.$.ts b/app/routes/api.git-proxy.$.ts index 45230520..a4e8f1e0 100644 --- a/app/routes/api.git-proxy.$.ts +++ b/app/routes/api.git-proxy.$.ts @@ -114,10 +114,14 @@ async function handleProxyRequest(request: Request, path: string | undefined) { redirect: 'follow', }; - // Add body and duplex option for non-GET/HEAD requests + // Add body for non-GET/HEAD requests if (!['GET', 'HEAD'].includes(request.method)) { fetchOptions.body = request.body; - fetchOptions.duplex = 'half'; // This fixes the "duplex option is required when sending a body" error + + /* + * Note: duplex property is removed to ensure TypeScript compatibility + * across different environments and versions + */ } // Forward the request to the target URL diff --git a/app/routes/api.health.ts b/app/routes/api.health.ts index 9d3bd839..e5f5a30d 100644 --- a/app/routes/api.health.ts +++ b/app/routes/api.health.ts @@ -1,18 +1,8 @@ -import type { LoaderFunctionArgs } from '@remix-run/node'; +import { json, type LoaderFunctionArgs } from '@remix-run/cloudflare'; export const loader = async ({ request: _request }: LoaderFunctionArgs) => { - // Return a simple 200 OK response with some basic health information - return new Response( - JSON.stringify({ - status: 'healthy', - timestamp: new Date().toISOString(), - uptime: process.uptime(), - }), - { - status: 200, - headers: { - 'Content-Type': 'application/json', - }, - }, - ); + return json({ + status: 'healthy', + timestamp: new Date().toISOString(), + }); }; diff --git a/app/routes/api.system.app-info.ts b/app/routes/api.system.app-info.ts index d3ed0185..01953b68 100644 --- a/app/routes/api.system.app-info.ts +++ b/app/routes/api.system.app-info.ts @@ -1,6 +1,5 @@ import type { ActionFunctionArgs, LoaderFunction } from '@remix-run/cloudflare'; import { json } from '@remix-run/cloudflare'; -import { execSync } from 'child_process'; // These are injected by Vite at build time declare const __APP_VERSION: string; @@ -11,34 +10,24 @@ declare const __PKG_DEPENDENCIES: Record; declare const __PKG_DEV_DEPENDENCIES: Record; declare const __PKG_PEER_DEPENDENCIES: Record; declare const __PKG_OPTIONAL_DEPENDENCIES: Record; +declare const __COMMIT_HASH: string; +declare const __GIT_BRANCH: string; +declare const __GIT_COMMIT_TIME: string; +declare const __GIT_AUTHOR: string; +declare const __GIT_EMAIL: string; +declare const __GIT_REMOTE_URL: string; +declare const __GIT_REPO_NAME: string; const getGitInfo = () => { - try { - return { - commitHash: execSync('git rev-parse --short HEAD').toString().trim(), - branch: execSync('git rev-parse --abbrev-ref HEAD').toString().trim(), - commitTime: execSync('git log -1 --format=%cd').toString().trim(), - author: execSync('git log -1 --format=%an').toString().trim(), - email: execSync('git log -1 --format=%ae').toString().trim(), - remoteUrl: execSync('git config --get remote.origin.url').toString().trim(), - repoName: execSync('git config --get remote.origin.url') - .toString() - .trim() - .replace(/^.*github.com[:/]/, '') - .replace(/\.git$/, ''), - }; - } catch (error) { - console.error('Failed to get git info:', error); - return { - commitHash: 'unknown', - branch: 'unknown', - commitTime: 'unknown', - author: 'unknown', - email: 'unknown', - remoteUrl: 'unknown', - repoName: 'unknown', - }; - } + return { + commitHash: __COMMIT_HASH || 'unknown', + branch: __GIT_BRANCH || 'unknown', + commitTime: __GIT_COMMIT_TIME || 'unknown', + author: __GIT_AUTHOR || 'unknown', + email: __GIT_EMAIL || 'unknown', + remoteUrl: __GIT_REMOTE_URL || 'unknown', + repoName: __GIT_REPO_NAME || 'unknown', + }; }; const formatDependencies = ( @@ -60,11 +49,11 @@ const getAppResponse = () => { version: __APP_VERSION || '0.1.0', description: __PKG_DESCRIPTION || 'A DIY LLM interface', license: __PKG_LICENSE || 'MIT', - environment: process.env.NODE_ENV || 'development', + environment: 'cloudflare', gitInfo, timestamp: new Date().toISOString(), runtimeInfo: { - nodeVersion: process.version || 'unknown', + nodeVersion: 'cloudflare', }, dependencies: { production: formatDependencies(__PKG_DEPENDENCIES, 'production'), diff --git a/app/routes/api.system.git-info.ts b/app/routes/api.system.git-info.ts index d6bf9975..63c879ce 100644 --- a/app/routes/api.system.git-info.ts +++ b/app/routes/api.system.git-info.ts @@ -1,138 +1,48 @@ -import type { LoaderFunction } from '@remix-run/cloudflare'; -import { json } from '@remix-run/cloudflare'; -import { execSync } from 'child_process'; +import { json, type LoaderFunction } from '@remix-run/cloudflare'; -interface GitHubRepoInfo { - name: string; - full_name: string; - default_branch: string; - stargazers_count: number; - forks_count: number; - open_issues_count: number; - parent?: { - full_name: string; - default_branch: string; - stargazers_count: number; - forks_count: number; +interface GitInfo { + local: { + commitHash: string; + branch: string; + commitTime: string; + author: string; + email: string; + remoteUrl: string; + repoName: string; }; + github?: { + currentRepo?: { + fullName: string; + defaultBranch: string; + stars: number; + forks: number; + openIssues?: number; + }; + }; + isForked?: boolean; } -const getLocalGitInfo = () => { - try { - return { - commitHash: execSync('git rev-parse HEAD').toString().trim(), - branch: execSync('git rev-parse --abbrev-ref HEAD').toString().trim(), - commitTime: execSync('git log -1 --format=%cd').toString().trim(), - author: execSync('git log -1 --format=%an').toString().trim(), - email: execSync('git log -1 --format=%ae').toString().trim(), - remoteUrl: execSync('git config --get remote.origin.url').toString().trim(), - repoName: execSync('git config --get remote.origin.url') - .toString() - .trim() - .replace(/^.*github.com[:/]/, '') - .replace(/\.git$/, ''), - }; - } catch (error) { - console.error('Failed to get local git info:', error); - return null; - } -}; +// These values will be replaced at build time +declare const __COMMIT_HASH: string; +declare const __GIT_BRANCH: string; +declare const __GIT_COMMIT_TIME: string; +declare const __GIT_AUTHOR: string; +declare const __GIT_EMAIL: string; +declare const __GIT_REMOTE_URL: string; +declare const __GIT_REPO_NAME: string; -const getGitHubInfo = async (repoFullName: string) => { - try { - // Add GitHub token if available - const headers: Record = { - Accept: 'application/vnd.github.v3+json', - }; - - const githubToken = process.env.GITHUB_TOKEN; - - if (githubToken) { - headers.Authorization = `token ${githubToken}`; - } - - console.log('Fetching GitHub info for:', repoFullName); // Debug log - - const response = await fetch(`https://api.github.com/repos/${repoFullName}`, { - headers, - }); - - if (!response.ok) { - console.error('GitHub API error:', { - status: response.status, - statusText: response.statusText, - repoFullName, - }); - - // If we get a 404, try the main repo as fallback - if (response.status === 404 && repoFullName !== 'stackblitz-labs/bolt.diy') { - return getGitHubInfo('stackblitz-labs/bolt.diy'); - } - - throw new Error(`GitHub API error: ${response.statusText}`); - } - - const data = await response.json(); - console.log('GitHub API response:', data); // Debug log - - return data as GitHubRepoInfo; - } catch (error) { - console.error('Failed to get GitHub info:', error); - return null; - } -}; - -export const loader: LoaderFunction = async ({ request: _request }) => { - const localInfo = getLocalGitInfo(); - console.log('Local git info:', localInfo); // Debug log - - // If we have local info, try to get GitHub info for both our fork and upstream - let githubInfo = null; - - if (localInfo?.repoName) { - githubInfo = await getGitHubInfo(localInfo.repoName); - } - - // If no local info or GitHub info, try the main repo - if (!githubInfo) { - githubInfo = await getGitHubInfo('stackblitz-labs/bolt.diy'); - } - - const response = { - local: localInfo || { - commitHash: 'unknown', - branch: 'unknown', - commitTime: 'unknown', - author: 'unknown', - email: 'unknown', - remoteUrl: 'unknown', - repoName: 'unknown', +export const loader: LoaderFunction = async () => { + const gitInfo: GitInfo = { + local: { + commitHash: typeof __COMMIT_HASH !== 'undefined' ? __COMMIT_HASH : 'development', + branch: typeof __GIT_BRANCH !== 'undefined' ? __GIT_BRANCH : 'main', + commitTime: typeof __GIT_COMMIT_TIME !== 'undefined' ? __GIT_COMMIT_TIME : new Date().toISOString(), + author: typeof __GIT_AUTHOR !== 'undefined' ? __GIT_AUTHOR : 'development', + email: typeof __GIT_EMAIL !== 'undefined' ? __GIT_EMAIL : 'development@local', + remoteUrl: typeof __GIT_REMOTE_URL !== 'undefined' ? __GIT_REMOTE_URL : 'local', + repoName: typeof __GIT_REPO_NAME !== 'undefined' ? __GIT_REPO_NAME : 'bolt.diy', }, - github: githubInfo - ? { - currentRepo: { - fullName: githubInfo.full_name, - defaultBranch: githubInfo.default_branch, - stars: githubInfo.stargazers_count, - forks: githubInfo.forks_count, - openIssues: githubInfo.open_issues_count, - }, - upstream: githubInfo.parent - ? { - fullName: githubInfo.parent.full_name, - defaultBranch: githubInfo.parent.default_branch, - stars: githubInfo.parent.stargazers_count, - forks: githubInfo.parent.forks_count, - } - : null, - } - : null, - isForked: Boolean(githubInfo?.parent), - timestamp: new Date().toISOString(), }; - console.log('Final response:', response); - - // Debug log - return json(response); + return json(gitInfo); }; diff --git a/app/routes/api.update.ts b/app/routes/api.update.ts index 9f79d4ae..97d28ce0 100644 --- a/app/routes/api.update.ts +++ b/app/routes/api.update.ts @@ -1,573 +1,21 @@ -import { json } from '@remix-run/node'; -import type { ActionFunction } from '@remix-run/node'; -import { exec } from 'child_process'; -import { promisify } from 'util'; - -const execAsync = promisify(exec); - -interface UpdateRequestBody { - branch: string; - autoUpdate?: boolean; -} - -interface UpdateProgress { - stage: 'fetch' | 'pull' | 'install' | 'build' | 'complete'; - message: string; - progress?: number; - error?: string; - details?: { - changedFiles?: string[]; - additions?: number; - deletions?: number; - commitMessages?: string[]; - totalSize?: string; - currentCommit?: string; - remoteCommit?: string; - updateReady?: boolean; - changelog?: string; - compareUrl?: string; - }; -} +import { json, type ActionFunction } from '@remix-run/cloudflare'; export const action: ActionFunction = async ({ request }) => { if (request.method !== 'POST') { return json({ error: 'Method not allowed' }, { status: 405 }); } - try { - const body = await request.json(); - - if (!body || typeof body !== 'object' || !('branch' in body) || typeof body.branch !== 'string') { - return json({ error: 'Invalid request body: branch is required and must be a string' }, { status: 400 }); - } - - const { branch, autoUpdate = false } = body as UpdateRequestBody; - - // Create a ReadableStream to send progress updates - const stream = new ReadableStream({ - async start(controller) { - const encoder = new TextEncoder(); - const sendProgress = (update: UpdateProgress) => { - controller.enqueue(encoder.encode(JSON.stringify(update) + '\n')); - }; - - try { - // Initial check stage - sendProgress({ - stage: 'fetch', - message: 'Checking repository status...', - progress: 0, - }); - - // Check if remote exists - let defaultBranch = branch || 'main'; // Make branch mutable - - try { - await execAsync('git remote get-url upstream'); - sendProgress({ - stage: 'fetch', - message: 'Repository remote verified', - progress: 10, - }); - } catch { - throw new Error( - 'No upstream repository found. Please set up the upstream repository first by running:\ngit remote add upstream https://github.com/stackblitz-labs/bolt.diy.git', - ); - } - - // Get default branch if not specified - if (!branch) { - sendProgress({ - stage: 'fetch', - message: 'Detecting default branch...', - progress: 20, - }); - - try { - const { stdout } = await execAsync('git remote show upstream | grep "HEAD branch" | cut -d" " -f5'); - defaultBranch = stdout.trim() || 'main'; - sendProgress({ - stage: 'fetch', - message: `Using branch: ${defaultBranch}`, - progress: 30, - }); - } catch { - defaultBranch = 'main'; // Fallback to main if we can't detect - sendProgress({ - stage: 'fetch', - message: 'Using default branch: main', - progress: 30, - }); - } - } - - // Fetch stage - sendProgress({ - stage: 'fetch', - message: 'Fetching latest changes...', - progress: 40, - }); - - // Fetch all remotes - await execAsync('git fetch --all'); - sendProgress({ - stage: 'fetch', - message: 'Remote changes fetched', - progress: 50, - }); - - // Check if remote branch exists - try { - await execAsync(`git rev-parse --verify upstream/${defaultBranch}`); - sendProgress({ - stage: 'fetch', - message: 'Remote branch verified', - progress: 60, - }); - } catch { - throw new Error( - `Remote branch 'upstream/${defaultBranch}' not found. Please ensure the upstream repository is properly configured.`, - ); - } - - // Get current commit hash and remote commit hash - sendProgress({ - stage: 'fetch', - message: 'Comparing versions...', - progress: 70, - }); - - const { stdout: currentCommit } = await execAsync('git rev-parse HEAD'); - const { stdout: remoteCommit } = await execAsync(`git rev-parse upstream/${defaultBranch}`); - - // If we're on the same commit, no update is available - if (currentCommit.trim() === remoteCommit.trim()) { - sendProgress({ - stage: 'complete', - message: 'No updates available. You are on the latest version.', - progress: 100, - details: { - currentCommit: currentCommit.trim().substring(0, 7), - remoteCommit: remoteCommit.trim().substring(0, 7), - }, - }); - return; - } - - sendProgress({ - stage: 'fetch', - message: 'Analyzing changes...', - progress: 80, - }); - - // Initialize variables - let changedFiles: string[] = []; - let commitMessages: string[] = []; - let stats: RegExpMatchArray | null = null; - let totalSizeInBytes = 0; - - // Format size for display - const formatSize = (bytes: number) => { - if (bytes === 0) { - return '0 B'; - } - - const k = 1024; - const sizes = ['B', 'KB', 'MB', 'GB']; - const i = Math.floor(Math.log(bytes) / Math.log(k)); - - return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`; - }; - - // Get list of changed files and their sizes - try { - const { stdout: diffOutput } = await execAsync( - `git diff --name-status ${currentCommit.trim()}..${remoteCommit.trim()}`, - ); - const files = diffOutput.split('\n').filter(Boolean); - - if (files.length === 0) { - sendProgress({ - stage: 'complete', - message: `No file changes detected between your version and upstream/${defaultBranch}. You might be on a different branch.`, - progress: 100, - details: { - currentCommit: currentCommit.trim().substring(0, 7), - remoteCommit: remoteCommit.trim().substring(0, 7), - }, - }); - return; - } - - sendProgress({ - stage: 'fetch', - message: `Found ${files.length} changed files, calculating sizes...`, - progress: 90, - }); - - // Get size information for each changed file - for (const line of files) { - const [status, file] = line.split('\t'); - - if (status !== 'D') { - // Skip deleted files - try { - const { stdout: sizeOutput } = await execAsync(`git cat-file -s ${remoteCommit.trim()}:${file}`); - const size = parseInt(sizeOutput) || 0; - totalSizeInBytes += size; - } catch { - console.debug(`Could not get size for file: ${file}`); - } - } - } - - changedFiles = files.map((line) => { - const [status, file] = line.split('\t'); - return `${status === 'M' ? 'Modified' : status === 'A' ? 'Added' : 'Deleted'}: ${file}`; - }); - } catch (err) { - console.debug('Failed to get changed files:', err); - throw new Error(`Failed to compare changes with upstream/${defaultBranch}. Are you on the correct branch?`); - } - - // Get commit messages between current and remote - try { - const { stdout: logOutput } = await execAsync( - `git log --pretty=format:"%h|%s|%aI" ${currentCommit.trim()}..${remoteCommit.trim()}`, - ); - - // Parse and group commits by type - const commits = logOutput - .split('\n') - .filter(Boolean) - .map((line) => { - const [hash, subject, timestamp] = line.split('|'); - let type = 'other'; - let message = subject; - - if (subject.startsWith('feat:') || subject.startsWith('feature:')) { - type = 'feature'; - message = subject.replace(/^feat(?:ure)?:/, '').trim(); - } else if (subject.startsWith('fix:')) { - type = 'fix'; - message = subject.replace(/^fix:/, '').trim(); - } else if (subject.startsWith('docs:')) { - type = 'docs'; - message = subject.replace(/^docs:/, '').trim(); - } else if (subject.startsWith('style:')) { - type = 'style'; - message = subject.replace(/^style:/, '').trim(); - } else if (subject.startsWith('refactor:')) { - type = 'refactor'; - message = subject.replace(/^refactor:/, '').trim(); - } else if (subject.startsWith('perf:')) { - type = 'perf'; - message = subject.replace(/^perf:/, '').trim(); - } else if (subject.startsWith('test:')) { - type = 'test'; - message = subject.replace(/^test:/, '').trim(); - } else if (subject.startsWith('build:')) { - type = 'build'; - message = subject.replace(/^build:/, '').trim(); - } else if (subject.startsWith('ci:')) { - type = 'ci'; - message = subject.replace(/^ci:/, '').trim(); - } - - return { - hash, - type, - message, - timestamp: new Date(timestamp), - }; - }); - - // Group commits by type - const groupedCommits = commits.reduce( - (acc, commit) => { - if (!acc[commit.type]) { - acc[commit.type] = []; - } - - acc[commit.type].push(commit); - - return acc; - }, - {} as Record, - ); - - // Format commit messages with emojis and timestamps - const formattedMessages = Object.entries(groupedCommits).map(([type, commits]) => { - const emoji = { - feature: '✨', - fix: 'πŸ›', - docs: 'πŸ“š', - style: 'πŸ’Ž', - refactor: '♻️', - perf: '⚑', - test: 'πŸ§ͺ', - build: 'πŸ› οΈ', - ci: 'βš™οΈ', - other: 'πŸ”', - }[type]; - - const title = { - feature: 'Features', - fix: 'Bug Fixes', - docs: 'Documentation', - style: 'Styles', - refactor: 'Code Refactoring', - perf: 'Performance', - test: 'Tests', - build: 'Build', - ci: 'CI', - other: 'Other Changes', - }[type]; - - return `### ${emoji} ${title}\n\n${commits - .map((c) => `* ${c.message} (${c.hash.substring(0, 7)}) - ${c.timestamp.toLocaleString()}`) - .join('\n')}`; - }); - - commitMessages = formattedMessages; - } catch { - // Handle silently - empty commitMessages array will be used - } - - // Get diff stats using the specific commits - try { - const { stdout: diffStats } = await execAsync( - `git diff --shortstat ${currentCommit.trim()}..${remoteCommit.trim()}`, - ); - stats = diffStats.match( - /(\d+) files? changed(?:, (\d+) insertions?\\(\\+\\))?(?:, (\d+) deletions?\\(-\\))?/, - ); - } catch { - // Handle silently - null stats will be used - } - - // If we somehow still have no changes detected - if (!stats && changedFiles.length === 0) { - sendProgress({ - stage: 'complete', - message: `No changes detected between your version and upstream/${defaultBranch}. This might be unexpected - please check your git status.`, - progress: 100, - }); - return; - } - - // Fetch changelog - sendProgress({ - stage: 'fetch', - message: 'Fetching changelog...', - progress: 95, - }); - - const changelog = await fetchChangelog(currentCommit.trim(), remoteCommit.trim()); - - // We have changes, send the details - sendProgress({ - stage: 'fetch', - message: `Changes detected on upstream/${defaultBranch}`, - progress: 100, - details: { - changedFiles, - additions: stats?.[2] ? parseInt(stats[2]) : 0, - deletions: stats?.[3] ? parseInt(stats[3]) : 0, - commitMessages, - totalSize: formatSize(totalSizeInBytes), - currentCommit: currentCommit.trim().substring(0, 7), - remoteCommit: remoteCommit.trim().substring(0, 7), - updateReady: true, - changelog, - compareUrl: `https://github.com/stackblitz-labs/bolt.diy/compare/${currentCommit.trim().substring(0, 7)}...${remoteCommit.trim().substring(0, 7)}`, - }, - }); - - // Only proceed with update if autoUpdate is true - if (!autoUpdate) { - sendProgress({ - stage: 'complete', - message: 'Update is ready to be applied. Click "Update Now" to proceed.', - progress: 100, - details: { - changedFiles, - additions: stats?.[2] ? parseInt(stats[2]) : 0, - deletions: stats?.[3] ? parseInt(stats[3]) : 0, - commitMessages, - totalSize: formatSize(totalSizeInBytes), - currentCommit: currentCommit.trim().substring(0, 7), - remoteCommit: remoteCommit.trim().substring(0, 7), - updateReady: true, - changelog, - compareUrl: `https://github.com/stackblitz-labs/bolt.diy/compare/${currentCommit.trim().substring(0, 7)}...${remoteCommit.trim().substring(0, 7)}`, - }, - }); - return; - } - - // Pull stage - sendProgress({ - stage: 'pull', - message: `Pulling changes from upstream/${defaultBranch}...`, - progress: 0, - }); - - await execAsync(`git pull upstream ${defaultBranch}`); - - sendProgress({ - stage: 'pull', - message: 'Changes pulled successfully', - progress: 100, - }); - - // Install stage - sendProgress({ - stage: 'install', - message: 'Installing dependencies...', - progress: 0, - }); - - await execAsync('pnpm install'); - - sendProgress({ - stage: 'install', - message: 'Dependencies installed successfully', - progress: 100, - }); - - // Build stage - sendProgress({ - stage: 'build', - message: 'Building application...', - progress: 0, - }); - - await execAsync('pnpm build'); - - sendProgress({ - stage: 'build', - message: 'Build completed successfully', - progress: 100, - }); - - // Complete - sendProgress({ - stage: 'complete', - message: 'Update completed successfully! Click Restart to apply changes.', - progress: 100, - }); - } catch (err) { - sendProgress({ - stage: 'complete', - message: 'Update failed', - error: err instanceof Error ? err.message : 'Unknown error occurred', - }); - } finally { - controller.close(); - } - }, - }); - - return new Response(stream, { - headers: { - 'Content-Type': 'text/event-stream', - 'Cache-Control': 'no-cache', - Connection: 'keep-alive', - }, - }); - } catch (err) { - console.error('Update preparation failed:', err); - return json( - { - success: false, - error: err instanceof Error ? err.message : 'Unknown error occurred while preparing update', - }, - { status: 500 }, - ); - } + return json( + { + error: 'Updates must be performed manually in a server environment', + instructions: [ + '1. Navigate to the project directory', + '2. Run: git fetch upstream', + '3. Run: git pull upstream main', + '4. Run: pnpm install', + '5. Run: pnpm run build', + ], + }, + { status: 400 }, + ); }; - -// Add this function to fetch the changelog -async function fetchChangelog(currentCommit: string, remoteCommit: string): Promise { - try { - // First try to get the changelog.md content - const { stdout: changelogContent } = await execAsync('git show upstream/main:changelog.md'); - - // If we have a changelog, return it - if (changelogContent) { - return changelogContent; - } - - // If no changelog.md, generate one in a similar format - let changelog = '# Changes in this Update\n\n'; - - // Get commit messages grouped by type - const { stdout: commitLog } = await execAsync( - `git log --pretty=format:"%h|%s|%b" ${currentCommit.trim()}..${remoteCommit.trim()}`, - ); - - const commits = commitLog.split('\n').filter(Boolean); - const categorizedCommits: Record = { - '✨ Features': [], - 'πŸ› Bug Fixes': [], - 'πŸ“š Documentation': [], - 'πŸ’Ž Styles': [], - '♻️ Code Refactoring': [], - '⚑ Performance': [], - 'πŸ§ͺ Tests': [], - 'πŸ› οΈ Build': [], - 'βš™οΈ CI': [], - 'πŸ” Other Changes': [], - }; - - // Categorize commits - for (const commit of commits) { - const [hash, subject] = commit.split('|'); - let category = 'πŸ” Other Changes'; - - if (subject.startsWith('feat:') || subject.startsWith('feature:')) { - category = '✨ Features'; - } else if (subject.startsWith('fix:')) { - category = 'πŸ› Bug Fixes'; - } else if (subject.startsWith('docs:')) { - category = 'πŸ“š Documentation'; - } else if (subject.startsWith('style:')) { - category = 'πŸ’Ž Styles'; - } else if (subject.startsWith('refactor:')) { - category = '♻️ Code Refactoring'; - } else if (subject.startsWith('perf:')) { - category = '⚑ Performance'; - } else if (subject.startsWith('test:')) { - category = 'πŸ§ͺ Tests'; - } else if (subject.startsWith('build:')) { - category = 'πŸ› οΈ Build'; - } else if (subject.startsWith('ci:')) { - category = 'βš™οΈ CI'; - } - - const message = subject.includes(':') ? subject.split(':')[1].trim() : subject.trim(); - categorizedCommits[category].push(`* ${message} (${hash.substring(0, 7)})`); - } - - // Build changelog content - for (const [category, commits] of Object.entries(categorizedCommits)) { - if (commits.length > 0) { - changelog += `\n## ${category}\n\n${commits.join('\n')}\n`; - } - } - - // Add stats - const { stdout: stats } = await execAsync(`git diff --shortstat ${currentCommit.trim()}..${remoteCommit.trim()}`); - - if (stats) { - changelog += '\n## πŸ“Š Stats\n\n'; - changelog += `${stats.trim()}\n`; - } - - return changelog; - } catch (error) { - console.error('Error fetching changelog:', error); - return 'Unable to fetch changelog'; - } -} diff --git a/package.json b/package.json index e287f0c5..144831fb 100644 --- a/package.json +++ b/package.json @@ -123,6 +123,7 @@ "remark-gfm": "^4.0.0", "remix-island": "^0.2.0", "remix-utils": "^7.7.0", + "rollup-plugin-node-polyfills": "^0.2.1", "shiki": "^1.24.0", "tailwind-merge": "^2.2.1", "unist-util-visit": "^5.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fc491791..bb37289b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -287,6 +287,9 @@ importers: remix-utils: specifier: ^7.7.0 version: 7.7.0(@remix-run/cloudflare@2.15.3(@cloudflare/workers-types@4.20250204.0)(typescript@5.7.3))(@remix-run/node@2.15.3(typescript@5.7.3))(@remix-run/react@2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/router@1.22.0)(react@18.3.1)(zod@3.24.1) + rollup-plugin-node-polyfills: + specifier: ^0.2.1 + version: 0.2.1 shiki: specifier: ^1.24.0 version: 1.29.2 diff --git a/vite.config.ts b/vite.config.ts index 01fb3b2e..a9351c12 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -89,14 +89,55 @@ export default defineConfig((config) => { __PKG_DEV_DEPENDENCIES: JSON.stringify(pkg.devDependencies), __PKG_PEER_DEPENDENCIES: JSON.stringify(pkg.peerDependencies), __PKG_OPTIONAL_DEPENDENCIES: JSON.stringify(pkg.optionalDependencies), + // Define global values + 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV), }, build: { target: 'esnext', + rollupOptions: { + output: { + format: 'esm', + }, + }, + commonjsOptions: { + transformMixedEsModules: true, + }, + }, + optimizeDeps: { + esbuildOptions: { + define: { + global: 'globalThis', + }, + }, + }, + resolve: { + alias: { + buffer: 'vite-plugin-node-polyfills/polyfills/buffer', + }, }, plugins: [ nodePolyfills({ - include: ['path', 'buffer', 'process'], + include: ['buffer', 'process', 'util', 'stream'], + globals: { + Buffer: true, + process: true, + global: true, + }, + protocolImports: true, + // Exclude Node.js modules that shouldn't be polyfilled in Cloudflare + exclude: ['child_process', 'fs', 'path'], }), + { + name: 'buffer-polyfill', + transform(code, id) { + if (id.includes('env.mjs')) { + return { + code: `import { Buffer } from 'buffer';\n${code}`, + map: null, + }; + } + }, + }, config.mode !== 'test' && remixCloudflareDevProxy(), remixVitePlugin({ future: { From fc779b5b1f49181d9a5f63130dd7815002692cef Mon Sep 17 00:00:00 2001 From: Leex Date: Sat, 8 Mar 2025 23:08:40 +0100 Subject: [PATCH 021/115] update: docs README.md - changed git clone for pulling stable branch, not main anymore - Removed some not needed stuff --- README.md | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 3071fcee..f92a21ff 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# bolt.diy (Previously oTToDev) +# bolt.diy [![bolt.diy: AI-Powered Full-Stack Web Development in the Browser](./public/social_preview_index.jpg)](https://bolt.diy) -Welcome to bolt.diy, the official open source version of Bolt.new (previously known as oTToDev and bolt.new ANY LLM), which allows you to choose the LLM that you use for each prompt! Currently, you can use OpenAI, Anthropic, Ollama, OpenRouter, Gemini, LMStudio, Mistral, xAI, HuggingFace, DeepSeek, or Groq models - and it is easily extended to use any other model supported by the Vercel AI SDK! See the instructions below for running this locally and extending it to include more models. +Welcome to bolt.diy, the official open source version of Bolt.new, which allows you to choose the LLM that you use for each prompt! Currently, you can use OpenAI, Anthropic, Ollama, OpenRouter, Gemini, LMStudio, Mistral, xAI, HuggingFace, DeepSeek, or Groq models - and it is easily extended to use any other model supported by the Vercel AI SDK! See the instructions below for running this locally and extending it to include more models. ----- Check the [bolt.diy Docs](https://stackblitz-labs.github.io/bolt.diy/) for more offical installation instructions and more informations. @@ -83,7 +83,8 @@ project, please check the [project management guide](./PROJECT.md) to get starte - ⬜ **HIGH PRIORITY** - Prevent bolt from rewriting files as often (file locking and diffs) - ⬜ **HIGH PRIORITY** - Better prompting for smaller LLMs (code window sometimes doesn't start) - ⬜ **HIGH PRIORITY** - Run agents in the backend as opposed to a single model call -- ⬜ Deploy directly to Vercel/Netlify/other similar platforms +- βœ… Deploy directly to Netlify (@xKevIsDev) +- ⬜ Supabase Integration - ⬜ Have LLM plan the project in a MD file for better results/transparency - ⬜ VSCode Integration with git-like confirmations - ⬜ Upload documents for knowledge - UI design templates, a code base to reference coding style, etc. @@ -101,8 +102,9 @@ project, please check the [project management guide](./PROJECT.md) to get starte - **Attach images to prompts** for better contextual understanding. - **Integrated terminal** to view output of LLM-run commands. - **Revert code to earlier versions** for easier debugging and quicker changes. -- **Download projects as ZIP** for easy portability. +- **Download projects as ZIP** for easy portabilitr Sync to a folder on the host. - **Integration-ready Docker support** for a hassle-free setup. +- **Deploy** directly to **Netlify** ## Setup @@ -241,8 +243,7 @@ This method is recommended for developers who want to: 1. **Clone the Repository**: ```bash - # Using HTTPS - git clone https://github.com/stackblitz-labs/bolt.diy.git + git clone -b stable https://github.com/stackblitz-labs/bolt.diy.git ``` 2. **Navigate to Project Directory**: @@ -251,21 +252,25 @@ This method is recommended for developers who want to: cd bolt.diy ``` -3. **Switch to the Main Branch**: - ```bash - git checkout main - ``` -4. **Install Dependencies**: +3. **Install Dependencies**: ```bash pnpm install ``` -5. **Start the Development Server**: +4. **Start the Development Server**: ```bash pnpm run dev ``` +5. **(OPTIONAL)** Switch to the Main Branch if you want to use pre-release/testbranch): + ```bash + git checkout main + ``` + Hint: Be aware that this can have beta-features and more likely got bugs than the stable release + + + #### Staying Updated To get the latest changes from the repository: @@ -279,7 +284,7 @@ To get the latest changes from the repository: 2. **Pull Latest Updates**: ```bash - git pull origin main + git pull ``` 3. **Update Dependencies**: From a696d5f254acc7e9ac0ad4c5e17021c2780e1074 Mon Sep 17 00:00:00 2001 From: Leex Date: Sun, 9 Mar 2025 23:44:23 +0100 Subject: [PATCH 022/115] Update README.md --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f92a21ff..f38e23c0 100644 --- a/README.md +++ b/README.md @@ -263,13 +263,19 @@ This method is recommended for developers who want to: pnpm run dev ``` -5. **(OPTIONAL)** Switch to the Main Branch if you want to use pre-release/testbranch): +5. **(OPTIONAL)** Switch to the Main Branch if you want to use pre-release/testbranch: ```bash git checkout main + pnpm install + pnpm run dev ``` Hint: Be aware that this can have beta-features and more likely got bugs than the stable release - +>**Open the WebUI to test (Default: http://localhost:5173)** +> - Beginngers: +> - Try to use a sophisticated Provider/Model like Anthropic with Claude Sonnet 3.x Models to get best results +> - Explanation: The System Prompt currently implemented in bolt.diy cant cover the best performance for all providers and models out there. So it works better with some models, then other, even if the models itself are perfect for >programming +> - Future: Planned is a Plugin/Extentions-Library so there can be different System Prompts for different Models, which will help to get better results #### Staying Updated From 27fbfb76c4b95d55d837e78d399ea20de11e86dc Mon Sep 17 00:00:00 2001 From: Leex Date: Mon, 10 Mar 2025 00:05:36 +0100 Subject: [PATCH 023/115] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f38e23c0..c14974b2 100644 --- a/README.md +++ b/README.md @@ -102,7 +102,7 @@ project, please check the [project management guide](./PROJECT.md) to get starte - **Attach images to prompts** for better contextual understanding. - **Integrated terminal** to view output of LLM-run commands. - **Revert code to earlier versions** for easier debugging and quicker changes. -- **Download projects as ZIP** for easy portabilitr Sync to a folder on the host. +- **Download projects as ZIP** for easy portability Sync to a folder on the host. - **Integration-ready Docker support** for a hassle-free setup. - **Deploy** directly to **Netlify** From f02e10c9ace54c912eb4f5405ef1e02b8fa06f83 Mon Sep 17 00:00:00 2001 From: KevIsDev Date: Mon, 10 Mar 2025 11:12:25 +0000 Subject: [PATCH 024/115] fix: remove rename, creations and deletions now persist across reloads removed rename files until a better solution is found and made file/folder create/delete be persistent across reloads --- app/components/workbench/FileTree.tsx | 129 +++++------- app/lib/stores/files.ts | 293 +++++++++++++++++++++++++- app/lib/stores/workbench.ts | 282 ++++++++++++------------- 3 files changed, 474 insertions(+), 230 deletions(-) diff --git a/app/components/workbench/FileTree.tsx b/app/components/workbench/FileTree.tsx index d1087361..cb12dd99 100644 --- a/app/components/workbench/FileTree.tsx +++ b/app/components/workbench/FileTree.tsx @@ -286,11 +286,23 @@ function FileContextMenu({ }: FolderContextMenuProps & { fullPath: string }) { const [isCreatingFile, setIsCreatingFile] = useState(false); const [isCreatingFolder, setIsCreatingFolder] = useState(false); - const [isRenaming, setIsRenaming] = useState(false); const [isDragging, setIsDragging] = useState(false); const depth = useMemo(() => fullPath.split('/').length, [fullPath]); const fileName = useMemo(() => path.basename(fullPath), [fullPath]); + // Add this to determine if the path is a file or folder + const isFolder = useMemo(() => { + const files = workbenchStore.files.get(); + const fileEntry = files[fullPath]; + + return !fileEntry || fileEntry.type === 'folder'; + }, [fullPath]); + + // Get the parent directory for files + const targetPath = useMemo(() => { + return isFolder ? fullPath : path.dirname(fullPath); + }, [fullPath, isFolder]); + const handleDragOver = useCallback((e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); @@ -309,20 +321,25 @@ function FileContextMenu({ e.stopPropagation(); const items = Array.from(e.dataTransfer.items); - const imageFiles = items.filter((item) => item.type.startsWith('image/')); + const files = items.filter((item) => item.kind === 'file'); - for (const item of imageFiles) { + for (const item of files) { const file = item.getAsFile(); if (file) { try { const filePath = path.join(fullPath, file.name); - const success = await workbenchStore.createNewFile(filePath, file); + + // Convert file to binary data (Uint8Array) + const arrayBuffer = await file.arrayBuffer(); + const binaryContent = new Uint8Array(arrayBuffer); + + const success = await workbenchStore.createFile(filePath, binaryContent); if (success) { - toast.success(`Image ${file.name} uploaded successfully`); + toast.success(`File ${file.name} uploaded successfully`); } else { - toast.error(`Failed to upload image ${file.name}`); + toast.error(`Failed to upload file ${file.name}`); } } catch (error) { toast.error(`Error uploading ${file.name}`); @@ -337,8 +354,11 @@ function FileContextMenu({ ); const handleCreateFile = async (fileName: string) => { - const newFilePath = path.join(fullPath, fileName); - const success = await workbenchStore.createNewFile(newFilePath); + // Use targetPath instead of fullPath + const newFilePath = path.join(targetPath, fileName); + + // Change from createNewFile to createFile + const success = await workbenchStore.createFile(newFilePath, ''); if (success) { toast.success('File created successfully'); @@ -350,8 +370,11 @@ function FileContextMenu({ }; const handleCreateFolder = async (folderName: string) => { - const newFolderPath = path.join(fullPath, folderName); - const success = await workbenchStore.createNewFolder(newFolderPath); + // Use targetPath instead of fullPath + const newFolderPath = path.join(targetPath, folderName); + + // Change from createNewFolder to createFolder + const success = await workbenchStore.createFolder(newFolderPath); if (success) { toast.success('Folder created successfully'); @@ -362,57 +385,31 @@ function FileContextMenu({ setIsCreatingFolder(false); }; + // Add delete handler function const handleDelete = async () => { try { - if (confirm(`Are you sure you want to delete ${fileName}?`)) { - const isDirectory = path.extname(fullPath) === ''; - - const success = isDirectory - ? await workbenchStore.deleteFolder(fullPath) - : await workbenchStore.deleteFile(fullPath); - - if (success) { - toast.success('Deleted successfully'); - } else { - toast.error('Failed to delete'); - } + // Confirm deletion with the user + if (!confirm(`Are you sure you want to delete ${isFolder ? 'folder' : 'file'}: ${fileName}?`)) { + return; } - } catch (error) { - toast.error('Error during delete operation'); - logger.error(error); - } - }; - const handleRename = async (newName: string) => { - if (newName === fileName) { - setIsRenaming(false); - return; - } + let success; - const parentDir = path.dirname(fullPath); - const newPath = path.join(parentDir, newName); - - try { - const files = workbenchStore.files.get(); - const fileEntry = files[fullPath]; - - const isDirectory = !fileEntry || fileEntry.type === 'folder'; - - const success = isDirectory - ? await workbenchStore.renameFolder(fullPath, newPath) - : await workbenchStore.renameFile(fullPath, newPath); + if (isFolder) { + success = await workbenchStore.deleteFolder(fullPath); + } else { + success = await workbenchStore.deleteFile(fullPath); + } if (success) { - toast.success('Renamed successfully'); + toast.success(`${isFolder ? 'Folder' : 'File'} deleted successfully`); } else { - toast.error('Failed to rename'); + toast.error(`Failed to delete ${isFolder ? 'folder' : 'file'}`); } } catch (error) { - toast.error('Error during rename operation'); + toast.error(`Error deleting ${isFolder ? 'folder' : 'file'}`); logger.error(error); } - - setIsRenaming(false); }; return ( @@ -428,17 +425,7 @@ function FileContextMenu({ isDragging, })} > - {!isRenaming && children} - - {isRenaming && ( - setIsRenaming(false)} - /> - )} + {children}
@@ -459,23 +446,20 @@ function FileContextMenu({ New Folder
- setIsRenaming(true)}> -
-
- Rename -
- - -
-
- Delete -
- Copy path Copy relative path + {/* Add delete option in a new group */} + + +
+
+ Delete {isFolder ? 'Folder' : 'File'} +
+ + @@ -495,7 +479,6 @@ function FileContextMenu({ onCancel={() => setIsCreatingFolder(false)} /> )} - {/* Remove the isRenaming InlineInput from here since we moved it above */} ); } diff --git a/app/lib/stores/files.ts b/app/lib/stores/files.ts index 60904a65..8227f94f 100644 --- a/app/lib/stores/files.ts +++ b/app/lib/stores/files.ts @@ -42,6 +42,11 @@ export class FilesStore { */ #modifiedFiles: Map = import.meta.hot?.data.modifiedFiles ?? new Map(); + /** + * Keeps track of deleted files and folders to prevent them from reappearing on reload + */ + #deletedPaths: Set = import.meta.hot?.data.deletedPaths ?? new Set(); + /** * Map of files that matches the state of WebContainer. */ @@ -54,9 +59,28 @@ export class FilesStore { constructor(webcontainerPromise: Promise) { this.#webcontainer = webcontainerPromise; + // Load deleted paths from localStorage if available + try { + if (typeof localStorage !== 'undefined') { + const deletedPathsJson = localStorage.getItem('bolt-deleted-paths'); + + if (deletedPathsJson) { + const deletedPaths = JSON.parse(deletedPathsJson); + + if (Array.isArray(deletedPaths)) { + deletedPaths.forEach((path) => this.#deletedPaths.add(path)); + } + } + } + } catch (error) { + logger.error('Failed to load deleted paths from localStorage', error); + } + if (import.meta.hot) { + // Persist our state across hot reloads import.meta.hot.data.files = this.files; import.meta.hot.data.modifiedFiles = this.#modifiedFiles; + import.meta.hot.data.deletedPaths = this.#deletedPaths; } this.#init(); @@ -139,18 +163,81 @@ export class FilesStore { async #init() { const webcontainer = await this.#webcontainer; + // Clean up any files that were previously deleted + this.#cleanupDeletedFiles(); + webcontainer.internal.watchPaths( { include: [`${WORK_DIR}/**`], exclude: ['**/node_modules', '.git'], includeContent: true }, bufferWatchEvents(100, this.#processEventBuffer.bind(this)), ); } + /** + * Removes any deleted files/folders from the store + */ + #cleanupDeletedFiles() { + if (this.#deletedPaths.size === 0) { + return; + } + + const currentFiles = this.files.get(); + + // Process each deleted path + for (const deletedPath of this.#deletedPaths) { + // Remove the path itself + if (currentFiles[deletedPath]) { + this.files.setKey(deletedPath, undefined); + + // Adjust file count if it was a file + if (currentFiles[deletedPath]?.type === 'file') { + this.#size--; + } + } + + // Also remove any files/folders inside deleted folders + for (const [path, dirent] of Object.entries(currentFiles)) { + if (path.startsWith(deletedPath + '/')) { + this.files.setKey(path, undefined); + + // Adjust file count if it was a file + if (dirent?.type === 'file') { + this.#size--; + } + + // Remove from modified files tracking if present + if (dirent?.type === 'file' && this.#modifiedFiles.has(path)) { + this.#modifiedFiles.delete(path); + } + } + } + } + } + #processEventBuffer(events: Array<[events: PathWatcherEvent[]]>) { const watchEvents = events.flat(2); - for (const { type, path, buffer } of watchEvents) { + for (const { type, path: eventPath, buffer } of watchEvents) { // remove any trailing slashes - const sanitizedPath = path.replace(/\/+$/g, ''); + const sanitizedPath = eventPath.replace(/\/+$/g, ''); + + // Skip processing if this file/folder was explicitly deleted + if (this.#deletedPaths.has(sanitizedPath)) { + continue; + } + + // Also skip if this is a file/folder inside a deleted folder + let isInDeletedFolder = false; + + for (const deletedPath of this.#deletedPaths) { + if (sanitizedPath.startsWith(deletedPath + '/')) { + isInDeletedFolder = true; + break; + } + } + + if (isInDeletedFolder) { + continue; + } switch (type) { case 'add_dir': { @@ -176,21 +263,32 @@ export class FilesStore { } let content = ''; - - /** - * @note This check is purely for the editor. The way we detect this is not - * bullet-proof and it's a best guess so there might be false-positives. - * The reason we do this is because we don't want to display binary files - * in the editor nor allow to edit them. - */ const isBinary = isBinaryFile(buffer); - if (!isBinary) { + if (isBinary && buffer) { + // For binary files, we need to preserve the content as base64 + content = Buffer.from(buffer).toString('base64'); + } else if (!isBinary) { content = this.#decodeFileContent(buffer); + + /* + * If the content is a single space and this is from our empty file workaround, + * convert it back to an actual empty string + */ + if (content === ' ' && type === 'add_file') { + content = ''; + } + } + + // Check if we already have this file with content + const existingFile = this.files.get()[sanitizedPath]; + + if (existingFile?.type === 'file' && existingFile.isBinary && existingFile.content && !content) { + // Keep existing binary content if new content is empty + content = existingFile.content; } this.files.setKey(sanitizedPath, { type: 'file', content, isBinary }); - break; } case 'remove_file': { @@ -218,6 +316,179 @@ export class FilesStore { return ''; } } + + async createFile(filePath: string, content: string | Uint8Array = '') { + const webcontainer = await this.#webcontainer; + + try { + const relativePath = path.relative(webcontainer.workdir, filePath); + + if (!relativePath) { + throw new Error(`EINVAL: invalid file path, create '${relativePath}'`); + } + + // Create parent directories if they don't exist + const dirPath = path.dirname(relativePath); + + if (dirPath !== '.') { + await webcontainer.fs.mkdir(dirPath, { recursive: true }); + } + + // Detect binary content + const isBinary = content instanceof Uint8Array; + + if (isBinary) { + await webcontainer.fs.writeFile(relativePath, Buffer.from(content)); + + // Store Base64 encoded data instead of an empty string + const base64Content = Buffer.from(content).toString('base64'); + this.files.setKey(filePath, { type: 'file', content: base64Content, isBinary: true }); + + // Store the base64 content as the original content for tracking modifications + this.#modifiedFiles.set(filePath, base64Content); + } else { + // Ensure we write at least a space character for empty files to ensure they're tracked + const contentToWrite = (content as string).length === 0 ? ' ' : content; + await webcontainer.fs.writeFile(relativePath, contentToWrite); + + // But store the actual empty string in our file map if that's what was requested + this.files.setKey(filePath, { type: 'file', content: content as string, isBinary: false }); + + // Store the text content as the original content + this.#modifiedFiles.set(filePath, content as string); + } + + logger.info(`File created: ${filePath}`); + + return true; + } catch (error) { + logger.error('Failed to create file\n\n', error); + throw error; + } + } + + async createFolder(folderPath: string) { + const webcontainer = await this.#webcontainer; + + try { + const relativePath = path.relative(webcontainer.workdir, folderPath); + + if (!relativePath) { + throw new Error(`EINVAL: invalid folder path, create '${relativePath}'`); + } + + await webcontainer.fs.mkdir(relativePath, { recursive: true }); + + // Immediately update the folder in our store without waiting for the watcher + this.files.setKey(folderPath, { type: 'folder' }); + + logger.info(`Folder created: ${folderPath}`); + + return true; + } catch (error) { + logger.error('Failed to create folder\n\n', error); + throw error; + } + } + + async deleteFile(filePath: string) { + const webcontainer = await this.#webcontainer; + + try { + const relativePath = path.relative(webcontainer.workdir, filePath); + + if (!relativePath) { + throw new Error(`EINVAL: invalid file path, delete '${relativePath}'`); + } + + await webcontainer.fs.rm(relativePath); + + // Add to deleted paths set + this.#deletedPaths.add(filePath); + + // Immediately update our store without waiting for the watcher + this.files.setKey(filePath, undefined); + this.#size--; + + // Remove from modified files tracking if present + if (this.#modifiedFiles.has(filePath)) { + this.#modifiedFiles.delete(filePath); + } + + // Persist the deleted paths to localStorage for extra durability + this.#persistDeletedPaths(); + + logger.info(`File deleted: ${filePath}`); + + return true; + } catch (error) { + logger.error('Failed to delete file\n\n', error); + throw error; + } + } + + async deleteFolder(folderPath: string) { + const webcontainer = await this.#webcontainer; + + try { + const relativePath = path.relative(webcontainer.workdir, folderPath); + + if (!relativePath) { + throw new Error(`EINVAL: invalid folder path, delete '${relativePath}'`); + } + + await webcontainer.fs.rm(relativePath, { recursive: true }); + + // Add to deleted paths set + this.#deletedPaths.add(folderPath); + + // Immediately update our store without waiting for the watcher + this.files.setKey(folderPath, undefined); + + // Also remove all files and subfolders from our store + const allFiles = this.files.get(); + + for (const [path, dirent] of Object.entries(allFiles)) { + if (path.startsWith(folderPath + '/')) { + this.files.setKey(path, undefined); + + // Also add these paths to the deleted paths set + this.#deletedPaths.add(path); + + // Decrement file count for each file (not folder) removed + if (dirent?.type === 'file') { + this.#size--; + } + + // Remove from modified files tracking if present + if (dirent?.type === 'file' && this.#modifiedFiles.has(path)) { + this.#modifiedFiles.delete(path); + } + } + } + + // Persist the deleted paths to localStorage for extra durability + this.#persistDeletedPaths(); + + logger.info(`Folder deleted: ${folderPath}`); + + return true; + } catch (error) { + logger.error('Failed to delete folder\n\n', error); + throw error; + } + } + + // Add a method to persist deleted paths to localStorage + #persistDeletedPaths() { + try { + if (typeof localStorage !== 'undefined') { + localStorage.setItem('bolt-deleted-paths', JSON.stringify([...this.#deletedPaths])); + } + } catch (error) { + logger.error('Failed to persist deleted paths to localStorage', error); + } + } } function isBinaryFile(buffer: Uint8Array | undefined) { diff --git a/app/lib/stores/workbench.ts b/app/lib/stores/workbench.ts index 2d5bbc08..37a7a59d 100644 --- a/app/lib/stores/workbench.ts +++ b/app/lib/stores/workbench.ts @@ -60,6 +60,16 @@ export class WorkbenchStore { import.meta.hot.data.showWorkbench = this.showWorkbench; import.meta.hot.data.currentView = this.currentView; import.meta.hot.data.actionAlert = this.actionAlert; + + // Ensure binary files are properly preserved across hot reloads + const filesMap = this.files.get(); + + for (const [path, dirent] of Object.entries(filesMap)) { + if (dirent?.type === 'file' && dirent.isBinary && dirent.content) { + // Make sure binary content is preserved + this.files.setKey(path, { ...dirent }); + } + } } } @@ -238,6 +248,7 @@ export class WorkbenchStore { getFileModifcations() { return this.#filesStore.getFileModifications(); } + getModifiedFiles() { return this.#filesStore.getModifiedFiles(); } @@ -246,6 +257,131 @@ export class WorkbenchStore { this.#filesStore.resetFileModifications(); } + async createFile(filePath: string, content: string | Uint8Array = '') { + try { + const success = await this.#filesStore.createFile(filePath, content); + + if (success) { + // If the file is created successfully, select it in the editor + this.setSelectedFile(filePath); + + /* + * For empty files, we need to ensure they're not marked as unsaved + * Only check for empty string, not empty Uint8Array + */ + if (typeof content === 'string' && content === '') { + const newUnsavedFiles = new Set(this.unsavedFiles.get()); + newUnsavedFiles.delete(filePath); + this.unsavedFiles.set(newUnsavedFiles); + } + } + + return success; + } catch (error) { + console.error('Failed to create file:', error); + throw error; + } + } + + async createFolder(folderPath: string) { + try { + return await this.#filesStore.createFolder(folderPath); + } catch (error) { + console.error('Failed to create folder:', error); + throw error; + } + } + + async deleteFile(filePath: string) { + try { + // Check if the file is currently open in the editor + const currentDocument = this.currentDocument.get(); + const isCurrentFile = currentDocument?.filePath === filePath; + + // Delete the file + const success = await this.#filesStore.deleteFile(filePath); + + if (success) { + // Remove from unsaved files if present + const newUnsavedFiles = new Set(this.unsavedFiles.get()); + + if (newUnsavedFiles.has(filePath)) { + newUnsavedFiles.delete(filePath); + this.unsavedFiles.set(newUnsavedFiles); + } + + // If this was the current file, select another file + if (isCurrentFile) { + // Find another file to select + const files = this.files.get(); + let nextFile: string | undefined = undefined; + + for (const [path, dirent] of Object.entries(files)) { + if (dirent?.type === 'file') { + nextFile = path; + break; + } + } + + this.setSelectedFile(nextFile); + } + } + + return success; + } catch (error) { + console.error('Failed to delete file:', error); + throw error; + } + } + + async deleteFolder(folderPath: string) { + try { + // Check if any file in this folder is currently open + const currentDocument = this.currentDocument.get(); + const isInCurrentFolder = currentDocument?.filePath?.startsWith(folderPath + '/'); + + // Delete the folder + const success = await this.#filesStore.deleteFolder(folderPath); + + if (success) { + // Remove any files in this folder from unsaved files + const unsavedFiles = this.unsavedFiles.get(); + const newUnsavedFiles = new Set(); + + for (const file of unsavedFiles) { + if (!file.startsWith(folderPath + '/')) { + newUnsavedFiles.add(file); + } + } + + if (newUnsavedFiles.size !== unsavedFiles.size) { + this.unsavedFiles.set(newUnsavedFiles); + } + + // If current file was in this folder, select another file + if (isInCurrentFolder) { + // Find another file to select + const files = this.files.get(); + let nextFile: string | undefined = undefined; + + for (const [path, dirent] of Object.entries(files)) { + if (dirent?.type === 'file') { + nextFile = path; + break; + } + } + + this.setSelectedFile(nextFile); + } + } + + return success; + } catch (error) { + console.error('Failed to delete folder:', error); + throw error; + } + } + abortAllActions() { // TODO: what do we wanna do and how do we wanna recover from this? } @@ -547,152 +683,6 @@ export class WorkbenchStore { throw error; // Rethrow the error for further handling } } - - async createNewFile(filePath: string, content: string | File | ArrayBuffer = '') { - try { - const wc = await webcontainer; - const relativePath = extractRelativePath(filePath); - - const dirPath = path.dirname(relativePath); - - if (dirPath !== '.') { - await wc.fs.mkdir(dirPath, { recursive: true }); - } - - let fileContent: string | Uint8Array; - - if (content instanceof File) { - const buffer = await content.arrayBuffer(); - fileContent = new Uint8Array(buffer); - } else if (content instanceof ArrayBuffer) { - fileContent = new Uint8Array(content); - } else { - fileContent = content || ''; - } - - await wc.fs.writeFile(relativePath, fileContent); - - const fullPath = path.join(wc.workdir, relativePath); - this.setSelectedFile(fullPath); - - return true; - } catch (error) { - console.error('Error creating file:', error); - return false; - } - } - - async createNewFolder(folderPath: string) { - try { - const wc = await webcontainer; - const relativePath = extractRelativePath(folderPath); - - await wc.fs.mkdir(relativePath, { recursive: true }); - - return true; - } catch (error) { - console.error('Error creating folder:', error); - return false; - } - } - - async deleteFile(filePath: string) { - try { - const wc = await webcontainer; - const relativePath = extractRelativePath(filePath); - - await wc.fs.rm(relativePath); - - // If the deleted file was selected, clear the selection - if (this.selectedFile.get() === filePath) { - this.setSelectedFile(undefined); - } - - return true; - } catch (error) { - console.error('Error deleting file:', error); - return false; - } - } - - async deleteFolder(folderPath: string) { - try { - const wc = await webcontainer; - const relativePath = extractRelativePath(folderPath); - - await wc.fs.rm(relativePath, { recursive: true }); - - const selectedFile = this.selectedFile.get(); - - if (selectedFile && selectedFile.startsWith(folderPath)) { - this.setSelectedFile(undefined); - } - - return true; - } catch (error) { - console.error('Error deleting folder:', error); - return false; - } - } - - async renameFile(oldPath: string, newPath: string) { - try { - const wc = await webcontainer; - const oldRelativePath = extractRelativePath(oldPath); - const newRelativePath = extractRelativePath(newPath); - - const fileContent = await wc.fs.readFile(oldRelativePath, 'utf-8'); - - await this.createNewFile(newPath, fileContent); - - await this.deleteFile(oldPath); - - if (this.selectedFile.get() === oldPath) { - const fullNewPath = path.join(wc.workdir, newRelativePath); - this.setSelectedFile(fullNewPath); - } - - return true; - } catch (error) { - console.error('Error renaming file:', error); - return false; - } - } - - async renameFolder(oldPath: string, newPath: string) { - try { - await this.createNewFolder(newPath); - - const files = this.files.get(); - const filesToMove = Object.entries(files) - .filter(([filePath]) => filePath.startsWith(oldPath)) - .map(([filePath, dirent]) => ({ path: filePath, dirent })); - - for (const { path: filePath, dirent } of filesToMove) { - if (dirent?.type === 'file') { - const relativePath = filePath.substring(oldPath.length); - const newFilePath = path.join(newPath, relativePath); - - await this.createNewFile(newFilePath, dirent.content); - } - } - - await this.deleteFolder(oldPath); - - const selectedFile = this.selectedFile.get(); - - if (selectedFile && selectedFile.startsWith(oldPath)) { - const relativePath = selectedFile.substring(oldPath.length); - const newSelectedPath = path.join(newPath, relativePath); - this.setSelectedFile(newSelectedPath); - } - - return true; - } catch (error) { - console.error('Error renaming folder:', error); - return false; - } - } } export const workbenchStore = new WorkbenchStore(); From 4665fa67fa71af233b169e1b50f5c2896e7d24f1 Mon Sep 17 00:00:00 2001 From: KevIsDev Date: Mon, 10 Mar 2025 11:20:01 +0000 Subject: [PATCH 025/115] fix: remove excessive commenting --- app/components/workbench/FileTree.tsx | 10 --------- app/lib/stores/files.ts | 30 +-------------------------- app/lib/stores/workbench.ts | 11 ---------- 3 files changed, 1 insertion(+), 50 deletions(-) diff --git a/app/components/workbench/FileTree.tsx b/app/components/workbench/FileTree.tsx index cb12dd99..197fa4f7 100644 --- a/app/components/workbench/FileTree.tsx +++ b/app/components/workbench/FileTree.tsx @@ -290,7 +290,6 @@ function FileContextMenu({ const depth = useMemo(() => fullPath.split('/').length, [fullPath]); const fileName = useMemo(() => path.basename(fullPath), [fullPath]); - // Add this to determine if the path is a file or folder const isFolder = useMemo(() => { const files = workbenchStore.files.get(); const fileEntry = files[fullPath]; @@ -298,7 +297,6 @@ function FileContextMenu({ return !fileEntry || fileEntry.type === 'folder'; }, [fullPath]); - // Get the parent directory for files const targetPath = useMemo(() => { return isFolder ? fullPath : path.dirname(fullPath); }, [fullPath, isFolder]); @@ -354,10 +352,7 @@ function FileContextMenu({ ); const handleCreateFile = async (fileName: string) => { - // Use targetPath instead of fullPath const newFilePath = path.join(targetPath, fileName); - - // Change from createNewFile to createFile const success = await workbenchStore.createFile(newFilePath, ''); if (success) { @@ -370,10 +365,7 @@ function FileContextMenu({ }; const handleCreateFolder = async (folderName: string) => { - // Use targetPath instead of fullPath const newFolderPath = path.join(targetPath, folderName); - - // Change from createNewFolder to createFolder const success = await workbenchStore.createFolder(newFolderPath); if (success) { @@ -385,10 +377,8 @@ function FileContextMenu({ setIsCreatingFolder(false); }; - // Add delete handler function const handleDelete = async () => { try { - // Confirm deletion with the user if (!confirm(`Are you sure you want to delete ${isFolder ? 'folder' : 'file'}: ${fileName}?`)) { return; } diff --git a/app/lib/stores/files.ts b/app/lib/stores/files.ts index 8227f94f..2ec73a03 100644 --- a/app/lib/stores/files.ts +++ b/app/lib/stores/files.ts @@ -182,29 +182,23 @@ export class FilesStore { const currentFiles = this.files.get(); - // Process each deleted path for (const deletedPath of this.#deletedPaths) { - // Remove the path itself if (currentFiles[deletedPath]) { this.files.setKey(deletedPath, undefined); - // Adjust file count if it was a file if (currentFiles[deletedPath]?.type === 'file') { this.#size--; } } - // Also remove any files/folders inside deleted folders for (const [path, dirent] of Object.entries(currentFiles)) { if (path.startsWith(deletedPath + '/')) { this.files.setKey(path, undefined); - // Adjust file count if it was a file if (dirent?.type === 'file') { this.#size--; } - // Remove from modified files tracking if present if (dirent?.type === 'file' && this.#modifiedFiles.has(path)) { this.#modifiedFiles.delete(path); } @@ -225,7 +219,6 @@ export class FilesStore { continue; } - // Also skip if this is a file/folder inside a deleted folder let isInDeletedFolder = false; for (const deletedPath of this.#deletedPaths) { @@ -280,11 +273,9 @@ export class FilesStore { } } - // Check if we already have this file with content const existingFile = this.files.get()[sanitizedPath]; if (existingFile?.type === 'file' && existingFile.isBinary && existingFile.content && !content) { - // Keep existing binary content if new content is empty content = existingFile.content; } @@ -327,34 +318,27 @@ export class FilesStore { throw new Error(`EINVAL: invalid file path, create '${relativePath}'`); } - // Create parent directories if they don't exist const dirPath = path.dirname(relativePath); if (dirPath !== '.') { await webcontainer.fs.mkdir(dirPath, { recursive: true }); } - // Detect binary content const isBinary = content instanceof Uint8Array; if (isBinary) { await webcontainer.fs.writeFile(relativePath, Buffer.from(content)); - // Store Base64 encoded data instead of an empty string const base64Content = Buffer.from(content).toString('base64'); this.files.setKey(filePath, { type: 'file', content: base64Content, isBinary: true }); - // Store the base64 content as the original content for tracking modifications this.#modifiedFiles.set(filePath, base64Content); } else { - // Ensure we write at least a space character for empty files to ensure they're tracked const contentToWrite = (content as string).length === 0 ? ' ' : content; await webcontainer.fs.writeFile(relativePath, contentToWrite); - // But store the actual empty string in our file map if that's what was requested this.files.setKey(filePath, { type: 'file', content: content as string, isBinary: false }); - // Store the text content as the original content this.#modifiedFiles.set(filePath, content as string); } @@ -379,7 +363,6 @@ export class FilesStore { await webcontainer.fs.mkdir(relativePath, { recursive: true }); - // Immediately update the folder in our store without waiting for the watcher this.files.setKey(folderPath, { type: 'folder' }); logger.info(`Folder created: ${folderPath}`); @@ -403,19 +386,15 @@ export class FilesStore { await webcontainer.fs.rm(relativePath); - // Add to deleted paths set this.#deletedPaths.add(filePath); - // Immediately update our store without waiting for the watcher this.files.setKey(filePath, undefined); this.#size--; - // Remove from modified files tracking if present if (this.#modifiedFiles.has(filePath)) { this.#modifiedFiles.delete(filePath); } - // Persist the deleted paths to localStorage for extra durability this.#persistDeletedPaths(); logger.info(`File deleted: ${filePath}`); @@ -439,35 +418,28 @@ export class FilesStore { await webcontainer.fs.rm(relativePath, { recursive: true }); - // Add to deleted paths set this.#deletedPaths.add(folderPath); - // Immediately update our store without waiting for the watcher this.files.setKey(folderPath, undefined); - // Also remove all files and subfolders from our store const allFiles = this.files.get(); for (const [path, dirent] of Object.entries(allFiles)) { if (path.startsWith(folderPath + '/')) { this.files.setKey(path, undefined); - // Also add these paths to the deleted paths set this.#deletedPaths.add(path); - // Decrement file count for each file (not folder) removed if (dirent?.type === 'file') { this.#size--; } - // Remove from modified files tracking if present if (dirent?.type === 'file' && this.#modifiedFiles.has(path)) { this.#modifiedFiles.delete(path); } } } - // Persist the deleted paths to localStorage for extra durability this.#persistDeletedPaths(); logger.info(`Folder deleted: ${folderPath}`); @@ -479,7 +451,7 @@ export class FilesStore { } } - // Add a method to persist deleted paths to localStorage + // method to persist deleted paths to localStorage #persistDeletedPaths() { try { if (typeof localStorage !== 'undefined') { diff --git a/app/lib/stores/workbench.ts b/app/lib/stores/workbench.ts index 37a7a59d..870a9d6e 100644 --- a/app/lib/stores/workbench.ts +++ b/app/lib/stores/workbench.ts @@ -262,7 +262,6 @@ export class WorkbenchStore { const success = await this.#filesStore.createFile(filePath, content); if (success) { - // If the file is created successfully, select it in the editor this.setSelectedFile(filePath); /* @@ -294,15 +293,12 @@ export class WorkbenchStore { async deleteFile(filePath: string) { try { - // Check if the file is currently open in the editor const currentDocument = this.currentDocument.get(); const isCurrentFile = currentDocument?.filePath === filePath; - // Delete the file const success = await this.#filesStore.deleteFile(filePath); if (success) { - // Remove from unsaved files if present const newUnsavedFiles = new Set(this.unsavedFiles.get()); if (newUnsavedFiles.has(filePath)) { @@ -310,9 +306,7 @@ export class WorkbenchStore { this.unsavedFiles.set(newUnsavedFiles); } - // If this was the current file, select another file if (isCurrentFile) { - // Find another file to select const files = this.files.get(); let nextFile: string | undefined = undefined; @@ -336,15 +330,12 @@ export class WorkbenchStore { async deleteFolder(folderPath: string) { try { - // Check if any file in this folder is currently open const currentDocument = this.currentDocument.get(); const isInCurrentFolder = currentDocument?.filePath?.startsWith(folderPath + '/'); - // Delete the folder const success = await this.#filesStore.deleteFolder(folderPath); if (success) { - // Remove any files in this folder from unsaved files const unsavedFiles = this.unsavedFiles.get(); const newUnsavedFiles = new Set(); @@ -358,9 +349,7 @@ export class WorkbenchStore { this.unsavedFiles.set(newUnsavedFiles); } - // If current file was in this folder, select another file if (isInCurrentFolder) { - // Find another file to select const files = this.files.get(); let nextFile: string | undefined = undefined; From 7107163f3103eddcc209f6ac552f9fd85d54409c Mon Sep 17 00:00:00 2001 From: Leex Date: Tue, 18 Mar 2025 10:54:39 +0100 Subject: [PATCH 026/115] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index c14974b2..15a45169 100644 --- a/README.md +++ b/README.md @@ -360,3 +360,9 @@ Explore upcoming features and priorities on our [Roadmap](https://roadmap.sh/r/o ## FAQ For answers to common questions, issues, and to see a list of recommended models, visit our [FAQ Page](FAQ.md). + + +# Licensing +**Who needs a commercial WebContainer API license?** + +Licensing is required for production usage of the API in a commercial, for-profit setting. (Prototypes or POCs do not require a commercial license.) If you're using the API to meet the needs of your customers, prospective customers, and/or employees, you need a license to ensure compliance with our Terms of Service. Usage of the API in violation of these terms may result in your access being revoked. From 64afda10781d96749cbae44b9b7e3e62d8e02b53 Mon Sep 17 00:00:00 2001 From: Leex Date: Tue, 18 Mar 2025 11:40:49 +0100 Subject: [PATCH 027/115] Update README.md Co-authored-by: patak <583075+patak-dev@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 15a45169..74f807b5 100644 --- a/README.md +++ b/README.md @@ -365,4 +365,4 @@ For answers to common questions, issues, and to see a list of recommended models # Licensing **Who needs a commercial WebContainer API license?** -Licensing is required for production usage of the API in a commercial, for-profit setting. (Prototypes or POCs do not require a commercial license.) If you're using the API to meet the needs of your customers, prospective customers, and/or employees, you need a license to ensure compliance with our Terms of Service. Usage of the API in violation of these terms may result in your access being revoked. +bolt.diy source code is distributed as MIT, but it uses WebContainers API that [requires licensing](https://webcontainers.io/enterprise) for production usage in a commercial, for-profit setting. (Prototypes or POCs do not require a commercial license.) If you're using the API to meet the needs of your customers, prospective customers, and/or employees, you need a license to ensure compliance with our Terms of Service. Usage of the API in violation of these terms may result in your access being revoked. From 1ce6ad6b595fb2bcec9b68fa340c038337f6e5f7 Mon Sep 17 00:00:00 2001 From: Derek Wang Date: Wed, 19 Mar 2025 11:52:06 -0700 Subject: [PATCH 028/115] feat: electron desktop app without express server (#1136) * feat: add electron app * refactor: using different approach * chore: update commit hash to 02621e3545511ca8bc0279b70f92083218548655 * fix: working dev but prod showing not found and lint fix * fix: add icon * fix: resolve server file load issue * fix: eslint and prettier wip * fix: only load server build once * fix: forward request for other ports * fix: use cloudflare {} to avoid crash * fix: no need for appLogger * fix: forward cookie * fix: update script and update preload loading path * chore: minor update for appId * fix: store and load all cookies * refactor: split main/index.ts * refactor: group electron main files into two folders * fix: update electron build configs * fix: update auto update feat * fix: vite-plugin-node-polyfills need to be in dependencies for dmg version to work * ci: trigger build for electron branch * ci: mark draft if it's from branch commit * ci: add icons for windows and linux * fix: update icons for windows * fix: add author in package.json * ci: use softprops/action-gh-release@v2 * fix: use path to join * refactor: refactor path logic for working in both mac and windows * fix: still need vite-plugin-node-polyfills dependencies * fix: update vite-electron.config.ts * ci: sign mac app * refactor: assets folder * ci: notarization * ci: add NODE_OPTIONS * ci: window only nsis dist --------- Co-authored-by: github-actions[bot] --- .github/workflows/electron.yml | 91 + .../@settings/tabs/debug/DebugTab.tsx | 4 +- assets/entitlements.mac.plist | 25 + assets/icons/icon.icns | Bin 0 -> 167243 bytes assets/icons/icon.ico | Bin 0 -> 171717 bytes assets/icons/icon.png | Bin 0 -> 18915 bytes electron-builder.yml | 65 + electron-update.yml | 4 + electron/main/index.ts | 201 + electron/main/tsconfig.json | 30 + electron/main/ui/menu.ts | 29 + electron/main/ui/window.ts | 51 + electron/main/utils/auto-update.ts | 110 + electron/main/utils/constants.ts | 4 + electron/main/utils/cookie.ts | 40 + electron/main/utils/reload.ts | 35 + electron/main/utils/serve.ts | 71 + electron/main/utils/store.ts | 3 + electron/main/utils/vite-server.ts | 44 + electron/main/vite.config.ts | 44 + electron/preload/index.ts | 22 + electron/preload/tsconfig.json | 7 + electron/preload/vite.config.ts | 31 + eslint.config.mjs | 2 +- notarize.cjs | 31 + package.json | 38 +- pnpm-lock.yaml | 8036 +++++++++++------ tsconfig.json | 4 +- vite-electron.config.ts | 75 + 29 files changed, 6215 insertions(+), 2882 deletions(-) create mode 100644 .github/workflows/electron.yml create mode 100644 assets/entitlements.mac.plist create mode 100644 assets/icons/icon.icns create mode 100644 assets/icons/icon.ico create mode 100644 assets/icons/icon.png create mode 100644 electron-builder.yml create mode 100644 electron-update.yml create mode 100644 electron/main/index.ts create mode 100644 electron/main/tsconfig.json create mode 100644 electron/main/ui/menu.ts create mode 100644 electron/main/ui/window.ts create mode 100644 electron/main/utils/auto-update.ts create mode 100644 electron/main/utils/constants.ts create mode 100644 electron/main/utils/cookie.ts create mode 100644 electron/main/utils/reload.ts create mode 100644 electron/main/utils/serve.ts create mode 100644 electron/main/utils/store.ts create mode 100644 electron/main/utils/vite-server.ts create mode 100644 electron/main/vite.config.ts create mode 100644 electron/preload/index.ts create mode 100644 electron/preload/tsconfig.json create mode 100644 electron/preload/vite.config.ts create mode 100644 notarize.cjs create mode 100644 vite-electron.config.ts diff --git a/.github/workflows/electron.yml b/.github/workflows/electron.yml new file mode 100644 index 00000000..29ff2a67 --- /dev/null +++ b/.github/workflows/electron.yml @@ -0,0 +1,91 @@ +name: Electron Build and Release + +on: + workflow_dispatch: + push: + branches: + - electron + tags: + - 'v*' + +jobs: + build: + runs-on: ${{ matrix.os }} + + strategy: + matrix: + os: [macos-latest, ubuntu-latest, windows-latest] + node-version: [18.18.0] + fail-fast: false + + steps: + - name: Check out Git repository + uses: actions/checkout@v4 + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + + - name: Install pnpm + uses: pnpm/action-setup@v2 + with: + version: 9.14.4 + run_install: false + + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + + - name: Setup pnpm cache + uses: actions/cache@v3 + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm install + + # Install Linux dependencies + - name: Install Linux dependencies + if: matrix.os == 'ubuntu-latest' + run: | + sudo apt-get update + sudo apt-get install -y rpm + + # Build + - name: Build Electron app + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CSC_LINK: ${{ secrets.CSC_LINK }} + CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} + APPLE_ID: ${{ secrets.APPLE_ID }} + APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }} + APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} + NODE_OPTIONS: "--max_old_space_size=4096" + run: | + if [ "$RUNNER_OS" == "Windows" ]; then + pnpm run electron:build:win + elif [ "$RUNNER_OS" == "macOS" ]; then + pnpm run electron:build:mac + else + pnpm run electron:build:linux + fi + shell: bash + + # Create Release + - name: Create Release + uses: softprops/action-gh-release@v2 + with: + draft: ${{ github.ref_type == 'branch' }} + files: | + dist/*.exe + dist/*.dmg + dist/*.deb + dist/*.AppImage + dist/*.zip + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/app/components/@settings/tabs/debug/DebugTab.tsx b/app/components/@settings/tabs/debug/DebugTab.tsx index e31ae473..25a86623 100644 --- a/app/components/@settings/tabs/debug/DebugTab.tsx +++ b/app/components/@settings/tabs/debug/DebugTab.tsx @@ -1353,7 +1353,9 @@ export default function DebugTab() {
- DOM Ready: {systemInfo ? (systemInfo.performance.timing.domReadyTime / 1000).toFixed(2) : '-'}s + DOM Ready: {systemInfo + ? (systemInfo.performance.timing.domReadyTime / 1000).toFixed(2) + : '-'}s
diff --git a/assets/entitlements.mac.plist b/assets/entitlements.mac.plist new file mode 100644 index 00000000..0b2a95cb --- /dev/null +++ b/assets/entitlements.mac.plist @@ -0,0 +1,25 @@ + + + + + + com.apple.security.cs.allow-jit + + + + com.apple.security.cs.allow-unsigned-executable-memory + + + + com.apple.security.network.client + + + + + + + + + \ No newline at end of file diff --git a/assets/icons/icon.icns b/assets/icons/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..b3fbe2b676eb0da65e3789ddcc5c090fdafabb5a GIT binary patch literal 167243 zcmeFXbx>Tv*EV=(7~BRY=mZGv9tbeFO9+JE5C|IFbq1GUAwq(?28TfKgkS-Jhv4q+ z4&RXX-Q8c+ezpH>)mClQ`^U`Odr$Z2)8{7LWq*22*Z0LQA@S~v>=04Oj@OG6PK zhYAM(0DNU7Ic?N0^!|f|f%>LDx-&=pfZVhdWq`8ZG#jXEUS&CH9Z}7^ca=P{Pf0rw zb%eTOtkUv=OvG=B-kp3Fe}Q*HC>Mjl7gdA+;a4M&p;6xND%CL?<&-|C*y@yA(yi$# zUFABSsGY3_&L!CLfq!U1 z^`kQOtHCe50+!=YB5$HpQ6+KL;#C$OzZmZx9MTN@hC+pt*y#oOR*!)>@CT#!1}>wF zyyRg9WYHHH1+)8THzeZ-Tr3}3d;+iemLM-xRTyRXPmJZVdGGRxPaoS3#rpc%-9Wz{ zb*KJV3Cl+l06lZ#g$92&?>2Du95lxT$Co3e0G2B)HZNA_=kPF5njK%3k`v5oKGtc$ z`0^c6gOFu`wy%$*O)yKPH-&%gGT$OT|1=ZXx&~eEm+z6Jj5(tm2`I~J$d$>M1*5z# z1OVXn|Bd%ysAjN#-goo$Jx1O9r}x1g_uhY@*qtMr4G6Xl$lm*CS(3Di()d^aBjFh|j!61C$#-$tlayFJz^aLjK zkcsFwm_W}_HGfhw3t;*%m~_OA{w2%eMpwyuKdFVYfk(WI7e?9{p`v8-vL#?%g6sQiQihf&F&| z1iKSgOV;M*zSaVWcyK}$dD}+tGjr!}=Bv86z$JGPKoUPcUK|Vj05wz0FXF#Q4N9t< zskXAkAsrYXEY9YkYx@-(3*01`&$F{$+#R5I?jboRfy@XAcXcwo&P~Ph1{+e-H}SMAHre7Q;8kG(|Ae0&P#dwad_<(Vc~ZsY%` zeXpyOQbSVm2^M@f7%`{?IrJB6=-UtU{%BY=tpvO;2aX@OqR{vs5a#3i9|->sg#UjH zVP|0gKv(|XurM5jbof6OF1B@=`~?ZCA~ z^IYrfyF+l_#rMvKzc7BlJBES_3rSlGSznk^5U~ftSbys6x34zl@M30{snY(&E<=0e zv>n3j@zr9dVbrr{I9E^8ahSPIdACQ^%gNEVCG0Bo-O-)Iz~i-+C-K3SxW_aO5gVRb zyMrFKNi;7d`-3Ov?GTrm4Gm5cY)26)4;j^KF4@h{-}3vq3m4OG1{=>%Ya>?)-crCb z*Sa;dLcOU4$1->rT)|k!cr=A30Z5rY&HH7a}AELtpm!6Rjg(Lkay4|IAMOVN;-8aAclXs6 zO&*7~le`VhJkJGT9V89ZCPs38q?x7>h&UsDLnWIC)oCRK7IxMLsTN7_R}0w>P196= zcqb2Zb4Fw`xQ!=8az1qRUis2?3& z#}-<>5d8KPF>;}FPsba5DC>F7cXr=^F*{MI7ncd?tI)FWr#T=dkdcwHyLau78Che? zET(l_``>TF5yyh~iw43kMUh4jBWYlVP$mG)|BR1mG5l!2Udsb`FZQKj8*;CL##BUgi{hrOEJKTGhL7URU#`&auiqU><<)~;)pg!@WP)gRB`@Y z5{$f*2w>RW3#6psR^MM}cHU1p?9l5VhNjOAW2gJ7SL|Pwjhh{3Pyw(f2$v!VFxrW{C${$);+z?pO=1%?>kqT>fI}kye;f~UtGMu zVm8@+6zC3 z>NL()yqLx3Z(N;<=5v_)XKWWlYM2RIh3_%~zpf|_wEuN>Y3@hMgsW0d-*MKHlZn_i zdpyCoG5ygN-w|&?h3vFnm}N1aC|+bK-K#`UT+b4^L`lfZjgtZ#WkJ97mO~q-VY8rR zyG=ow9W+qps1**dr+rb;y7vIu=2{y>KR-_w*%LU|%@@fAST>LO)4Df(5(kH#&r_^4 z6I71|z`0os=|eo~tWA}}Z*G4@)(Ijzg({Z9zNx<2e}BsUCADHe&Tit-;8$t!N5h&S zKaLQzA?0(4#&B29j}VxgQvi))y~p#PVGqx*@jv19V!x}cVgd@N>AVRH%Em3#jKgQj zlg`jt>7lA%8$-gWjNyELTbfghn(_IgAx`Z14Z`oAeL)R-0irJFcTaTMdEVtMRMG%0 zr(P{zd`zC)(ck3>npZV*Vw$O9PH&I2T=W;LjUYME%{E+jdI#vGbWc01vur9zkt?x- zHP4T(KiG8uylOGrBGTE@mJ!;S%FIfz4~&*)qz~G$3NM)0uJU`7SFxjoY?kDDER7R% z^6PK3U+Lb-RMlWPeSSTp9mimQHWbZFj>9}`!p`h4JDL9Bb6T0D6?rgi@5(W}s&|e2 z*QzUejCzvn^KV85XEGbFv$z;@UN#xnM}}mctFov62^sp>p*EkZx?ZZKTULTc@#r{= zqf?;v29v<*HcY~{G62Pi|G5|7{~sd#A0qu9BK;pC{U0Lze?_FcA^+=m$VC3m*#e!IG=vOmA^N*7%p0Y9tYQvT%w@*x@?q&ka zu~W9iSGgXFw_8ulZ1*9oZtqZK8!L!&(kK-)QS9u=(LBKP7(xROz!U9ZJ=FvD|4&zQ z5A2Yq!-EfoJBbM&g;%^lSUj*c(vNyxMK$NL$D#MS9t;v{mi}v0l=Ox_lhrkQgi_De zKmse6lD~oz9P}~&3}B-f#fYI2Id%ecfJwh`st@LfC@t=ep-Y2r{_SK05nHb4alJ5E zDEbvt9<-cL*?yr#itf6k@N8c)mk*qo8)OKE${iLKe*T@4{zg%Q1SU&zi{m? zB)j!$iq6x|Na@w`cihHyd65|9R={> zgKzN_&NM@qom8`1p+#+Z9zCx)Cl~Vdk>Sb3%?o^iH zeZKu=Rw0oU$5|9zDehye7a1O1Cm1XM)KJ}R?Zr?Cl9M)B z#P>(Vgw;b{Gywl7mnEr;=R<-}`xGAJ+d*kfK*{T;#PcekO=>Sw5%Wv+t!&sJZR=A& zMpgodE1+<)JFHcjK5x)<;s(^IzG=Uj*5&0TL)P_gXIU*MfHH@j%GpiD6%+k5POb#I zx+M5Vku%aA`-6-Y(Pi2BZBCY!W)PtExG~+Nsp$I@!+~c;*3*;7>|3OO{P*t-Y2%v7 z7rkCFg6Imse4c6i2hLObYP8^-jds2>{BKmiSjP~qvWvwyF5G?tQM|Z^FIgU|yipJ( z0|LJvyfgL+Kw6#J#K=9)LsXJSE*gA^#WXOl5x=ICI9OBz=$dPhCV)&{>#>)n@rd|V z(|AbWrQL5fY3%R$c;{Qyuq&ekG=ll%8Sr2wzZ`mYKj!x#uwtjVQqc*NDS1L@jj1sv zIb_O_la2buGnXgR2j@8tFnZ+mQR-NwXv$^P@{tV#)dY#h>YfT{35`M!xRFW{J(=OvekiTtzK>i@eW&vESm3EAZ4%eJtXxxe`7HvvDU zUL{UM@lQ9O!Bt8G@IVevaBw{6=fpk!YBKgC8_Y=cs(nEfAf=+zR`XI;YrKykzQOeB zs+o`R(*thm4|G33A&(o)RBdDID_+pq2t>s&W{|2;`*I;y3m=*r`S@}w1?~Xa^rrh8 zS($U@HlLFwuUGGunH_59(&Y;uD?N6L$dZ({nfSZg^;bEh0nKK3gm4fIUWkSTYu+5v zBDFmn!2`0yu1^SL z5w(qGclcOa69(#IYkR>no{JMgTSK7OKjDjK`(#cK+ z(83?g_E69w1a#2qnaMt^oeZ=bKicfu@DP0cdfFvu){JEup(3__^S#X~*`e-l-il)g zT=VC;yI@vLwbc?AE;(5VU_*toiQXpBdYm^bc&6Xc14eR?QKl1K+h%FJp*(iPKq?IE z9`;l_WqpuNCjJURzMo5K(n;KvETMFD9R)z+(wbdH0K}F$rDGjS5PCacS6EbQs8ZdJz}VkNuFlgO3uN}d zJl32e*cO1FTJilLqYT1j0tmq$Ky%hy?7GHRd-Pk#0QL zhI_FpW>*CmoVL7?4}i^N&*y!g+{DKKL24Ui{J|B_`GmJwTV}<{`bD_>1qPQbFC}JM z=Hd$o^%EM(!#6pJUmbwkhQu(-9ez<@(xYQ^tz#UN6ql)3)BbYf;Dqd5P+@~~{ z@SN-y-i@q;^^0GZ9_?HZdmo%}z8vHULCZ9?4wpHm$1;*4uju+4cm8Loje?$v*j@~Z z*;a$Igu8wwJ0A{4GW$<9Fk&Lfo-OuP{KCX+WA9g3K5YajpH2rdZDpwT6`T68%>ys6 zfDhM1@;i#qeY6z|E;S^^5DkE@!oQez7az26_Ot9%*T*yfuSx%voLD0-4dB`E`onQE zeHeuojZ3=JMZ4g_ds z$RN13D*N8X99$Yee7<(Y45`8X1>()@eddeCX#LRrr!T|IACI<6sc@0_3RfB+ExAvO zYkGAAjV8+7@DFHDvR6`p07;NGj6F&6(T;j^14=z!qT5*z`515+qd%Q@Mq{K03U@Sf zueyBa)2zR|d5f0$w9ZQklA4?|B*5r&)e1^Su=;=hpc{vlDP8UL8$)BO; z9fR3PWjzg&AV$IPt1XM>fIz>#@RClz!WIEg(u)k2z5MaupdZAWEktW>L;a#MjwL_> zzb(0=ttCy2fp6ghnwgA`L9i8quzm@|CE31oWlayU^Rho0_(6e*3?mm$czZ@Y-_*OP zDAQ@G3-+%QX)*mMDGG4bPAL3gD*)vPJ=u|^ZI+Tu{hL_MjMDZHaQ{uXgS*{5MDpE9 z3f=!CDhzuAE{NGC(|l)#k>IA$MbvZ#-hV(_;~7kYdfK7s%i#aU%WpSlJShGTZ1vS2 za^@{c6lC5A2JG0(W6Dlav{;b9<3pd4I5W^Y>)-$3=2KM#WMn$f*$NgiZqcZ1CEkmC51t?TPU zJjLfBV{LA3poW7QfyV@Zg}wU#M&V7o@%XN!1bKsj|SmIDd z1}@FyfGC5)BI-G*^2=dO&~B92@@JLXln;Q%wO9!Xh&6azmxGJ(nk2LFn0{ z0Nw{*H$G?2W#3>ua!}*#cddGP)YBN!lrdb&BPDOEz1Wqs*5#6kRe%?a)VRqVk&^Po zKVQaIkRgGEqqQmZv<5;8Z$o+f(GWK4mkW2+5~Wb zP~a=#YS)2GS73dZwbv2Pg?tG94oWsiCM;F94z<=U4{4$^2q)58>UK32&m z^eB&3I{JHw#l!Q8fPrvB4t8rO;O@e7WWThYDdY>5I;vEZoG9qN1kEQYdKt;|8PRb? zN=^$n@Jev`{8Rzf3p-+79SQ%zs-l)TCN^vuroTutrKdN1YE>4mM~WW3{=IpGryoPh zsbj42z1=37R^@=v`TXR#(N{VO+(F;1>B`Rpf(75J%jscVkDH$|>aaA6JPjAOrg+WP z`KN$PUZHxgHA9{IL7*%IFwMn|ETNJhXR;>(9^k6Z`M0mEdsISS%CzDNp~ue5Ps~Ng z!aMhxF|`e5`25J-ZFR90&1T~A2>Ti>2#^>61eqW4_XKQKp!;XocA#%_$e|4ax?~9% zjR}M8=YBWz!?1KpmG$?qU0Oa+8*8Z^H&NPESn9-tzk_4O`PW){>aWKL7Ax3XzIhBl za6t(M&R({&gsw;F6f&m$k2gsmDg5Hp@K(gdOnyC;X);Gxx!b(YyyD;Z#H=Y7o5^_N8x&F5 z2UeLJRF8*zaM&eBM*~}~7ouGVH)uiY=*a75ii65GNItK=rq$_b^Aegoc0-OF+;Vf5I&w-=E9paRy(!s~x+6p;Tt(R?5dYms#r!L+O&q3f` z8zRG)kr)wnAS$9?XU=nq=+uKY`zcZ%*|Jy_C{a0(87S=(ZvHYd5LP*uE#q?^XkEYl%v{vMfR))9&(VUFX;|M&>J+4_rNts^ir$^UU#^*`VSdPyW)-GzR(i^i8kUmGE;j7 zuES9`h2hVW9vkA9v)b4eP2ng@2eb!qU7aGDH&#SAq~36@C06#VA4hYaG+13O7KI4` zcGbkj)LPY;p@qC zmbg?BYo$Tv3S3k^SOuJcL?bli^Z*mI|LcnBF>r_3lwpF^8*jUZstEl@J)Tz-05~iD z?`0&=ec=fBS4J{&EwsA7`;V7wp|G;!XWS<_VhcIOLRJQqImwmgv%54AzofeM z?cM1KJ?q~mb-ye8X1V5?*BaMS4b#CIF#w}h4Hm2Xl&hmCV;dF{8;J>G)cT3V3nFz{ za~pX8Vg~5YV&FuKZ4j-WX#?ukkWYX&9xqrv1|WeGc}a?-5t)JK`P#5Z`M_#`{Pe}N zy8=o{7fS8_2TEM2(PExCie9My+BXclexC7?{;y~4T$%s1uw<|nz4-g-xF^BLF%1vS z{GcfVL&M7yJW2klAR11|FYaa0Q;A0Q18d23gyucXDq&A-s%!f%8`D~(ZvHlQttV%P zg5-Ktu4E&!OV}Ay>Jfj2GFi1U8NP&H9-(i2BNUrr!iVMAJ5ddSEEEZ!b}`3}rWBW@ z$g>sOC8%YW-KtAiQilA#YZal|GTZs{vE|JsInzT@Dv;$@#p}k6qat}HT51K#%EMn# zTBFS9fAG-_R3aQHc?Ho7a0WfvuZIL_!_%AZY-94Y72Y7~94g!t#8b+PgPmUl6${_J z%Vx(4(<$7HTY%5Wn!`w+_tPIeXoqWSwtOCbCr7SeEPIn;Z92N=aj8lNA?l`MCk1z> z_NR~r_GGVgC021ntGIa})X@^L@eeR)8}emYE6N`5DqT=Fwrn&?FIjf&RiC&TA_$ke zvEX@R=vwQD2SpoaAElz^gsybR zx{-xw0OI}omIo3i^M@83>>MoN?``hnj1&XX!gaJotnJ)Bj*nC~ej3vcLVN5vWo-Kn zPY0d-n=8B8o1iaf(l~NhL&WIGbQ#$t{oSy40C9sgJ>FYR+-t3%It*59ywEI}4@27v5QB~<059pi&h&5N-KDYEAvwwCj(ub6RI z!3w~HT7bs{3B6jh0*9m8PyErb+(E5^&sHsudojyY!R4~(V}L8)D753ju%(s>k+kh& zef0iF7_CDeo%p^Goiqcm^+j`TtbooaP|a3<<)>W8aBGW#B14u?^7)tZ7CH}5Da~7H z)-RvPgJ8kl#lF8juhD6cgWkgDzXWAMfw7UxoZF3}yC%C_hWsK^y%ZV#tQ2NR7KJuj zh$l2Cx+)qv>fG+o`uMIwjTlQVb8rt*G4iGLyk$IoXE1Ax!$YXScDK4{@7Q_m+E4}= ziTn~oK+DKlqD7>sqxtx#$xI&&MT;eeBgLhcU0t`5%F-R7$vbQURhqrtPd2K9eWT#{ zLO|{A*B}bIhhIPoaxv*5{susgGKvQa%RV#Pg7R(R zPs7&R8O?aiO#MahpL3*X@lGTD7xB;6ggo93@GgQG$C&Z(xU$mxb;+yCmIo3>Z>_MP z*mBwIzr;hew9A@nn|(*#zloqd6OqEiy0HXVvLn_P(93D3iu}iu)Df-1ugW&6dj<^F ztRXh^pdDsT4#E_dp!*_}_d&&yjbG&$)qbq%JO%h~&m3a)?aDhH_f$BuRO!}Ha!W>p z#CU%+@D|vij{Fd&_4Gk_+)f>SQ$+^P5;zcsOnZO#{TmNKA?w^tUW1)PvvtNzz@G|$ z0nP*$$LbX;EG#ni8lErFAm2qg1&0Ja1l%kLZ#Yx07LnYvo`@o=#-MQD*zr>|(fx0~ z#G#q>@GpX)(Q!Cmb;`wU*MBq3+X_zEgDVuSWC0n?C;Rbwi?s_mizgd7^{JFWnT%!z z;5;0aU(cK}#FzI;sFpyVIUwnRBd9a%uhoR`^9}hs???Kkt~%--zN$Pd3Yl8a%xB?b zv@((JJLl-!-ztNPV#Yw4R^sJY@b~t~H-bkzf%`McD#h*I2AfMZh%7um#|Sw53&9|9 zR+eMNX`^aws!N*@+azG6Pr+ zyc+f67gSg;z~$FUj^oPhBYh*6M941Z(C;PoH&ML$!j}qg z2zswLID}iWzG;YTpObE07_?1#?DzV+;XCaEf^m`2Jf7|OpID?~U{X>}E9;1iP(a)=A--V(xA=7b+HCUNqb{kwL;fmgs{U-xCi>f75$*flJqXSxCbT zKNJ5pgws9!Xq{3`g9N_1O|LJyl^6BUoj%D%%P87SES%Q559@C*lIpqEa{~X?oe@)G zw~)r?NNUJn-&uyp(n{1LmAWl$<$^a~^PEIU6xv)MKckUUr2%V;z3~hju!ZNGZOUBJ zY=@dWGXd_mQgyOtH}lu)U=Y$0;oX7bUB#)mF4zhXn zusLHDQjI#}sIX!SJ&$*mCzE+4q(w?!_Jj>1o6qd#>s>0J%V7s8UM?Ak2-lgDa-AF` zXLFhnaCIc|G2GXrB#(b~ZTp~m_}$aoVll>V%^b&aQC+nQi)nK3*iNF2`UeZYO0^g* zZLe75voYQ)^*72Y&@oN}T_HglBuLR+RftxV^B?K~M*RbX!LOc|ZhKnE2hXM&8Cq=h zDB03i+!VRb6IEWwD%Uv??bc6-kOxumXGRpy(Yo|k76>(fEYTyEe#D*kY1n3u-HC|Y zLP1YNtvm891Ah8T)U7Gw=A3Q?WQn}@F(E5MdSMk-ioM^f#K0P|+;Y&?L3^7>8XmJb z)h`3YHGnjT;nlTwJxdhVFVA)(IMq9C^F50HPK#-kl*4Z>XL%Ecrs>Rzf)(IVOj?un zTrzn=baf+e(c~YK>UUypziP}$F=6x_Pet0;)JZ{bw>A3y+vBP2eNt4g3y%Z`WjXZnPP zn?XdN2|B+6bM+|5ck6)KV0A~zlFc?a3R z(A!oR^6yRcM?`r?&Y%ZN^lLvImO2l`_VAf0a?7Y}Mc5xVT81=X-(a+zr-Sbu_Kf+s zIY55{oia%#ZDs(uTPb~@($Bi-D(!8ykSD5pb9wh%x#3hq(&du}!{0gHf5htbMJ)D6 zf()>+6iMpc-COAZs#F4qSXS(FFzU1x#MgTfc$UFZtXMm0snH z8AHV8G&hGyKCB%ME^^@C`b9D0jJQtvdrCl-ibz&w=r~-v0dy9QW6XneQMl zPGsWeXSbqRoDEl$Tx70E03JI2++O(dpWQM~28!pDSaM=ca<7w|`bI(>AB}(`b1PO$ z$U^c5Xl)+>E~*KoA1YITFMdGsN1$Nt`Z$!}kzbs!yB8NAtJgn~A$;fj5@Jb|nHGd% zw&7I69wuZ(_~f~sK$jYgx1j}1o3CDGscMi0F;Wx_+8A&+BI3?D<5rXPO${)>@~}U% zzMCr@GBjKHd zbg$NT9ntcuuWK{t+tw~-9yEsOMHgrJXT2BvqHCJc;B4CJA0kkj(qx zW==eWO``Ey9F8n;^qx}X+3(VQ6VfIc{USNo-?CJNgBKJ{?+_qCLqy0(``PKLJ-11ZO*W7<_!Mvml zNUl9&kDDlK(dGx;_+ZvFzpLJX@WB=9=)Pop1>1tCRVL&OtHmAa{uRyTiv|(8Z6*$o6_V+K-X7m^C zBwD7%lskQ|(Mga-tyU%&#P&=`k8N-_XoJP}a5}El%zC9j>~>3NeoXO3$Ix$UQ2<Ad_L#tiTX zvcq3}&AlEC9isZuB8pDpxa=qo$ zQruwi!5o|r@)0HGF;yB7yVJx3TAMO=Hb-?qUh%ID%e0t20n5IL|0Sm%r5CkzcGT6c zrST4wcB~46bwFU_Z`1%+Zy)Y}pFM4r)@vrQ^6!v)t-p*V*Ar0!iEh+Xk_v_cG|?^z z`7#m(j@fld&ca?A0a%{UG31T%KVEBx4(y(V_ZU#odu!iQobDV0D7bJWReGt3V ze|YT<<6~dnTF(#fa8!5tf8BK&?0M!>w}PsEUBB@;^qk+)JVZ#YYu+0N`=>zJYfj=O ze>QIBi09>v-TVRDg_J4QKRLrcxsul|=-QJL&a=}eG8BMtU-s&)yI9qt9JqJTzxjPt zeK#OwNu{Ozr{xQ^9TKw>%>&(c#;a@{l{3*g266YnGt9G%n3ESld)ni1`}%{oA9ls{ zW5W`P?mkp_8)ENUOy%~h-Sw}Ze!j`(@9bm0DbjE(Ak{IdIO;;`PR?gXxAQmgB0U=FugH+LollRJR1#BS0(2uc2_U->0^S$mwSV} zN7hv1QC5XSp`2GvJB%~9SF`x^HnYhdi4Avzqf%pGj0xqE0R-CM8*yBTfNSpkVOiwI zV}vRyUYGZ5!t<=*Q{Sy_Zx97NuVYMAXHLMDT0Pf(HFl4VA6dhhsQIj`y> zvwsCWKpnd50xbq)qmv@#_X?!=L6-CK))yOU2tKChL!Qsr{ufUdYEXPx#`78A^gfxU z7PYOQL24+Eqy^J9h<*@HPyv@qVSn-O|Hj|c{TbybkNXTTdY51F^K5;|$R(qR@QGKv z+lAi;0aRoT@1gOHS$#apYkODCg}w#5>5>=zy;VjPC6M@a&z&5@SM;FNz%T*%x2<>6 z{>a^9j-U6aE4lCbn7cF_S+a(dPNTxxg1PJWHF;)k$#^zy)L#m*Z4OQnUhTr zeNHDL)Rg}#qaSkz{E%gIQdtHOOhAJl3Qkz_GUdegcJ@~axJITpJ^%vQ0q!d8Bu#y0#nHuFtL2G}~T zisg!84^7gyE4?ZBBQ7cu@hBiHtb98DwiGmT=7c!y_;MXeM}nNDe0gsY-v&`NGFs!p z+KIA_gAi2HU-yXw)oJe@$t#h^0~%;?be|A^Y6=i5rpQ+A-%{~1KBz^ljO8Ck%UuqO zBY#UA4*2eLwbAFV-T6P1=s{VOa&OTDx3K}pNRm2J7wJDtaR>U?kCu4gpU&N6jiS!W z_xE$2$|Dp9opAq`~3RDE~j^{1>mOT!aYduS4r}RgQ5W>5geLzsSYQkN1`Z{Il#`%jrY-!(%rk zCmzs8siY9tn|*zthp!C+!~R6O$iFJZ(Mq%U8fE9d;BpO9%;C7tQsI-ZeXkk_W`|^A=Usl>sCb?$2F}7iPG54ZTsF33Tr*JN%gMbrWmy>Bc4b zfI<`W^>w$nUtk3h2nF{nlz9<)v%^=k7}uA@Y4inep6pWNjyevA+XoH?11R)4qt>`~ z4yO%)GDx7e_fc0#UGCh3;;IyjAM{@G7BxtDQ*Pra7{j_LwK_{U;KR6H$>Fa=`bA14 zmj#RiH0{=9xRv=q=IQG|MGtCS;s5&k^D+E_?VW5KTA+{g5tW1+#ePRbVDT&S(J(F) z-}k8iNBPZ_1ioxCb}zW=JXI*zK}P)O>tC-3oJ|5C=i{bR*yK{_WT0{^Aj{WCa@S__ zRYP%DnTxHK(_SBG0D}lw`Kn_~B=tB24;QtJ<*VXyVernU9#bRe8$SdDes&q8 z)6XCR&_Nq7k{lEpQ?bBS20-P+GgE_K+;G3}hguV4^=ACedp2;@S{|N2F)v6H15$1h zy}JegD*{8Eu=(M_Uwp{vh?(Dsw2dJ5&n&H9OC(r-No`4jCDI@t>|)iMc?=n~p+OaT!ick@#?#~=nT2exOO0u5z|bq8kFxFkL453Ie9@ z;+Q=`{#{AZxat61(Nw>Xk1BxxveNBmjSs)o`bp!fImU?pAEgeULpZ>`deN2w7F0Tx zF_6yd!9oGkg1}w^m2Z<~gfjc9MX!pb19EHXbf0FCVFly%1(lp-27VWzLyh>J6GAFzOi%O2CCf;1AEMd`4zp zY;~joIu9fs$j?kl@@hBHeA;W{%wKz75neT$0goO0x#h^eZsc{zjhuY|F>A(c`NO_+D2ZRB@r;%JePhM$OPWDtiMQ zg+c;ToOCGvwU&xruL0q zcxct61OY0q8%dX|-Z;`Z4+eHgkUyU>#jX%e5JngJvggo=F3JZ6gAUIun*Rg~-+6!d zNt~$+jBr<_qroWJP_JyJG6613^&3yxR+47@x8qMQIu@Z#`qXX!&mVki<(A z4jjZQ$h<0ReN?!U^>$YH%a|@q_ZfC`7HK#+-yZ4w6~t9~AcDWxDt$#yM!B%kH3-7a|KFIks_I(Zbf*2%dh|OD$*|<_((r))y=AoAp zW+GL3IJjL4<>8J0^YmezDWhs>B%_o!LFLig(PBQU!vm>`^Si}Z_)GM*7_!L;i~bt&YWR>ZPatyQFn3LEHYaLiMm>~YUcSWKtQ%#%cMb#14voCMOJxLM@ z%SRw)5+r8CZSvOf;;WgGEZouZ>` zd|qmM!83AKH+JUr2Kf1P-s%bz3E6Gh_@KL>h0b73IDkRA`f2ewI!4g(HofNag$6^7 z^QWELd+QjmIxJWUwV45E+}LH{lX1iGgQo^RDv@n5dS!*BSnCaO-r3}Hj+frIF^!6S zeJEeJVj^paG!*BnN-;k1;AUm?jNdN2{Y~pjOBbcZiChdrol7plk*7B-@35J)$Le?g zkRV<^4Rk?EI02wR#G(}NpP(;YAszVA`DD(&^)2Egue%B)wTMgMe+RC>(H3g19LBOR zhs*JCJ@fWe&Aqg5^Xz zC3(?O_2SVFbFVqNW&b2M>=-x|X!0OQ<&oC7RxEysq&~0xLifbSiH!Gi4M&>Oio20} zdmnMlxLBri%`MSCN#%t9rkk)&q9;@@$Em*}kfzIwL5^U3D!8d(+FTNPQMb^FyEctD zndbcE)O?2Vg>{;zZYv{!q=)&J+>md&FLZt0X@NH6h6KYtUafy}l5L_w-0g>D zsitQ%KCw70h-|Ijmt}3`Xld1hz!pKD#UULS58naZ#FRc8#(JmQf2?h6)e_*5ngryr zn~=t=jjJ1>XBS%|M0a6syYvF(VV^UEuj?Hz{gi>{#L)5Zw;ZrIyc7sr$~u+5X^sdp z-Ph?$F8I-qwh1lPR})hC9r+rm^g>11CJe;gde}nmt$+Eai=Jhcj5(^~BejdtA)h+& zu1f-G4(xML@ zGeszAa`XGgE1u84G_6{+0?kixTjwgbS|-aX>&6eTL|_7}tel_`92=(4?sE=$lfOl- zmvg>_zO&9<{03X23(0;Cc0cAsTnA3pX<^_{W?G;|+dI&sxsa z8V{9t>(dM6p|C~k-`DAon`;H&^8rw)+}$7s1Bb3AE<~#4$FEPEL?m@)uS9nInxHbP zJ%)gu9rQO|Cn{ZCjh%Nz@Wh>u^x{6ZWNp>*uk12SJ!Bl28;eA!3RJKF1~_B~z?Q0f z*dy2}Hr5-YWIu8t64wfE%Iz#9JV6M~Ege}3D!-~!`Xw^#cUj9s9EI_d#N)5Y(G2Fu z9^Df>fUS=Asx(@&wfFeK*m%#W$ZdKW`|l)R8wL5fAuI&(P}Tb+nW5CW(O5*aS)I z9L`5mthNRQ^BG2%5x7$AlPxw>Iy52;(N%%kSy&lQ7BnbNm(QNGB0hSP(qTWMaaJIW-6lW%D&8G%|5a-%z4N7pX;3e zIbYAG({;^Iyd4>|^-)sA^7>Ijad^Wtm1Vt(FYX|X%z z7J9RXr?{rOx14S}M;oj7694I5$n?o`z|4 z>H%mO8;TCI!DtT{X%l?eHqx=d7g++LO#_TS_NTGTU5zjems8(pHEsO$K%Og zoY!}1?=Bx~owF#mdqqCEbauKpcR5gdnTbHb!CaB(w?MY=Vvii`;AC+km7j&*7I}5z z;)O3i^0Y#Zzba$@>D&~K{PXJWfQ)HtZ!m)yO55q+1G{TW&+8C*G8*^VKK=QyWbsgq z%dR)(&YLCktmB`Y%X6--_6MF^`u>0?A~lP2a_QmsRNm?JXQSK6z)>6cT_3a@7b81s zUT6Uvp&RpNv!!4;!`4yiQ&*Nlg5Hnj6T&CO&=1h(!zH9Mf0rboxx>CAZaX*~G+oBe zAKI4R(e@Z%YhsKYEt@A4@=D+NU7 z>unsf2gQ4TPS&LCx@;X}_V(_UJzGAFjkd(D1NQ_mA@jO#i7&HEgO1F`dPZKx-`Tak z6;xQ<{=>K~Y4g54>_*QKuc@?4-*a!EMrpr@vp&#G70I)2&7R(tZe-SedEoJIzaW(|l`l1yMTeJVlQW^uH2?ouhg-G`s>m$kyD80R?D|r`RqlSym0+QE9Z!wt`_`2PU_Q+sZVU)UQ5idt@>-_ zYyoDXtwV8!58a-~6-fu6;6arurw+3WxVSbq_`1th^zu1Ae0ob^>^pN}*-OPiyfqVR z*_lH2G6HxmV1{qM6AFQI-q|nfWi?P7G^6XP|9)!FdkKk-R0;dg! z<{K~{8MP;DODrI!=Rc&U4vVn?lgz{{^pnMEM_H`TsHK z`5#{SA71$%Uilwh`5#{SA71$%Uilwh`5#{SA71$%Uilwh`5#{SA71$%UYP>m`iEEk zhgbfGSN?}r{)boohgbfGSN?}r{)boohgbfGSN?}r{)boohgbfGSN?}r{)boohgbfG zSN?}r{)boohgbfGSN?}r{)boohgbfGSN{JJudJjF0B(H$=kt}}5ULqYeZKOF->)s` zum9WgmFJS_-*8UskaesV*BE_Q92YyqbgVhwzk9;>tk5A+{9A-d1TriP9uXm^@-EFP zOtAV%#Or##BTo*+_Tj9Yx_(zw*UoQ~b&Ay*hlb`B<`y)ol{He07HB<{@&1!q`2NMI zP3`vOU`@hfgaNqs!FeMz^Qy0pC^5tU)Q=SK2O)-rQ$B=~a85uW=ugc}b`*^ANdwYY z_Sb<-45mN@@$GW_St=zE4r)`shK4JMp<#qCkK3#z_P&OKF#=or2fw-*$X*}{OVsT>H)t_XH0I@Dl(cdBs$g_g$CT5WUvVSv1-Xf#89$jCCia3T z^by_i4zC-+?t;u$iXH&i5AvU_j)-oi*hypCeHCm|w!g!^Uo2|8%k0hkwVG`Sumyzj zeUEF}e)u_EQ`WE~4QS`PAJ_C}$?u~fJUok%486zq{o-H2?o=8V~IRMq>hhXVKDs zYBdk5&_~!W5=$iD&NQAU`j;KM3`FDRHiMrV(`3CYxG|}E)F;mCfD2c2%&iybO$NVU zA#*;}WaF>1t-(1C=WAXi3rCxH=_EUdF8}>d&$Qz6Y5CH{hhL9K&hPqg`(NW6FQ(lM z3PU}9AgzP3J)!|y#((=@#Q@(-iB81jX?tq zGd;fnWLFq%!VS6bRj%&xc;!xV9rSLRp-U2d+o86l&nzR+`E>p&ILX*VA%BU2jF&k1 z-8?$mCGmI60|Q`A1kHPNYHqJWUV?mS;{0u~(>#ytgv-1wROMJ;;*s%-aSJ7fqgE%h z%dF|p2Xd#6(%HauWhG8LyzlhLLTQ7P=yLz{%jL})qMx!J_a`N#!;CFRM6htE+jS1O zgw{`q+}s7n@c?eeusU{Ppvs@HTK0N#gReii#!nj>)tiOOYIz@~KU(Xff_DD7v6VKg zh2r5(Wcow0T#ua`evamb(>{%HHDmrHpWD~*)KG@6mIUUXlTD1}<^!D}$ z5||K=B1eK{;uz+J!-5&Z?}@!!@>OYyOsV~o?tDK`qJTeom?ub0GZbNvHi~%KaB8Yo zKf{XkGO#KdR=csNaE=ShR&oywDsB~6p3>#(p!Z*El3geI-()YK2^A9g zJa*xc+{J5YJhTo?Z&k-FCq?{f6A!>NZ`X4?&zk?8;{cw-9b_3yW99_n{FN#LNLxpO zC$Ogp?m6x?17k}pCf|Ot%1*!QM2vQFjuw7+(PkoMmUsYE=u_^noIJezNsMq2KKvl` z3}^T?1RLqT?sHzEbU$nJUmM<>TzFet8u5}u)3nteFE%|mXn@H5xCmS-Rey$5*d1)yEQ)BzXPRpm8=7>DG z8iL@`MTH#YMLg#+5NAKW(kIM#BrR1kMo|{04!`N40KMleCX$hK$K9^w3(wf9NG-lI z#q`_qSm%w83HdqCZ*?S)k^Zz$b=87hVhzs$kD8=;9n`f62E3UQufZp_zsJ6cxCnnN zP^kOrsnvq0mg`;lriT`Jr6wK2y4#L z;fqs`d#6t8DPoJZa8vZ}p08#3AB79>NsZ~H12Hs%hWR?~1fJR*t7HA@)~Q;->d_Gv zP(9BPi^-CY`OX-Q!*|GL9$-M~5?Fxm_kw2L>if!z|2oL*VTJoaf9(r5Ey!R%EA+y> zwazC8zdWU*5b$+uiP@z7!HKq&jcT|~;5O~MsoxMsK8GQ4F6{7=tiMzc9of=IOvimc z$D*_=<~ReS5GAA53 z>pRf-Bf7uT5GQ7tkcU}QDCTs2h|XiUKl<@F-JQ<&=|BP9hiM#nXl$9qX{OuP;lu>L zP;`1{)!|16Rl3`Suqr0^Eui+t`D!vCXff1Qf)bik0rwIVFIlMewS64RY-ou*=?DpQS7JB+R?^l z`T(tm{*K(Zj~3xg43H{@-3*N41k&HOagiDpUkaD@rk>k+r2pltI5F}i_7y==W^+l8 z(rdYirZI*Zs^apIp#vv`YwB|P0Y|u;4?80`8agAp#&BNi+gA1Jmi3s^;32(>Epuvp z=gK!e5)CO`nTG_-+j{IZUuuy@n~xBEu`;7e<^U(1Jicl- z&lbx{<6c)nT)j7d@1Etkjk(Yv*=mcq_RIemLkzl`gXpJq?#ZESs|Vv*8o;yeZviESPs>W?(&WnMI*fhlB#eXo?jmvR8N=EZ)Ag43kndbQmu9V+ zCY>qAyFv@9%*G1`e7U_{*Ifxma{&VEQk^DJKnu;W*uU#_e}^!6c?>-!2K8M|mwEK8 zouAf*EI;)Zqx7NZ8#MJXpw&^SNqU5H?F{r!g;!ljm~J!VEll=bqNM;sbeC(=(DgTV z$#d%z!^|)LG7f)W{zDFPWF$5Gme14}waLY4!o0uR8|AV*YgIu?>%pJTvS>K+1h;}N zdT`QY>-{7+N)2T$jR8h_?MR*}^r63V9OS7I^ftG3(l!#BKVO*+GoM(S>2` zO&d++5n(QA3}ai@(2HBK5HDz7_)H91?>cL3KxBGYmM@F8C;ee~Jx^X|4H%TfR4H_X z79HObJDJLSpKOlto5FC_JnD&;YTULVpJ1cNWC(XKzzGxI6=u=328W%y z{CmPVLBMBb`fCFtECPi8HV0M^A5-V^lUJs=cmeT^b)l^*fk~M&3701uzlYEU2(d^) zy?v+%(uE!7V2ox}DHY1OjGZfpJt~4uVrK0r^`iMjRv7)%?axSy`#5#y*d$(bLuZYk zL4R;YXQgzlM@%&*QpS3t=#!myoj{E&KO8jcD^QJy@(3#>&2R4DES>`l6(HCtdc`qs`>YZcQLW`YO!+59?PTHvCc&TkVg$XjeT9BfO5i?Nvt zjVajN5sd01gaK{>q51?w!AqxoG3pMIuE~J6C+alVW-_Dz6veG`kw>^lQ?)UH0VW~61DGJ)9|lx* z^4E52F+ppwPeOj#bQfvA%~_6a{Pk9>&Y9wxP<9q$MLNzPj;*eVh7y_e1=ca<8qNr( zS%eY?Ve~9GFcJLaaUg=6Fd3p*_zmyZ{iyUV_h#Xkb(<=r?-;PNUe&cQtqyjIBUeqp z`-_|7DR8!{+N}jR)Vi@KvnX3+;3ed@48nrTgGx)qpTw75s2@AK@TW1KZ!dizVHYG( zti-oj?#z5iK~{BZ)pjZVZJ*t5eMeN3-6$ADpz{d$xUJN6Qo_6|zj~Dx$J9W5spVuq&MY4)YF|TJuJL+F!Lc+b$3BAdib;=eC0f%d)udh2WyQ$*G+_+ zMEKbS-T7Sq8l5j|i4oQfw0>i~Wzk>>xQ9VjZ$;Gq#o4y%9$RG=NpY!N`V;HZ+eWW6 zfNoL|!R5l!8b4tBl_v#{-|OhfFL5<=7@o;A!>0;Uq({M~I9O$A_yTAFayki}|| z=9pM6`Lg`VKj6`A3cY9nJ#rRvZU(b}v5hR-UUweG-Nj5{7iwrI-|jn==4@u4in_zc zz9{JbCAvfpmd6F_Rsam2ZDTj;btD72o>@ku=rrzZmg-V0-K~!f2M1z=gSUE7^S3FS zuK!YGzBe2Mlp}%pDso=`?z<_Sz;87)j}8pY#I0sG1dxw6lPvIo?HVE!ZXbfLSUUPR z(TlqyWxdS-g^ETPwKiph0TGtAfm^FA1cL1IMX74 z&OzVSwa;#Bz_84Y_rl85_D|(hcbCheGbFFaIwA6ukpyUs%+!Om?(7^VRU`*Y7XfDi z>5#`Rsd1Xl!_n14CK_vtfs>t^99>J_mgHwghsGP_-L)2DDg2#akkW$%-_OjA#`@MX zkZ(CkfpFa9$aR@j7TkJ9rCmvmZC=|}`KC>wKgD6t@OXC9bF`0x{^(TD;q$MoWP2%U zn;9a1vCv*z%?s_0hc&4#nPjbGeB4b992Mp;d%ksdwkJGH=aS@%T<}?^r+Yey1AC`* z&5QeFQA;BiBo_lJ1|PvcT>>)KyK~#HtU$Zw35-Lq4Sq>B;hx8+U1?o+jUvV1N@r14 zW2f<gOR}f%XSE}Fft(zF_BTI`<=yfV&ijEvp;5+M;WaqU=8%^<$&`*+S z&2Z8uF9q;ID9V-S8^lw@M+=5z=&+G$O*A)ppTO+McbzT2JwJD1xAM{s(|3MK5QloQ zn-&2y_pQn%BSjU3R8G!uzsf(EHb!$+1qlXSCnwjE*YnRc@->#0iCtdAzH#TuKTQ$r zAPQ9ktQv(p;Cr_y>^qP$69Kx2ple0-BY_MiFlco*j-VKl5TD^& zHfz6#XLCQyf0n{9mk28|pyL+ni16JRH~o8#uoXDkjt5tG8N9;@3XjRI#t*iH!1 ztocOec7BZhQW0f8G&~B0`b4uPEKuLYMb?^mQ7C!In>&pU0s1i5m%qS@&=CLR_~u1C zS_CEeYY1-ks~w}Cm2#aNU$=CdC1y<|?k{{)pQNT~AdC46^|q*3u<@rln+<8&=<}=*OlWDW z$vD&S;_1P*8!%0);UZ#Y=a@-=ez^!5?1=zYPecU*#yj77KJGkYBuj}9o^OxT$gnLa zt8#O-H)NGxDPge=aVUB(^xcD|K6ToUHS47b8*uwD9AU=@G$;N0Z9rvb3?iX=G+XsUXBe*KKU z3;p9s`Q^8kvh%t!S0ekib`45YMdbrFNl-F7{sL@FdVsx46IN^a)tckCk}k}obIj;{ zVgG&e_QBdzMN zbbvd+-{z}6C4lL~hhHuQWu)V;oJfA8^Xg2#_7ZkyD<`-l8|Hb5?gJnt7;MZG0PDEE z22sYmTG~DTyJsNvW8!W*qjK_!XqgXclz+?Hcs!Og4!sf80LP7}M|?pq^C7nL9yB(p zboC2G9HPsd<=Pya=9vq8`B@324=<$^nxZ{G3miYIyJldFT4LIZg~ro)!HS^M#j(`~eg14@4<2j+YGi z<*i_^kQy;R#~(jhci;WJ+<8z%-Bg`ih>z0>&tHuGGxK?Fb#U=_!D%s5AGip==}&SX zA|QWq2ozc|NB;UyaAz!|(N<;CuvD(VCjmWw3SGLs_(~3pMSzJDn0H&L6NGCbQiur)U6Il_0=KM$T+}701jkh6_Wbm!7aJS(rDk zBbryU=2D7^VFfM~>ZSdJ((7ib2;exfJFs!FWN~7;BmthbeA-x&6rMLEu+-yNH$cfD z_6Deq3YZE_0&Z-o2Dk+H1xX)UiQ1W06J6J;@;Zc81O%+Ppywu{@!LG@-#j)`i{OL> zU)!gpz4M|7KnFzbKIgJVb@rSRpiqm61+i~wOYd`=Bkq~8>xq5dYNEeo1HE<<82`kW z`G>x``n5SNcxAV|@vlxg9quV6?|>KF{@Z$&?WuV8?QfFNZi^%+tE%syXU890S|APa zVT>ZU+eUVzi5vfEI`=IxOy^bok9d1W9%GxwR9cNKEL8*| zQFS4JNcN)>C^qrUopgVw`g~ysul1ml(@R_b^rb!bopRUoOEcMPMzh$c>VTQeegr5w z1v_p8I3>XNa>*=1UbDiD{ti2e^bY`!AM=;VW#Qhtg6GSBo9WDUc8M@lJOU4q54x_E zX3rwR;{c)4}&lN z6}}8+#5x7xYdPQW56Vaa0gv)>!68&h)`Zw%qb(iZTef}glexuUzVh zy8^sZ4a+Z^zrU=o-CuYDM)(s9dlMt7W&;=?!N&``glz-sH02`%Z44Lx_C2}&lq}4; zR=~&+C;_G&pmnKhYT!qv$NVh~@#y5z;eX2pL@6T2FT(7P!%TDFue=B8@sjUg3C6%m z+F14c^FNshYp2m)Atn~Y2rQ+dB@-f+d5loPM7s)1MG2`|6?1kh(T0A~1;Pt4&lh=y zLWW2{q*>3*+PxznOWhQOv5^A+j&8rW3-UNKZ0*mthNXE~pc?;IN-sKLi03k&*u zJU(}`cd6I78a>C5Mu+jX0}2^&cV%JFGg&=z0nEhoDg z8Yn;d1Y!ClAWx7%5ttudz&4!3UEgL{i0|Tt11X0r%7gBaKHSFsRHXgYPUF#X3N6V9 zlp+eM;AyfnN}CaZkJgXHpqiq;7@w}$PXTP&)(3~&=#^qq7ZEIVB#~Wa$ZH4cZ-!{n@&e43P+#zK5AOY_Juf`J9`~91Iog|@=ogzgxW(j0Q#ezjd%v1J7I+94 z_+hbQT}zElP-hSalnKdZNx)cNh3qg{B9#6djn=;byzy}EsnL1zEV!dE=)CjOPDVO=?fSUi--Zss&xe4yGD?fQGm?P@6!Zy2z`8Ay=Z#_mA?O z1U|%^`tkE9`GqXY_c)lxFEeztZ|pJy;7tn_vEYV(js&$Ox$#Y2Vy9Wy5Yw3HEcBxf zzY|9(#xZDhWH`dvDe@ul;Xw0Ub?d95amFHvZi$%h4}^Gu#vZsw1khwngGPdh<#kv& zUN1{#ux}tVJWt3WlIOuQ%7Bg~^!08t+gx>*irO1#I?e|F>uZ8{Ob_-siGx4Bl?^Lr zFaV`=U=>Z;pPB4z0Iuv7;LiKvBv2tn6SJ0fy}!r6gM?SHJ6Usqy?_aZ(PKKPhrMfb zA?@A?hG?BfOnFVxfIz7%r3{oE@E|PA;%#P5%h%W@Air5k_s1bQ%>)N(-L1TO*RomWaQ)uJ&z zjXM^^;i+_J0=a_Fl>X(uDqf?)W?8@nMt0l z|6t_Yjw~T{8T_zOHPNVw7?K1Wtg2>&C5P|zrq8f~@0($RTE1`Gg~7bT;B>E!*F#0E z@uQA_%knVpQ4A=K@XF9@-=cLe1A z9w~;SJZ8PU8hiYpy4EfL9E4eo-#m8R8m==S+($l6sA~>=sS%$vxOVxFN{cIGJp>SM zgmoEZI0=N0V3E6<2oQa%`3`8@3}nUurRRaTo1mIez)Xaxees15MnFF}w4hKd<{8eX z8rFCfPMWx2|2g&h_b9}W6d;l%{kUtVKUe7devVgOpM@tq`|A%U`VCz;^wZf#0{b>zX3L)sJFx8QZ!UxRENfphk4=4aDf5M{$$hu$U< zGi;9w(Jt_}j$rzQPBHL!z6Zj^dt0GbT`5K{zM)C8p-mfR0^w;0EPKXlHoztua7+3- zqpZsavOkBcFU1l%?@J$5cSz|6dHzxymj!^iHC4#boBB)5jDm7 zr~Ic?La-KgD2QC|2MsiM~Kj zSevyCmiRNR+|sNLaHnN3uotA@aPpx)Gserde;u=5;_0zV;+|kl1C)ji7$9N#bI3n0 zF9Gk8`x#-S?O?{K&`Ti#dN?R-Smus&+&!vOqeMxA!AA_8n|Jc;JUQMiae;}7GqENN8U z4sqk(&;+&EkaND+a%(Jb0{oNFbz2=A$FhNyW$2Jjv`Lpp1Rq7)!jeN7imsIwliei6}Ih+Hs#_XRNcKR|f;ST641ku3>0xmL zMi}Z0{m{}|z@yR2XVivHFOi_wMRwF)x1}q|Rr3;yF64lfL))I9bw`CQH!hT`KZf2R z_l_3^l_yRwVBz)F8hdKSL0jlrW~lMxtXNDcF3}uTINsheC7cg;*Sa}rAaq>~zQ6&T z#qoT8IJRa<3!Y#zl_Q(W!aNUxv{A23fP2<-$9D$G6A(e10JjIEKdC1;cL~`2GFA7{ zw+y(~Hz%W~p06E-Ua&!V+`QrAyWi_+O5o^lz*QX02rylJ2}iMYvGKz;1Br&W*O=(2Wmz!Yd&J2Frn4)*<6Cwhen zuF16!ynF%j_J;y5zmj02DR3wr?nsA&^P~f5KmqQV(@9lW;oJ639@yaGg}yk8Am*0J zGRoRoXe~tTuR$>!orr8w2a1Gf=3k)Q;ElFsRs(jWYXdF>oy8YyhTkY220x#Sh2C}|B<2sidf%V z;OLiI92)RX55c3=6tm?_p{vC@PN(%TV6Hqc!5;`(=Y4BI1Hsl9fy*I=FeqB(@b8A< z4B;i@=REN}%RC8BOK9FLU_>nJY5XeWAt>BE4!~gtd*z_j%Q7=eeR1*4ELoMNfzC=P zD7@zWB;+~AwzC}2VBeVTOvi5tFVbq03+`!@*t0+gJ5HcT^Z6e8?wxKh#G_PTZYLXV z+~oOZU;=mFGS2NW_naP8J~gv_`Bcsl(td)&EUNw=L9WA;;J`cQKX$K4Y zO@z$Ob-wsNh^Zr8N|`*qSUIz`CLYMy=(&N2gO2 zwGp;;y&~6-U6-XU6nL?}Fb@`*ybcSwONW{vS#SC;x!M2Lx47~_zIva#$p3KXjVK!w zJU$wPVl5GB9p-^QFIe@tUHBKu(^9|<|HHHpoDedO4Rfe`!z=OxsL$C~wz0gWhm&-- zc6mAJvadPi|7dPrOv&RsVMW^0qa=@hq1rIY^-3u{)zT>jP##A$mpiSK^PBN5^k|m_ z^Fb7S<90g@Ch)@lW#LtK-#XwKg(ME_tD-y>e^I= zdBzRvTEiNnVJBZWZqHt8qh#f~Tn@b>a(n+jm9gg{)_H}p-$)qc?*jw7m4w>mW5nOG zd7o#u_$e7AW|f^9Px6+1f)!jI11g~9$%i_kVCO+XT_-x{E0>>tEF>EwT`iJo&Fq=^ zwV9+WqGetQ7T9X{$JwQ329(t3GE)tph@dj}=}z^t;G?sor0s-tRpDChjosP5wy~Dk za@1u)`*!-&j9ffORje&5HBc^j`5nJ2Ic`Bwks-ItPW3V*qG^u$%> zstLh%S9^b4O|s1WZ?1kUEG5ublQTWbk2%YA6jgclPQ}UUQv-ONnxJw&70fQvNZK(R z7%B5CUtYHa%Tx1)R{bY_P%ySoY=-XZOJ*+RDC|&G@PwOqGM!@--IZR;JmwnDn^4A~ zWHP8+KpCoT!mqmV8C}`t-J9-XKi5Mo7xG>B{Z{{rR&%FMbPa3Y?ff73FR^Oy^L05v z8hv3u*r*!@Q#WjW?sM9RoSF)s^YNHS!Y%~buf@f=(_8*>81rFSf-hxoOeb1>X$>zu*^MEh_Dfd`8T1lW2cDmH?dN)ep%ex$*A# zL-U)nx59Y=M@kUQ&j$qK+D*z#2JC3p7Ry0@mO&w5ek%#8xvxU+pn*rh<)^^cM>XpL#Lwr~+(fM{d8w>xM(?x!C2u%zSLTDdImm_YgY)uVQ{IbM_G5d-sToX3M13CorxydM>I`!3pVT7En@ zp{oFazA5Q*o|?}r8s^-}M3qL((mv)n7%2t+b|*8n)ON4@*6esl&E1t+`_Udg-0A~F z)pBO$<~L0+RXLqtZV5zgv}@2Nf4gsUh8j4{d;QJd+@isG4aD))J82RZ*Us~Jf4%{K zbyu48w&KjalyUZbd6KCD$92117q%al2m5}vOQ-s#(oSOMUiK6v$B9rGU8h>iqJM5p z2>B+6%M^dH?0kIC+p<+$Z9<&OBf6_->fTBJ*}IRcc&FhNW*IEH+Ex@9v>{1Iu8dE7 z|5iqVO0jl7mEWrt`ID;j&Hu9<=>PYO{r7|}wk7zbeQNwvYVuh=de3nEYQU&TMld(# zpr%*S&nxoSS_h3Ag-63u7pOX_<)9k*{Oe)c;85iZxbEYYwch*T`mm+1CcbbJW11cX zNiHpFUUa9WD)fberQE89+p&&cCK3L8xva24wikV@Pf}C%Y4Yqlj%PJ=oN0Upe@%bI z?KPdO0pWdbC|1+x)!G6IltTS&j(3p16%yuK$X zCjXlMz=#^|Hxq}eY;peOuwC$`#O)?J1otk7--WrbrY9KnR5}WGIlXcFG#$#@QG^dm zU=u(z*Fw~hG>9`U#*dCIpQ0$SW#jCTMvBLAj;Y;L&&XptbeC7jFRAEi6pu7VC>I_c zZ9-dbizJOpQZyffKOdnH2GLDB-u^tu!d1{?^te4C{)OVH<(uNfonGAg-uTrQQP@L! z`jPxd4ZqWa%)fvsLkN4p;~FM85Q7$>8#>bUh`HE5cF!{^rKswZ`Qc_H=+VP0u&l_K z(rOamCsGiQ)yjYS>*QWC_dLH}Lket;OkzlfKJGBlO@SOKwKN-B9Q4P2Ju;#+uQ3zx zRIO**SL@p#<~Cx(OvV^gC0HW?MSL^C?uY0*Xq8k0#xwamH4`xw1#VR06t=nVF|w4Y z!wT`AQyt-v+?8X}+4|G^P7rc!JnnXCQvDLCZ)li6|%=?QuV`9|?sv zECuU|yrgEPT1`vqC1#~t=lt^~K4w#siSNGGI9aZc)^&u4e$4@wZ4HlxrrW_Cx>Bvy z8ly}1TsCJl)2L@ZT3M(3WAxSiwEC2)GU?B$=XXB*&dvN?Sq{hVmcKLdXl>Y&UR{G?B~H8p zF(Is*`%J?LOwYO^{ynwcx>EEWzs-FgJ7M5@&6IQ9-|HYW7%6j#a^}#! zt1mo6Ys4(}m?I5*`WSIi7{u&!(>=R;nS<)3nv`8`)|GZggJTLbHFAHi^O{#53fQ@} zMv`5XqiSu>U&QN5$4tQY3Ptst&-$L?NILLE?d!#7Dl^roK0ryEX*ci#cNGblOy^bg zXjH|B{q(q0$AN-t3U}D|T+Wx$7fO9EFWWuhL4sbQPP~!C-d7-FJ`wG_BfAam?dFey zmZCfB#J_DR27=djPt%kvJ$d&7Pcv4Ln=dHDwns>Z5)@KD$^%wuj8hLh;EOnsEZP4G z_c|S?Tu$?@O-CngFS1e1OcXURuI1M0fgJe&-)koAILW>@&>Kkm40j_(PnEgOc zx8_pCBmYkVLjKwXKb3Bc4A}6%I}4Nt7bY#Jg$_dvr%Q1@`mJ!d?ycb~`us$kAF69I z$EUb-zeyRP-CyPH$dyS`E5hc%!vM=|Dz16qdW!)%!F};jfXOVYGu;{Jd4w z*0at??w!9TdjF&Sxrp4D_KLQVa*;4{jXro|Xk`AzY=kJKHk!Vf8rO-0w1L7VRBVLn zwIf1;z+hO=mNxOn&YG*RwZ(}&7woES>Vs32>sd2AaDw2gJQv6xsY9Pq^}TNXdUMWU z3N`y@lB*?qMZdXRz}>eo70|c2(LQKJ$?OqYgWoJJpQrRpxGT{EH};!t^^t{69vY3g z+wFs|C{v)^|83bjK&e%kH%o70P|!%YohJJ}6eOW|!y=^B-J5# zlz|rL)FZDyI6Uh?06FHpnV$Pliol|Fv1N51UnSM7{?s~;_bh>~*5Es;#qIL-BDhFj z8hpr|RMkT9i9JzJ%|G|3ZpOc#kMeJ_ZNOOJ@tq47&BiD}bIvnOKytrRYaGy8IY4Nn zAIR8jA7Ttzw%aawEHAA{^+=)pgM+|rHC9AhwIEXEV%_GGhJ{J#G$u&K`Wc7btS>)aJxGs#rD*%L0_ z#{m@1MGLccP+42GpjLl*{eCTP5v3c|KaOp(#Da17OOpdNpLX^YX11@eL)A28KuDnL zW>V5Q*t`10zxh8fuC|@(`=*xNciE@IsY0}K8t-aaxu$phS>W&bSaifNzInn zeJ!y0oF?*!q+Lz*XMvGJs;^p(d4CF}s#9mbw=63k%rbPKftn(ku~dA)$_hN zU))b)yM~aSph=U9yYH+ptkKRk#Zh4s?&o>MKd&MCBG0~OQClf!(YjhMaKG$1zGd;$ z6Z{}}(QLQW@8Qf|c%z!LsX0DAcYclcz?@gY*~#93!8s#^v?Hx+x+y7{@?0L_9; z;~te+cSZQ3j(f7!6%m*yHIPRRP@VUtY&A_e!Z_8zD7Nc1VR;kkrLJ6$wlF~LTi6{* z_1>bmVc`QbQOEJGB_3Lb28P^vCV%B{XwaUX{%#r+V)weP9$x|Pkp?XNN#=Al|5Y=> z(rl=e{&bmBD57O=;-xeu*&v`t3BafL<1=quLkja|zrn8u>{m14C#+EZ~lbmXq%f9JmJ3Cy{mGTD{}B^0G8>4Vxc z<>nyFnj1s2B&D={4(eu8Q0;OLDcVI#@5atv-ItoFTBncy_-NQ@68i{J(~qm8)1rns zYWH6sx@d%kBMr#LNnY=K8mT#;d1D=snK}ENYDXvRfn>_CWDp9 zULgy}|6#SCBDqQjf3Y0$cm8d}`kAa4O_O!;_tf75>@m7~Q-Vi!T!(>?D+0vsuhxd; z=XwMU%9_uDFJR}7VyE8X+Km-jD!P_2CD8TCF@~o7U~6Rj0Sw)px8s5lmbY$}Hv0HT z11{?Ze^r~52RuT7eJp@5qOD5EX(n~OBah|~skM0Y`Gh#Z7}gPWp;w@SHVuJUiv2@k ztE?0QmNE`~FvryE6;7lj^WA8kRhi7Qhyf~sf7n$)w|Up629NqKJ4QhzSMR%RqstNv z;ltg@!IHgkC*?{?%+wg}#sPf42w%FPp-??}ixYSun2UmW41Q4Kq2FO9Zo;91Ea`?* zofBMCffnil$ER--*1SSL{IP>z9I9dj30RDA##=_PGd9E+hUyn)Vh7Z&ZgvfQtAYiZ z0|p^7$L!ccnLg4mw{99i<9Dbb8?gQ>+$?I4W`?*b3B0&l&+b|g^aE;$4}jy1Czl)8H$E#7!k3p*<jJlH1mH2-R!+56aLK2zvaM?i#qR}i#pST( zI+-;Y&1l3Aeaa2#^QWRig_B>G)C6=PFoE>Eu3a5?A$*{fN8i3h4_&vJ z6@8T^=gQSL!6~QV6B3jgJ;MezqnsU&mT@~?3cLuQTpfpV0{$pZE|AvNLV|K(|wuqT=3j7A)-{Ho{Xr=7^c%5pR6?3C(8jXH1ks z+qDb+MwCDt9;WngP~*e+9oTS(Zo`Mt^4pc#U@@!5oyx7?^r>`nJ_SqtWIryy*(?Y7 zWli=>IhYzFXyrLfYL?tFI{*u36dX7Qwg6Utq8uUU6g$-Fo&0<3rgUf|hUEcY!0W3U zEQE<|@a4t;^o$7s==V@?G(YL#A!r!U@mL!8iyIe1Gu0Zs$a3|iJ@a(tHYuAHCwvR; zK!Sb@;~@jx2Ll(7QsPGen^>Sb7)rEqKBI72oUGUV5$&&53>~8xXfJWLqD?!05lXwA2BJ|(rE$uwt4CA zfESc`N%K1|`>M>46~=&=L%3LP8`j~+^BL%SpqYSFV)J#CkoyI|+ z2;PQAWs3`M?){Yh1ei)fAUdnL*AE%MyV23N-TMA^f%%Vkfkf~3OGaTz0C=Ce5WY52#VpI`o_j%Jud!Psc`g~*V|wY#2P5dtC5QRxq$F0d~=7&}Kt;I^UMeMbuR<^ZM=a9iK*H-*nit!?;- z4+*QDylD;XVUvs$NS|z-BT*6HW$~7RtuuhgftTvQ|6uP;+@but!2f&3VC;h|5hf&L z%bIhH><-GTE&i%g6Ij>xH2(AbwTLuw4iY(aSwX~@~INFgX4IhFqi&$B9@JQ^0e zIQZ=hFK}C>&T+dOP1K$^`2d12BIfZSnX$}QJnaB5XX6`(|98w>v|*&`cu`;yU2hTs9OF> z2XcdNiJn7X2y&L*AXG^@Sr^j12T0|*wts&WQ2JWOfRQ%n3o&~RLeI^FtAiO-pfD|jF|{nKisg)sqBrmvvFJek z@kC3!fE}PpgGZ7>UosuA`U=@Z09t73x1Q4asED0NFgVr2??%{fO|xs_*jt6BHsCr` z!nZ`uS(OhB6h=Sh1+0TU58OCHt9l1Tjk2OLm|W+UG0RKOHDNdl*q(aOqpg@~%=MvA zH@LTa&L05yM0ao(w^ItQ@4cQ4%6f9(?|5R{GTzHIRg%C@>vuj>qO;8veX5-^7f=dM zF56Qa!j1J~^;}Q@N}$I}Y^aCNG2_}Gsp?Za7sIu#1fEbC&s2JAX(YTT?9YMz;M z3AhP#*+F{2U44aB;mBbot5@ZzU>w>lY=>^(Y?Q8_Hf7lrb(Sdz475DJf#4NoS~x51 zp7|$TZwd|uurk+_E)D`_2VUAi&aW+0=eC7;zO3Uc4v_#Bw!lEh)WA3IOfT~TaZXTl z*i zpVgZd&z|uDCdL3+1oSly)R}>1CNO6nztBaMC}LBWg%Sk%01Yhv50+yozVYhitV-Pr zVLG6+Olg2B5}ODHB)`la`(%pR-80g_mhl4o_Aq@z>|4r8YOgBceMKHLtgF9D5=9mO z`y^<6`*v05?yAb&)I`J3 zvhzBc-U0;A8&XX!p?UJay%6ZxIRFerJMQxE6p*(A$vXsry8V$D_F=!eD+xt#Zp4<< zWdD^baXbm@4#w_(w?Gbh2zaw71Rh|y%;u_hr@zcr!X@(Sdwf3^Bmq~H0h>uJz&17n zoe=}N$7-CQU~2TLPK>A(=Suvo(9p`K}Qh>-mn!M=L6Lvv*{b9ccDto`1!O z9kwgoQ``cZi3c8s10Goh*YVC}221bLa2!vevo76RWJtn0k=ZhB-9qZipZ6bOU&HiJ z3)su>HJ8h89CP>bp8~Sqhm-`}h#YvF-ucY~=-m%A`@zm~foaXsga;m{$Nb|JH!$yH z27#;rQq^nhC|Zd}$IdtLGm9NOX!t4j$SLR(nZI*%3e(q%CJPIJgwMmpp3Bv_9pPas z5sq=7rzfrb?wL2%4eDxtoRD4=Ma7gxn^XiJK$TB}DTNqOp8;FpMd;JhqE87^bd7GaVIO!3=l3g7s3pX#z-ptVT%cw8>;c-CuLeO0 z5aopGq#%jY(L8dIn{ft60qWjAfL};(~C08^EA8e@Eu%c2+B6*R!84$HY-jEhU`L!94O^8Z3@h1j}d-1-yhkGH#`z%kyj?f0e!X-&cpX3{Fpt@@weF>y?gZ% zz|0nHSj`I+Z?bYMzA)n=^}4u|Jp^YaYFDm6p|*#jaTdVYr;s~_s|7$8H}l{(>*q+I zL=p*F-H*U1JJh^-rSH}YD}HE{H4j0q{M-e@6A{UG`X$Ti4EYM$&2lU5y!>Q&^Xb9p zmu#R>+Y;464n}BzxetVkbKG9tn_la;XSXn>rW{Sgt*>I7-{?b4^u7YDp9CdC6^0W6 ze&W{;K{%NSuevSu`+JXs6{Wd~)wo<`H@t-~Ym7AuR!5e--}~DW{`(lhD+;qGCb{_` z%8@N0DzRB2HaCZ<-bHkrtF&G;;Ylf1U%=sDCfvFxp1xCBo)zZJ4H+L404xLnlS7c3 z@R<}y1*K+3NwgOefA?tVvv8md`gp@zMtAlBrxuFxOzCDyL3QB0j_?v_hQn9w{Xc*VV3a?Lf_7}m5$wvG4Rq0Jd3|uJ4w$B=053y*Z!|E z0NFIRoxL^|Vo*dt-)$_I_2B}5RSR4p;}76ZDZf`i+~7qNCV;w698c{l-Pp!458 z^67!#4a#;FW~XiMzo##Tv-K_iJkwGClOfee}?82y9)!HapboD|E-wV0I;Ik=)QAUdW;G zX__NI10_&fTqCgi_r)<-)otayrWF^ZQi`^2G&%FQ=+u53OiEo>j{0B@oVB43KgKWg z&@K3Z;SFzQ>{fMm2X=IWr6TIPgke61M)V^{L71&)?4MEzcd@cm(YvNy;$zs`S`w9k ziDQ^DGCdJ=jdpsUtFof}J`TGqWDP$7hDRaC&9Q}5fW5P-hehDTc-GBhf`mB_L0r|C z^BC9eYV0vb$x+kqWlMdFyL_mwVzXmN=e zW%9253(=N(vmYX(YI=-#1_lmuSgkpI;{WrY$Id3JOK;4E$7{JxRvlMctie1E*}#WD zK~IWm+%svFopr&6oe=^ z(za_uJL;CMw5Q^Cck?DGk4(1^hjw`YpE06}ti4Z}?T!)HOcRHv=}`eo#%<6&>zPZ^ zf7VL}`sOVA^07T)5AHj>5C2gcY7p?ofLfGAdFrz*p$0tE|Lm!aOJlZ*2kza0%1OF@ zZ^VSX^6yF3*A_yp*u1>{XVJ7F!J`<{5-za^cBkw7J}Xs?;jPJNv7ONQ6~p!SNBsD3 zQG=2L8w7n#R=x&kv&7Xe2Gxs{yR2%C*mIX3A)|ITFX%OyqTcN!ndm-#Mkf~0X2&8V zDk+6}r|7+7c+D-{E8AI*m{I#1fZ-vhT6=3`1LIDAqijM-_($Oj0D!5 z@=#wjL@!IQV^wv{3tytNwcxYo!N4y)awX=j0?N-%|1Q&$?H|k6cKuu{Ht5Ojth3Mu zX1brmL{)y5@sh_dh4(T0&=k|J-*1EWT^rM1p)>ZdpmvBAGl3ajN&WdEHuOjqKlISD z$V%ED8Bx&mle99|?bchfgZQ$|tb(Pa-6@?zOMUB;20l~0e4u%bz=Mr}LU@-Tdmw1gwUWzef5+iW^`0hH(NG&7Y&06i7Lr0uwQM^=b+vZ^3(jqI(=1^U`IM6`X@;}V=6K!vG(ApC80+^sRlhzk(vz@&$9`5`;+!Z1jynl;t3!B zXvsoY?=}1bGtvGl4zzB?%}lv7bjjkmgOuCj$~481LX7R<4YcB3fEwv}h-p@f?F?v4 zp?IDBOEbpGB4r~=tfR^w01b`xrJc_y_2)%A2ZYiV{#3Y8gOyB1HGaTjBFRq!(a%GZ zG}ryr=g`g@_O`b$YcL)dy3dAp3^_w*K~IJ87dCawp+aLIe~X5t%4 z&0i>KKe+!O>3mk9>pxu}nvrjY6m}O+#TX^F$rD=Qw!A{`NYld`W( zQzzB&1izu*@S*jI(LZO|J|P!1?aFKL6h=8o9vQd+5LQjvOaql%=>!;RuI#9JdVFG(VBE6OJn7`LOnX2)>%GjutK}P|1 z2MEp|KW_{fm4V&ShJfM>^DS4$^*=wyy5a;~ig?5=OJC;y^oNgu#ST%nd{$3)8h?s; z^7wxyrwB-l8q9rvkoMBRWP(~~PPL!g2Ntk{m^^}(8bc~oA+1+0DusF4W#t$}-2B{% zMRC=L-@(46$o$xSECVr;*Q?O!2^0XnM6;4itIJ4q#iFNnX*&rHk)y9 z@y&^y{EL*Kesa3wD%y5}c10MflE#4(;|6`%OZhxF3HGIR1mxs>u%6-Dwdz~t;A4#I zMJRck*xh}HnI5@XV@SQ;Ph4H2mGaX|=BT9~X{APZ`8zaW{Z?;@mVP1DGsjV7WMG&I z4R2#c7(?PE)UOrkM};j#O7i1+;qYEUZUP|4@nJcXIUT$^u{sX>eABSBD`{r??l`?0 zL)4=`F|S8E4Vr>w+jKXI*a7=C@<27Jlmqw(&YTRhcRb7EZQv+u9vtZ+KNLlQ#qL+) zefLsXXbjA3$40W{eWYGohD&yU(8;tfKmF^_ngnOc7d$DP#gvOZpos9Yva4F70Af+vq>SNJnuf$${BR12c zCMfn}X$9sxqRf#R95{;&8+wr6(g16dd_dB>@?<}-#@0ogjxq`@o0qSWTooKJ-DGsf zwPOCeqgsR(*LUaBoO=YABI|%n?mTzPpS8P9+{Bt~AAEE*A%l8s7!&!ml{rh99MJFM z-%g9Ke`WYlpYA(B8`cH{Dv8(5_ktQSTLD!F&H$&U8bH1PtcTu#3u|1PY8$(sehhm~ zGqn`j`r}g#3%DgU_z{n&RpB)6C4c8iSMs~n4kjeDBBU}4^b)9A>kjrwJ3f((=1?Tj z3acraTwsDq+6FR)08(C{M~Cl~d3^PtQL&wz=)Pa<(cUz>KfN_O2#)!bv>T$7+89QU z>+j>pA%c|xJw!JL61S&M?o_*fC$>Y8S#Xte;(08Q+2ce-{(y}y16f)@U5V2-y+y2S z_-DVL9PHc=`HkkU+0EB4sBuW>fpPM)|l-D~(2v>_1rHUGH&s zifBkGV5Ps=OA?AcU!94rUIfd9DyLSz-7K<qi40SBMJl(==?-`A53PWJX5^UxME=a&3<4GPee|F#Su$E zlV={eW=recOZ$1A1;f<*5@K`U7)SjDB{VLT-aBRy^hm7KYIJ>=y}wB%m<7<}IB!EaR2k$$Bu-yalK7tGH7 z!`+r6bDdg?MWY=9o*9_3aZ>AH`gwhHIr(zg4@9snRvxj|03nOlS<9dfaaQ#SA5lGv zJP!a|c_)q;ot=0!XTrURZy%D}0_%Tj80}}NA{`{$!;UyV+_Z#t9K>-^ysHewla98n zBsJ<3-{_;e8&Z1vW*zV$5iZ#!_>h$>yM3OWYQsa8h8?8gtC#}Q!%SVPRQXF5*lrrc zBoI zy5Pqo7V$9gXxbu>`Q%I>jR9iG8Et?Lv z`p7byO*V~{8CI*CtH-; z!z?)EXJ`M$I)?#T9kVg#Z}=`}=Pny<_yV-F*}tSMiJx}u2rn}#rL*7d~EItCfI7&HKd{|ZH$B*p5;ippI6=mN^)X0eC>xT$Kx98|r zN1crYe9X$pb z`0@2El}qDg8E&XH{=A{byi4S&570eK#|_b$W}sz)LNsPP+}CoGPu{^v80+!c$ZXw~ zSl%pKVkvE=Kad$MvK$pZhrBTp?X)J+=5(G7Jb|xaQ2iKT9>qrV)_VdvJjtl?HG?x| zxo2AM(Jslqph*8b{Fx7|z{xB9=xWI=C&3%rcuc}s@C1|9YomNzvR$+M;_y-L(D*kz z2Px0iF0ccExNEkYXVoCyOLp|$PA(O8+K?(_Sb+5oRn4Mm@wpMT%)qIQttA1ATgmO5 zv!7zSG{wF(ZoMJ86vPi}<4cWb(YpgPLmH#FHqvRCzb8FnqEz|U9 zIP}px0S>a_?b1)50$Y}di-&`{%Bp#0@$HV@<3f@sUM7S6@Ea%f!P?&lCO7E*n@AM| z^B$IzZ5FNvSSdD7rpP2$qT?G&HnJD*+9NX=)p{3Lq%EwZw21DI5UX5AuGU=gu~{V( zvi#c6$}IOfzG{vYsiRjB!W8o`X*ECw>BTK~*$nv<(Pe?`<-m#$0k#2oZa8~m{OIgl zdMLjUIssDD0uQ1(bMnKjkx{w4%+F?ucv)thMXF)(0_=f%#LdC0aU9R0cSKdw;_;e2 zbRqo+-uXtldcDiN-*=Hk7PB@m?6(O^oc{Nf<)$(X31z2cJag4pT^TvE`vG0dddT>z3cA3J@IKj*okWR)a* zHhdw+PVnp$dyqS`Dzu*Uuo*H%@Q&i0zB8Y_O^~bA9V2H{S;Y@Dzo5LKSa1{s2)#^| zZTlTo5&^%&F(5)}($O(2g*C^wU!EKsfo0 z^ta#A!wsT_g3}=zD?&jVWnf+01!C#NHIv#fYB+{^1IR9=nhdlG&JXQqZMW{BE%<#a z=HOOSlg4EU;aIL^KgNKb30eMTc=U_USK5tuZ7>;u3 zSoF${#e?GCq0fjO(6FhEKG#fMR_&C7A#Yi1Pybrs>9ezZ{{vd|Q_+qqy6xds$GC4u z{&fw{L%AVI7xllbzg;LS-SoC1?SW><-MBnoX9K$wGRFUPt@q;baP*Gd%s^oEKET*uPor4t14TcIq(_z?z-*2sEL@cb-Si%c4=!JJ~KL;yi zbLhOc9?t$bv>TE2%%vP&@yy{$q0O*Bo^HgV_uVI%)j0==Ug|x>0p_iHi-T(uSAZ}c~-hVMC8 zSoTS0?8iU-7txW?0I z&aiFsi(8T-h{O{4Xnp>zwVv)#Bu;d7ROt!s9K>NCGq1#=zFcnwCGITVYMt0L13SS#m2QR)n<`zB< zpiQ3U0>$DXh2wcFmo*R~TwF6Y6cc{n<82nTqo@c!KU6;lG@JOQgk1n=+;TiT?Lb%e zdH_2q<*JEG|6T8sbohgh%$DfuZ4O?5yiOe!uZdc5(R`3xFi_+lU$$8^79pp1D&nDS zm?r+xq+ah0i0V_Yr%nDP(pFS0H7H?bcqk@P$=d3ju&fLR%J9iVZi##n>V35Q!1YF! zNI#?oAJDi)SvS(NHzD}?6FnUyvt}M_!kk^7q2FDTxK`(jHCPgPy--@OPfW$r27SR> zJi?W=&7&}*GHmA8@-}kD(8Mo;g=w-;g@O2Z>^*q?3xW^vs-}uyc9ucor$@enR@Pv08HrCang__Djaf ztgAEh-7{AQ-(f>18KnJq=K&bIcBib=3#!%z`RiKB@~P6(xN7<7Abe&DXfrbXQ<3&0 zgAr2i_>~Z0r2WplaGGk2VPwe-gVsZirbu+a09tNj`4(6#RzE5mm(Sw29y&y;P985b zwDU=iChE{XeCETS2SG5!ylTcw!>$<%B=TBhnRwj>adoKuDWqj1Ldqz4fq0EtEiMyT z;=1{hO;gg<4(^}`w6Q~|TX+}FU+EIbr}SoGFRggm zD@!WdhRJ{ipH#S;yLR`0f;2(dp5ua`*IUGX91m@qrb{e7DhELmudvW1#jv@y`jC(H z?ee@hu1~k%5U@}wAFMK_`ayA*frFayUV4$U?%)Fi3j`q3F||VtG9OKD-3hsK-Q)Q0 zY~G-$bk3wE7duuppAu_=upRNHRaT#n{5u+3igJ){y&3m16I8+|dlyGd)s z)^#M=RAkMu$FRCX6Ym+>eKo@4B{qKH*gQx1o!Lj%If$aLjj@fSw6Ljzce3Xe6t&Ow zFw5+Rxkx2@C1?BhTR$?;6>nVR5*u;5)W4Pn4LO$(e>KbdvbU{YztpllaYbz|;qA3% zjh7KeERcr+JYq#F?Sd9t24Wu&XR>$P<6_mRW3YnQ7IFp=I(XAG<`yM9@aeA5Waypq>9XFnk{k<#&q=X#Y7 zTie_9cRTN19}=cbAl4~~;o#l4zTQrt> z(Fd_rhmE6AMM~NTOf{E>q|LDa1Pb$pvS8D)JfSc+0@-zj0CauueJF$4{gDQQ3Ds_? z4*m`t;VI_|csgpH;75W#icZ5qa8n1S&^9&Q2Z+6^`}uQeifjXa_le3DPV6>EPRm%+Zfy!+At{14`p@a%?!?uMuRjT2;$;TU8%1{rRYL55?H;TU8%1{n@~ z;dDicL55?H;TU8%1{sb)hGUT77-TpG8ID1QW02t(WH<&HjzNZFkl`3)I0hMxL55?H z;TU8%1{sb)hGUT77-TpG8ID1QW02t(WH<&HjzNZFkl`3)I0hN+|KJ4~WH>P75aiY| z$Z&t=;UCHzgADh9L55?H;TUANS_T z)V|%evM}Xh7hwmXaaXwgGB?EAUkx=$<0dYLj#~>Z?s?bWmCf8 z!&h%#5K=NRR(Bb?Db1pMwc);>FbkshnM=nx+s(RQi;Opg2B&N@bf$Y(7N(!&dc2t| z=-k-|!sEk*%(qYg1cvy}57BKLp3g8x#S#DWeF*F(fHlDaP&o2GKA^Z^aNwHN7d^@U z{yqSO0VV&Jglk9?kQ{q*ikJ64TLga%3E;T?Q|xXl$xIL^cHddmq=f%z6Mz7I|5vZ~ z!4beO+{5d~{(CeKuzQ|N|J7ws+Aolmh-7`zCMEeFL)mQw1)xO#r)wxAD>xSIyi4M| z|2rNiF#Nw=gKC3gX)!vmn()7EB7iQI|C(q}T1zwlL2=7JGd=b{<`hR3WJn=$^uS{*c&u6cl= zUe6H(3RwW9(4X|DWq${!38e{xLq1q1=`lkq`Nmmi&f9A7+$DTx-ZJ!9v_(Pw7&1Ot zRBAHe*G2$o^Y)_O2^ zB!SMPhME%mYdNHkVO^2?1&j_OQsV)`tp(Pw$%jeOtCzj1lYJVH6lQV>>35>`0Ji8XC29soK zo0tm{-{g#W)O(FtPPh3l>GsGs89%N+_7UG~yYltt7es<1RwCyj%j7lqX9bn}McrQK z1HWJFoXCuAef;>^z15$@Kc0^Jq2$LFb9$|Z??+fnqN0^jvLDzKNGwC2M$&__|V=GUSg2WCH?fZm+V+ti&l z)*T=H$~Aw?=h2?PfJm>*L|s3T-R*$PfR>$pkMZ)a*(h9kx#Qmeg=1P&8eR9ZqaFu- zXHor9IVus)uO{v9;CXo%trqQhk z^lf6Xj>|J+_#Bh_!4q?Y7cn}`+Flpu3tE3Y_8WAjZtmqrZDn0`C{|HDHWS$s$i(#Z zgMUD-?mag4m>Yq2=Y;JQTGmY>51bA+KwkzW^23L<0Zs_4pX2j#DgTtnL?YKZDOPvu zCD+_{9`b|ck!KQvw>NL(hv@c;>de-4Z0B)rTdX-}j0`!R@I>nd^|?29H)?%Ok11wRxvAo~9<|`@OvMhb3|0-KNfJ zw$8%Xsj!Z#Iun^Ay4o>0w+rujUO|mlM;amnI_5GBRj^C9I7MTa{gYLY$Cg-FX$iUpq^#{}wqjWl`f4MdN;v))(^|KVOXRK!Gd!Je&>BAKstwuI zoVQS<1^O!~;CtfxkxK5B`9*zOR^mcK(O1^*57?OMn0VNg&pM3XlUZUxj3vJamB17i zE16lnhz;EnE1H})7uGsN7cZ;>AIv&AIoLIC!fGcJM{4SyU2zR=h=$m3ngo|*)11y< z0QRGjO*#(4*I+RrCV(*zU5I*I^z7<1Y_Tgs{=%sC6;u4Vw>1RWx7!)}nX(GjT>#Y97|r z`G|_^FI0=G>q9GKtJb*e^gaLNebFcu=BD7&s#`63e9#xLmr?ic>G}`ilc*8pAMq8% zOWf$Qk#)84-ZlH~?Vd3e-RSiT#tFbD-3fw_beQSkBlu8V`juvM z@J7T7EIaFSRK4gP;c!EVPUy%5$_thsNAf~1;0>C@49fyZ*Jo+(-!_oyh9r82LVGB? zN+3PB?}fepat3$p?024-@lAT2A$@dbV@yjq>X=8A6>DZW@wR8@9_SyP$qcQIxyidf zMpR@C8cP$!XrY#1%(KLMF=Gr+-8RV;A5lH5R49N}`*Yok0HxB$vgtwU@X9qr2tg=vdTJWO%KkSXSs2P#RC)<=I zhP%t3bK`deiPXr@2i4AEH#R$G74f>gL?^CM5~+Twt238eap*74a(mAb3yWx|(9D8M zSGvWxh4xaSbO2M#(HA4z_7{wdZUJ?_S*V8jytgu~2pKEmT+Gj{p^uosX(CO~A{{O! zgu57s3Rz~Hh`yTf^t6FG&n>Jaa(E{nMImDC?(zlt2p;TR{md7yx96|9;^)|6in&may)bh|*8681cIDbgbUTnoM>BfgpE(oSs?=%X>`6+0=VV~}MWg!&u1oVQA;R$)I%SOnz zsK=TTUW-vh*f||4t(-zFSbyHPP))3)h(+~%A(be2mD_sYH*?U6tpgGHB!!OY>)Dp3 zhTc8ndVgP%EV28-S->?J?S{VXA)VekV=gKy7%ca=Hz9g453)%d)nKlXf{`QShsuIX zSwD-g9Q*y`Bf89I7^|jF*n0qXR}`MtNj(ma=-~)g4}{9U&{dhW#Kv+a;swoyBH3YM+AJr zKKyZyJ-~!D?*Vl295il>2SUDpJ@;y`?DeR3#?Ghg=W@`otf(e){)DOqtdj@j)syP} zbUZ8fuv}{vr{(hl(YOV@mOE6b>GdMfpQO39>cFi&Cu)=jUMmT2_!O`84*f$ne{I!I z_S8bMhtZ#V9;6VIibCB-EWx1OI#_W04qO7p%7g5P7~^-Vyo3IzCZE01@rbkZC%ZAKzbgOYfLih4wONZn6vJkHJtau zZ-A%N@W!YLrksiNu1VQ~72}Xg%;@agM|)m+T3l#Xhk=9M2hl<-DND|9F`b-T41$z4 zVcEGU*-(YA4~1%PI18(Ip9O4~JR|;?yA;3}$ptkU4oudfF%dWNN%muj_|=Thn`P+Q zQGdi#~f==v%oZdA{{ z_BxxkJaR@BLZ46*aTVl>i8$?yG>i9|y*17PKaE6`aK%SX;FVy)z03A@SGS29pi%Hn z#Sft?vtCg7dzEtkz9>Xpfz@2V>MFYS<^kQl9*ORu-2|&1CSl&>bi2k_GILBwX0kEz zHn=vVigMbEv90_>{J9KF*GQDdNL}J2jH%|grQ4$yr~mG9au6hxw?5bg#&Vy1WEWr#fT(NZFn>Z$9X& z3ctzH86zF*>!m*`A00%L)S5(1VA^fVCF%?iH|!(R<7HivM#b zsw#^Ug!KlQv%hU9D&wCw=gB);eF1CzT>zFBnW8_(1Y4lQJIf{`kg*F2`AK_9Y@YN@ zPgg!vMwHxViJZglhi$c%hSp`DfAhTOb=U8$gLreRqkk(v6sQYg7GFj`@isb(uu_;i zqaZT+2I8iD4iba4wt<~rMrKfv%~rASw&O_8X>X-l6FKm_f=#IG&B!^@KFq=-eLLoL zqkhNL_??j)v)qd(a{Y8iwysZasr4G76a#ksr$2XeDy$IF8gLMvCw!(r;B}Q%@|icf z8Ymkzrk4dgh!Axw9}-9fpPEwYVKG64G0wNM5eaD5vpbyRCiIh5{r>G6>$@$D>WN|A ztN%_-2|Ab3^V`2yms&uX*=k0=Isfm~bZQ({6qd)0Ph+<#5O|KBJZZ%K`u-f#d>*M{ zIn|y{=BoX0&q-Fr7lDGS+&?*$#?OHOPM>aJ&OxdaIfsSayLGFdfO>S z@$Dm`XX+XBoY}21T@!?{yymL&?bzO6@ zM$uULO8iB`!feAuV(z>8NnQtKmBQ>>LeP(b2@?hMxa+jp0(xfp2F>0h(oh3Q;Inoj zYl!Cb{0`NjuO|lSl;v3w%C_<0{Q{lTzcd&4sBwh3*Dczc3wvRX$umww=55p>zn8{9 zM`ZWcEb`bGm9>CbLz}DvvZXcLNWK! zFwdPR+PFW-^tX-zA5cZ1Mgy!%^MWeg>e!=u1z@mkBh{9}LxgELJ~_mzi6<>FHhFFE zdp@y7@jHhQ!M>P5df!v}^pCM}nw_a1)5oYx{Onf#EqZSXre>}4box)De>)xwo#y9OCc{4 zS%e3^NNkd}3#BuonpWHLX5Bh5FiF2tNw~4W zulr^>EifN_<ssosf z;C8Wp1-G$rif~yutGqgY_?VXZd&RFqO2y?$*zhP)3D$^%iLARep|b^Q=fEkwt~Kyc z>{|{Rx|pmHjr8;G`We-FVI~=~?oZ$7G^`mDTk$XR^U^#!O`N|%vL_XP!t|fx>-=+f zu{#seD1xqt>ji5+A&19j97Fp#y40OS?pK`?B8}TExccete?ROh0qpUrMPn;>>z%3R=sfY=(RL~bwu6^fu4-RcAck-H} zpzwg>*OiZ}zRMiP94Cnq@Gw(|=Ky+jG*JG@t&bV>1BwNPzc9g-JN@{Eji}`TN&Elv zQf?4AewwXILvBy7oGquLgY3y*Yi0;@_u3VS+HxfVt{Zq{!G?t4%$p=ZPnF~1qOxkC z*e#byG}ksMgw`jBsruN8Pn$ra7gT;3Znkp)|5~3Ys65Qd2goZ01fQNfancPpM-5wX@z$Niwsjcsi%*7(%n3$z<{Y^TwRYvpCb59}W8 zr@!z?;QwcbLtt+FUFz+QOsHEx=`H6u=$<=F1I$*N_kB(RQV_TN#v3jP05WS`e848j z$MC}RPQD_IJ9K&{J;$ut>qPd2laa3#gEffwFY@%Ow&DYSd9AzVI6-NA^Z@R>VoQt~ zAFj(889=Q9w8Ei4KXZab$Fsxmdvk=w01l-G7ov|4DY_Z-+Rfq3aC7y;icaUaPR$+? zb9DAQm4D%+Q~RbCo4(rj%&^@X=)Zj8VCZ5M0IJ>L1B7ZNtRl4$GQkbmdT}IJ@xWeY z8Nkd$|JD0F4Z|H3+q7B7zQc2IH2T**qJHj~f{cPV8^@frcuG-WNyY;0Y%}r07Dnkl z*DY14Kbr>p;3%|Y!R7#Nd!-Hw+xz6<>&gaGURRa5TX>os{T*z=44_y!oIB;A5s_Ri zM!lMq(MW5ZO#Ao^KQz?09Xhq6b^5URslgx069spgjsNjW&M1xh3OID_%t7-CpnZAR zqwjZI+oy&>-89Mr=|$f^CxmSKiG@Mr{B=Jn7(fULr5~>r<@wWCl{N-Qlo82=vW0gm zB#K)dM)MqpW%Ta#gxKt${Xek)yM6y98*ui40Vfqp?Z?2}JdL`+IZkcz)nKraiRNu7PGdjUOtxFp!|Vx9;WZzP^B-$5~^BM- z2^BqxZH#&RwrY64m5%#rj*wVzUZ^xy3+5_~BEQvrZ~#0zmrC18t*mwEi`rwI9Z;-y zJ^tF|WrfnW_*wAG1U(0Eucs*KLA2>}J>U2JE82AmO4ES!3PxWRfO=ju2K%_cO|2x;Yapk zUz~d5mcR}O3UXM$adX~J-*Is;h3nF+O`#P7W}hZ(;ly&WjgI8nr4Qv>!C8%%HYe5apRg zgTRXW*P?($Vy|yMv}>~KsHej3kG#yv_i2MYB{h?7BEEH6oE$hQj$gmfGzX?m8XxXg zVj+a09$Qu26Bj_?hF)AAqYqndAoi@6Nj|i1dGtg;(xD$;+<&nXsn3ns{T~}*NYE!PKBd$$RU8#`<7hE;9}vLlz;R2}wa z|1U~Uz{O*FLs4H%PV=Z(Ne7J{t876r=+N=W3gbBLPt9;*(sLeu)Hg*F z_}GoE-%CM}3TLV9J~U}c{ewH?;*JnRxU`zqfK5cWgOK{0qrQJEzqdXJ;iz522H@2eu)m}avnznu|C5;DC9sw%es3>YatSm z_wsdy<~aUKTixjII4Tm65y6N&@ji^{q&3q?)6x{!(U)KKJ1n2WfZ|8GpMvaWH*=pO z$V!c1ewgdo3Y~H6E|YVjzuoD(l#B#MrlDO&I$-^|^vVM?jG%7u8@IP`WuGtFjr;O9 zB5n&2k#OitGZy|o@_c)Ic{VN0#~SeHsW{=^MCCFLf`o*WPX|VXN6s9xgM(9&kisKUmB0xn(CqW(FOuP0KYc;_+sqKx5G1Aky(7@>r|L%?pN2G0-y8q z(n_wOhkxhbxMIR?w6Qb2d9QJFcj`WMgU9x#UD?*|FEZT6@X7MyR6@&cVY7?%fXw*Y zq_$aRV1G~rp}-=UZ8xf!4OCxm6L9Dd3wJQjteYwl{iuJyL~>brb@xMGZP#Uuajcr_&D1|a;|#7tPBg|lN0RHZW7#9) z7fuE^%e~haO!cIq+LF$)`@yct7_~iqa1~yhB z48m#o$HQqQ66XEid~efoxe>{5MErZp0TI#P{@ji6KJ8VC$&>WefNEEKr>UhR%i5!T zMySn`1V32n90BzO<+GSsw~^yi1?UgKS#7JE5&IFQ<=xe$$#c0_PCdX z=cfoxCn1&LFluWqiyP4s3T;jU??ZStOI!l=hK)V*7#{-w%yR+G|{P&DgJmf6halu3mTO z#(VBY9sG~4u-7FKDvseY?CUc7v>LC15|KeVw*JNM*x+GScfR6d1oTe^Iw^K%^yPw_ zZ8wC`gc*~iY()Xtj)B=FwwX;fizRp0jD|3z%UMDBmkb0a1+*{>k}Oxl5B3PY#nz<~ zZk-|+xKnm9M?Lc8NRPvSlhNP3&cRAFWd{PmJb;3ymJColPZlUAt0CW8nEo`=3jIbn zT8jIMqmhBuC~g{6o`}e#fy$7RD;JN^{=$H+7lYZSk*Y;1g-Bcpb5E?&H&~=enp?_W z@yX~D+(?#`Ph$8FAwkFzb9p#gaT?_!cJ>-I0Q8rDP2#HWRF(VMQJLiLQ=vl4I1v)y(?1-+7{vX{m!wKOF5Q zrf7-br?)J1C6Y4=f?8PJXBt-h%4XsZU~Ktu>ipa&oVr+1nG=$dwTlOoyKl6em^R%s z!_&U_U@w&FSWP)Y{g5cfL;b32^h5LikGriP@4moQay-TU{6cD4QsoFUxIMd#-ChiK z2O0Rcqi_sjN9@K227daT2GnlxY9G`5qSqNFWtaUmYImVhGEwJwY!lDr|A=T^ce|p3R^uW$^w0)CQ5NukVcs5_0TK#q8j6n%!Z6jR8TF zN8gpQWUCx0=)h;%V|t2;iudPdie_q#V|VL>X8oR+g!Z>!OEH$ee9g;%Cnn5LqPu80 zqykS~u0`ew^HGdGwAy?|T$a%2gF8TIl>7L|EI!U3ndSk;r;&z;F^P?`qGHL0w^N&z zc8eKFw3zpte_*O9sbVhy3R_kpcdgGWa0|UuLrv~VFX!d}>17Ky^VSNI8Y|`p>im($ zW@O=e%vijrQgDCFhJ}Wrt0FS#DjfZr+X(5Q=K^49bW>us-HMGQn=oe#+OCrbPy z)ljj%;wO~oqP2!}>GdnnYjmKUuFm}QK5*7Ov{s&M<4Rq9G96srBCtWMOgq@1?)Md| z`rGnQg0ez8selsp!L1l=CsgHt1a%C^V~lz!7IDD>O{nws!hW;yyER6o46Ie)+p8=Q zE3frg2WeyZ#Lvyhn+{R>-{!#C+M!DJ;+|(KO#_!H9r_7xeg)!4To&=80zFB9BV}$f znSYR$Xt@_L2JPs$@=SX?3Qg!rsJ&JztEcYZ6%g&j+jizSg_>0@l zzl|a!gAX}kgks2N9Q2*|;IjQJlMM1=hY1=@(7$l+`0;b&Hr$=qfdPsGRUDx(D(M*c znNl4l@WNBEr~Y^ddpPNK4!A8U9nfVI$HE@&rYL<1M7<0M?_M|4d*jwgWMO#uW+?$K zQX#o3&$96a;+*SxL`mL~mXWKYZ}DGbqA(0BE^#dSZ5e%zy_?_7XhnE2f|4-K>drDa z+MC1#z8k%{mcK#9pz!$5v20jdq!#hY%KzNmxFeUAl_j8W_{XErtk<*95)eFIUHw`* z>qqUMj>O;VhHjSw+&tLJFYGxk2sdlJ{7%($cECd8PqPjI`SAe(_;k>5A%J53k|TU^qQ4msJCkHeCYq1Fp=+my zqnG9vlZT9Zz12~@Tz1Yl_wnHK8p%M&d$xWB18p3jQDxcs28Q0I7cZug7EdO>R=k}j z<#&fx79Rs)BiBIu&f*`AdG;+qiQ5*2b&Nds$M2R3f^VF;a2JeF6UGNB_pyTml{eMz zgS)az1O617zS;Uu@dv*uDK@^x$9#T|pS;Qtz4H%XoQtf)} z<`4Hu>5n47$BXP6LVM2+&J-j)eWnRyILGP~m=%|7`bd=00ctUR6i?ld?tPQi_w9$Df1Wh6lEYi*~$(n^+h>v%ZAILWPFlTYns|UEcfEiq*C`9`wr) zgoF;x!a49RZf^Stq;MUfvJb{L;TQ8f{U_^7xJ%}3?t~(btX89U{PF3X^sP4uPb^N# z&zeR}-P|{;yEwMrrp<<3W@amb?pEE-3_OV@Om66UE~mI7bdsB^tFbrM*D2)Ha=e?I ztU2ujE23j~L8d!y&=M@gMs*xsC?FD>3O!*XZog58>3}9KpI-kZU!xtt$r9J%mSX^j z;|VM<7hKN**&0m8xCzVPk?~|z5j0w%p?a&%QYfO_L(6~ZeSS^)&9d(2Ka3vtg3!&Q zzojAFl$bM()-oCC&&R4RH0d2*_+))}U|?O43sW9KSS>E=g(7i&%~jsR;O?0GZ1MYQ z>M8@>bpK{<4XS`RMp0@l#fw*kBAqMl-EFnYf4J<~Qi7i)spjBm3CI2$t+~n1)lq95 zD31@IEUig|aM^6O?mGuKP_Xdcn`Saum5Wpm$#;NRFs-zhC$}QG>q2qja|i~NR6Xk_ zM#6tYn7wp!A5XJKDSck+nYo@7PO=E$A}e~M47F4}DY(?0{16lubU*hy0M6=PSqeKU z2KZ#@ZS_G4O*a&5#1_!{rRyX1%&?wON=-*!f!m5R&0V!H*8jxLGWcl7Au% zM9jdpgA+fgkevW*rQ~*PW@5m*e0!gCqHZOArC_b#%Lp6jEkicAldG5WEL<0NEt@=S z8!eTciaECWzr+%UW1e_>*5|p9b^@zmj-zK&yP&}G7^h8UJKBSeaPlNUQEtK*C<-w< zIbi_vi~H6N{WijQAmi3U3MtT~aNmWtX_pIde<7t`+GM%jf>! zH|%GlK^oX;B48xB4Mj5cr?XK$J8olDuQV_~UA*mzNKq&d<0WT&)q}cX+D3Q4Kr*9a z{9QK)Md_iSJw2g2Qt&e`=?8--WE(czMS3e%l8SsXiP_%?O}K3QFNL_A8OHI2K>G5D_6eeaH)WY)~8h z_wdd?N@2(u*77u94D?^#>-9s}A_5lg)n*HzQtzW}wMm$Ec@$|={9xTYV&H{zR8fgD zWcMz^oEhIw-9-nt#5_6Xt}&aM=wGTM49^g6rsyy6tubLmh3Vn09qz&Ff}8RDTibwj zIY59qg#c>jg*FUW%zq}7h&MTf^y0}0P{oG;_x5Wwb>X3D%U5siyvjE&2IAh6#;LyTk@MK z&Ujn9>j8I9*G55K(JmTxU}JRd4_r#uCGDawJRjAadT7<1^7CtdK=-%dOw<}L`Z5>p zlyf4mt>zwHU8QwlX9jkow>_iayRf~lGmJZ_OHUGGTFrDOUrQQ<`_KO^ll~GPnK0b? zY2b_82lH+E(z0$R#v*BV{9qVPf~kdDz8G5!PJeCJ9u2YwL)~dNj>~KK!8ZsDQ>1!E z3G1A9H*dz+3z6)nH5ItMIrfJ)la)4x)C$Tzwy^;G32L_j9$K=~Lm7&AKY zp|?sP*yN~RHgR=zdTetw;+r(JRmbv6MxUOIfhCgv)P<^$95DLw&*fW_N?k>{WOJl^ zJJ5wC8@O z$!?ms-YV+1H5L3XMhhK7I~}_A#;I<|-b&2mVOj)bR3#uB^)``qu>!S?1>E*oF@JUA zljLn+`)RPMN2h3Q;4N%UHY3{DmXDeJ6){LZ4%`gZ(cj^SL`A33QM6P97s0!m#g z7O%Lgz#%(^873JKrg`5rMjd94=gq}`@goFoL#W+2pTi%oZ*F1w$^u8zZgzk4${p<;BO0f;w__4cn3q?K=;-nU#IpnQTu9mw|6NE=f~Q}EEVrB+R! zo)HR{d-2{C<`1xj%<5(S&rBeso+TULI@Gkd`=F7+&YUMVGL{`!`ZOqxhR4g#5 zy0itBM}BL>%$4cE-(B!6|GIlJrGhWz&=dNGrwks*ieTmDN9Ya=p`afSBvF^LZylFD z>3&4F;admGP5?V;*Lgv2;c{{}jogyF*8Oz!eNt9V8L|yYwo>!Vx{h%v7K(AaYro6R z{Px|9aMwv;--1b{r;(h=imDUjg&WxmB8qS5Q5vrtC!DSGI_ia z#!r(@tv; zm-vY`lkwuKPDc(eFYckH+&2vr6U^}bc+2r$3-~xZ_Z+-e|<`0$xi!zcM%tl zui}1sJ^`71Vp$qHJ+e?-;_=yzfXxMY_w8`w@>u0;S@)B< zL8)KWu&p9G{;svl@ia7xHjzEekgU6FkS=5wQ+W$ushM*F>TmqNl8LlJp%yrbjc;}Y z{VBE#dND*xIM70Dyd^=)(&8vzEKmm*Xl%%GO9}VGv3P!(-Z*}vtxllzLhx6Kvkv2P z-)ZaCb|qg^{^ducXP6~Bqp%9BaHtNJ*Gf{P?k&pe#XaS|cAh@=9I2~@RnD~?64sHH0%C99Ny#aPmu@lbX_UL>Hg$cAi===2Jl%?v{Zh-Z=}yi0 z&UdLHjs^9YCj(ZDB#~?%AX~D7q(B?o-n3Fc$6hN7Ok?8hsyM+pjxxW=izrfx6{v)Q z#`(1Z1w~u~f{)vJRXKc>&t?L*ql#yWw`q*$>YB35KRMl;Q$#{a+p)m4u@1B|)mhBK zLD;uFsIX{f;Wo90!`6s1W!rg1TVtj{L1qY=6dbH&@}LkbI&`~}*0h^pTRdgJhH>!b zYVgW>q{?89&G{Zj?cAIr2>$JIYjj$e|a4x;)ozZzu@%>3uvp|F6^&lE*TU8NGU= z`6)l7wFdMXJ*b$sEg*hO4?BOmY|jrHMuHe9&pYf)vLm=Cet7UF z2B4k`@8!8dBl^t|@vJ!NcRgyyhvh5RN|EAo%RVOo`ztrkzrVGRm>D64IX zKq2z{w&vM23RWq0F?&bAbkkWvT!H`!SD#Y#m7W>g+=kdFpaG#f1|~ zKW!qDtycC0PA{c2gDCq_Pk~?92TA*D+fcd=v8%u5|8k?uxa zu&V4)dt|(F{6T*xpgMzX@eDFoQ8+XKCnwW&5{?I~Z&wP0Y0-&7JgEehG{B9iw2tJL z&VfnYdEw^;)WNx|siW6TEFX`hQM4!yl%pfqTWw$W|3ipma^NtZe(&%;QSv%_54~>K z(_4#u93bFi`UUPITFwL48xnSyO@r)+Y9yA@J|Kt|$$=TUvUUXLD<63l$Ow$5pa_A_ z%7)3wt7M49ndloUoC-nD`?8g@OgcUq+MKFKl67aVOun!`$&XbbJzZ@2uO5@p!sRpT zcUijf)DonF~lUr*eKi!1^yP+I*YdWV77Xyc<(45D58=tSl5=QtmK= z%0*fqoO-K)g66zl)jE=&c~=L>B*uSjHks8mnCfBUkz4v*a0}ht(v$ma@>!dAcpk4E z(I;&OXNuMG>GUmMkFp^%3M&Ff(6*gi0KVe2;MOZ@OQ<%;EJ7Jr_iGBQ4P4>Uieot?GvTNLZ$^ldz@W+RBmfXRDu1Dxn~p_kROZJNxrdeOQWM61&i+F&x`b z_4@vd_d5`?tOpl1^{AA?Qnc@rS1uJ8@jDC0bg4W8LbNa16z+U`llD?oYnT4btST{h zkn(Sg_u_44k<3vUllt~``Auvn`hYeG(%#)M(JxA0=WAfs#t&C7N#8j~H}AWVc&|Pw z0^0)YFO*=w&zo$EdrB6Fe%pZp(?r4M04w8C)8_I6o2v@qO^)(%9JzrkC|u=}*p=KI z1;lw(1FwU}3?#^K9HU55{mst@3YE+Ampg%2^M^XzIAL}0zyCKDxv0?t0zf?@k>TpdY-Aa>~Fu$dUq^)<+iiRv^b-8nOZlfia}k z@`@-i-aM*=amU46Vzk-*8jZh+ARNSZ3MX}=R`2p9%5udX)io#eG2^7Y=?E2j%c)Pu zs;k%Gf^YfKdGJzqFLg;C*$*<$`#}>9-L?WU&6`N1&1Ox@*A3My+3C{G%rErUDT3}L z8B0#3haTM7yMNYZ=IM9Fl+J&tZe4lPYkw)B z=>pyWG~wiaa9ffgJLw^?WsuVW?9xR8EtK&(RuDW@P)(!HH3{<7o&~nY=!N>lw8z`( z+YaWq2Ud2*II;a6TrB3)7pR^J@w*qllcW($Zwv;{(aE@oK9LlSo+_)J%O}dY90p~> zffmE*D-*E0Ib(I`EEw$D*&MV;mf9S*0)<%gU~zJ}Yv2~*cy;`Ma(mg(cW=20 zqo}sPV9i#C|FQ=>b$vB7LSoNCkU{c#T^2zJO=_1Aec}Sc&~jjnmpD3y8MN8fjHM@S zM{_0lsQ})Vfge!0&3VcJK4Q9hhMMql?hZE8p6nWgA)i(du=yzq*=T3v&wU%`iYBbR z5KlBKl041NwnsSeiO%E=p!MM2TJ$N0h{Rm<7w9gTxz&3G{W<5!82udcg~RTu=Nj~u z$>>4aQy;Li`78{l+`qCH5ymR2pDALNi1;O~{~TADBRN=iU1&*^1QqTyb2_1FC+&_W z7T6w*cs9Yfm#2(=wR-CEaQ?}zhTX$I>Qx2VMntO@oEH?pwvpzas+8+siqt`=I( z*Sp-0cXGOa^B=`ADhTDELa5z5e}BqpMKI=YuTZlMQ*+^&2cSIA5)1U*snl=~0lD13 zPX}?5Xo&*cA=_K^h?(E+(&d2^QSiye>iVoBybA1b&vq*p%Ll+i1NG6&<7M=YkhZ{N z3Dcl`0-+hvzd~R)s_Ly6DC36a$e^Zm_qPX0OaQSX zOr`cqLaYvaW6mga`;!J>r?VsPyv6{i^Z@Jmqa@2@DM;5Xmmav@k_5xK1+5n}sl;y6 z(}>^++{ZC(c{y&4lmEa)pM-ZQNHPjT%s_`)M;2;A?eQGGtW49FvKV6Bla~K(?BRDcY zm^!}vj)~xC5Z6)oS@yxQq6qe$0ZNE|eKCFkgZ zJ>RY5r>7Yrdg$NWJ7SVjJ~?jKg;;Yuc-ZalNJq^FHIM8*@62y4UvAP}%QxEr^#r%= zpdA%=^20t5x5q#3Vw5DHvI1Y5ML$2_5lsD1Tm7vMtv?H3q2uqGF~ee?Cg!}lC%(wg z=)%ABur3!j8>Li}-MYB3_9oEH9q5Zd4fp9ncbW1yq2H8nF%x1vEwY=LBp@24G+n+o z4%m8rJ`Mp(77Pp0rrKQ}$XVq@Byh{1Z5PC}Yq?#PSMWWY>BU9S5ojZ=UvH_xUA$&4 z#z;FOtBx8;mAqbtZe{ID1lFs(O{RgSY~2jai94GuPZYudb0q;%&pSc+=)d+I;(RTI zCNR$jWJU1P3U*u@rv~E5f*V*5M#A4gr}}r$op1R#JA1bTQHWD>z(Qoi3FN)qdUa(*JHM4jC6*D(GJn($d? zm%i=_6B;|>RbLHolz%IX>Y|! zZsA)kTO@C>)$PycES#Nd4YoX%Vf^ay^y#hlEG7a{&@efI!2{+_OIFfsZ{WZ@TR=|} z6M?x~Nagd^I&Yf;{lp??34ECb)?*pJyo&dM(ePxcN^eef`zu!~SsiNXmqP_bBR0>g zDidT&f39HH<eVH;t7ZH;vPK{=pwfyCm7ESHoZEqEcc;Iq`5|B}l~Xrxo$=HRM&{~nNasaM1mJdF z{BR$5bkKQVD+GecX9+YeLihl_!Le6%sV$t=*`??uJrq+BlaM9q_IEbC3<`Js7_uw) zG&#A-618J$Gcq1+dt>OdP1ScdY2_Z5+z5yRBPLI7ig(7hmZ|6}iYFN9pAY-*o~~`Y zFbhP%d>3B0AD5YMPXWki#ayi^u|zgM^6uT;q6@w>Vn>oi0q1Lxe>_uH5|odm;w!$p znI*eErT-S7%_#G?CoXX3=^B{g7i2jSq#F)&a9;U$nh9p_cu7{hwU-m2zJyyR4&hjPAH{&s z{vo^s`nbQ(!8Mjrsa!t+G1H1?gQpCC&%&1ztX;mmA0~U7-W}hcfOZ46T`_#OMQg%D z@c~1Ny}(wVX^^~D(Sr^cM^|I;(Z(mzMk&SGK_B=_4<4_caa8zh;6} z<8e!rZ~FO?5uL*-AUPin=81ye`)j^a-w3oC1JxqY!R^4MA=TDmir zbEoVE<%z+*=r}tgh{@ah_)&yo+i~>Z&J1#2TrvMAT z1QCmY-2_9+t@X(}fx!WK+rA;Z6NXeXZWClt)47_i3wdR8BAPUhd=?Y`?4W=TAiUn& zr|?-V-Q~Z0dO75K5}T$!nNc{o=^m`?+~}{~lg#AO%9O3Yqv}2MwD!UTGw8JftuH~E zFKV95Ft{CE$poom=K&@l{C-(?cNrZ)u^ziRP{BT!QiHS(?BY%KTh4j%J@~K>v` zIv?F}k*xv<4s^KiVF1UEQ!{XKAGO&7U~dZ+B5LDSK~5#*1Df_d0w@xi@GV!Y%i+a3 zl8g0!+nIQ(h*fLy-#QkA+(lbF-w$Jc$22&zq`l!-p}rOIO5bJi8_zk*_T-}p7oiH$ zLoYO83a1c5(vKZXy@3JWa`#Q32_MjaEDIDc6MFP(YmC(a8GSjbJ@O`5g%#U{j6kZH z>7ynWY4?~PG4BI$2wE$)1Z=b)A0h3+FieadkQn71f`1s#bi?P{3m`Ksl$ z$2Q(GQF5TSk%$x{v&2BxsGO{-eLCq?)DOIL(sLU7ksHPVa7?aVJpIhx!abb!Oi`vaF~Uf;%; z5q{jHS`;|Zh-ED>soY^X2<}E~6?f3A_{9QRACW2L=TBB*K&Webk}D^ip?S{rtP6IJ zpt%3UNZ;Z&LZ9Jn*4Ba1K{-cvS2wQnSQUz3@2vqU*IRkl>42Xi0nZD_-eCDYZ5H$q z7qQs=K=?Hin!t3m$|!XX_QN=EhqtYb+;MwLY?Jv|%985bS5FWH-^9gp9J*ur6A>~- z<#)JuaqA15b`Sto%d2a3k4P^?LCnQKgEzfl7O0VJ+kNHV9%u*?%mU$hn-N#l55NEX?9t^d zsfc$qrf)mY;x?kqq>l^A+QGA;9}ucLQWcKgVCF-yKR0NezDsCVx)P5f{8ZrWt1M}2 zKI0;X#*Lz3Tv(fYRw*uit2t$v9My|9{H6clgw#W(E(HsRh9(}deyDx$q^%h|;*ptP zC}Fvf`8au%uZbVrQb*l~6bzOD9HclgXl2FAt$+lBT}c2(?R%>Rkg;20U;-Yhz%6NM zZ9L7_Scx6mPdQi>7yaLX%)4qSl^wSXyPX3iI);QlbDZY|S2MZ9Gb<-Y#seW;^d-=I zK&3kklGd6RTjt-b0bo@>t%x{OQ`4GMMp7KC``!3cHBWjc%0a(2Dr(9bKroYeE?U0( zLqN{T( zU=v!s0$eXc?U6^rOBKqSV3Oi+f{HNOf*dUZPb;h=ZcKyc=#LMlvth|mRQz(0?^pIj z=*7+=KOExoi}L!GTmOoEH1uDK_$N#2UPR@HR>O7aFKuIDFm*}Dp;In@QR#8V&fR3I zqK@_Jf?*!i9xiwUgG$?hMdALkfOR!NJ_Do>cWi;3zf(pbS<}8kDBc1Ckt4Ok@MhC% zemV21aZzTeeQN*BY7g^zYKCEF4>R!27m9CBRB5KxYnWmbowW^#3QE;X274A96T{n9JxM7Py>CUfVPg%*l{YA ztCA26?5^%u5=q-1!3s8~!5SR|3xZDtIF2H`TGh0Nv%LY!2ax*4FZMYD$l3^R^v?f= zcaE?av%S@330JbK6pq!pNnk-evjQ$g_YF0sX76awgIlGjB?jO&4(&Ad1v>Z+{sX`x z5+47la;H(1KsI(aZ`JA-Be4vsZqXLcVApB!rwCRh?F_UJgzdcRgHa!2B5(d@vKIF2 zJsy!<3e+3?v19RGTri%vlnlwrYtJ7yskUR$BqA#T$tP|UmqD7&?v=O`oMGG!g*iVs z54MT_AO(1<$6pvZ*97Sq=YHHm)Rgq(uKrhdWJ?8~E!i2W{+lOoLZ%^KXscS+7Mtv< z4)G=s2@0S&JhQcj&HBcd69t>3yKoB|5hzCV3ZQ!LTw=j(YdZ%${#pQvR8gQvrjg}wMe2lJNH7qBNNV{Hk_ujv zK#`Q4uMAhgLlPYty(mJ(4#Lk@#7Y{=5ni_9{5dJ$^b^Yi?pqsZsuWYhtI~fCUV3Dq z{3UdY{IMJ26wXMLeB*|-x{P5;(SWJw+zOM{E>0*wly=$$&=Ji1p=XzIr%*l(AYD)F zFt}~5w;{$26#^1*ZA<6qr{8juBrs@G!0z=!<`s*RCM-)Pe4;0gF@v2}DqLHGluVNI zA06&(u30|U8^&Nf55o(A8^mk`f%loECq4ZEpEw>f0G6+_Yn^cdqIR#b&O3Oao(lC@ToInrloVLQN4co{a$&+T0TfuZUNwP?5*}Bx z(fFH5@*PZ>6mHsdeK_F%pe~Z8JrW-|1Pyc&!vt=MWRT;mPy~LOyW)PJ+c|U}%oEoI zp-KF>0Bkksga9G_31d2fwyMX6c3o|H;Ixb{;TD1(^}h?SeMUMKtUcmq)1fkz+<({; zVXIAiN8C@?x`v|8UTGd$++OQd@55oepb(3nFp-@!(FN@JM^hQVEgoc1m)WBoT|ROP zu0nw&wF~+z3inz}i)Ic-01NhOZIyxBIM*^hoQY7brWE+~?elEAQ+Nu5q(Gyb%=qrp zdmE(KefgQSXDEB&!1`vduqYb?@wU;yGiMh=&55 z>1om9;XsJ~$(b$e4?&^tC|iwOapw^2c#Et}`W;Z*i72I~EKkkIV!6ZYh9-Lmy5d~AT#OLzdJelB3Zsz4=H4rtk z@!T8cGm=mUU6P3B%;yS4WGXH)QK+btQyRLl7(D51EM`@k18`M&WiCb%75fj$(GR}n zRcEx#t^jvCrXddJRiN0u*TY`}(>_5-pN<{Z{dr z`|n>KEszYqv3Z6=yQ*af<^wdm3j~v?)fO_11{IQ_j}E$@81^7D!5GH0ia--<%~$v% zdBNDLEVw9GN6G?qxLMJ!6X9l+@~2h8V@zftRe~+Eo3Xjm^t54ZVTB7xX52};Lnff% zzs)|nk%@&uKxXCgHU|u0t24;JZjT`Z+(4r6ncy!ME)3ZBF5r$HKPbP5!~ekgts%P( zUs&p`-Mi)-Ywo%n76S97iJoF3j6@9;11O5sm65C&!}fTk){RwlDCNzuzgbBW?g@V8 zE||18LFTl!p>B*Nj{<0#Itd$^bu)eM_!# z2IWKrhzKTU`M2WzQoeybe9L3f_r1ae{;_rM#~$caEmMSJt)mWaPvVBe1IpON=e|Ed zGl2dYnV<%%RctNKtY&rH;Ehp3l4PI*Ghs2&aM;uMK%6+5_3|?d0jQm>f z3jxfcFMSLyqSct2UJZmiW16XUUu_`9Q?OIRoLONrHx3*YQ9gt=g14;4p`FlDZ&bm= zU4xmrKDHZ+2_Q1_{%sui24&a;f z=zGxy)`A}zURg4tQFztdDvy5Msk|HA!V8~X{Zn~P25Lku;<#nLse$ttnNP6ZVv0Ob zS5H+UJ1hqx1s72`yb_76dOXZXJR?Z&G6uI6rrERW_Y1f?gRl>={;_9s6gQZaBp+() z^5hg;Hn}-|%2pn_XYsY9Wh?mi2RQRSPJ@>*k{wpBZB~Hteed!F6-rk3112+{50yhK zK(ZQt;MXj`{l8zx1m2rySwzCa-OddLZqNpg2=R;f`g_6&D|-;*fj62XU-1gG;}H-j zzrj~@x$L`zCa6z857+Y_&s7x>9=q!ZV5BFZ{K$m|CJ&n`Eic#V)e3&)*t$4Bs#ad6 z1_IkVL0L3BRdMDP{Q3}XBdC?~6O`yl`Y2pUIdYE&g)5KO{P7I~MDt{~4h28u(D$O+ ztoDD)r3MPF{Ggmsr8d?ptFqlBU7+Vf$(Ye{`fi*C`V(~)fs~r8s>N~xc=cu(;uJti zd5*Z{BU^e-5W?LfzgW(&2%4nZJj;cPeu^%eE;$TSf~g<4BVx_h$eVIPlY{t zcpm9KYrjvIXvtBy9w*IlxSq*8g{?N&Bu}>M&h-z)YVZo6li0m)vy?Ws<_+#@z&+Vp zn{HJj2(GGYv|IE@s}A=~tAlI+PYQ2Mz6!$`{1CmJ;C?r{c@o~V0GjX}8Ceq1JC1)V zg;ncIr|*8UDBQ->{hj*>xVQAi<4C8`nH81ey@?*@=uhwd_NQHLAVt;ESL2NHS0`sm zjl)iG;Kln%liRrwFaTl`i}bsZGu&Xp;(5ouMZbSZ@rKutcSOL&A9e+R@i3k>}#(RtSAg0 z3i>v5@J(3DF_~##z>mt~@f`pByoIeBTG~IYt|eJ;c4aoR&Vd$N*Azz)+#XfT&bN=m zM3|9}Tt?w)&FKd3`w_#`0H-k&fPaWxviKW1So?$2{I&z_2E+k_E1%Nr_;w$hH48F; zZO*f?Bm;Mz6H5wdvHrFDg_D(aKKgbfMg)sC!qMksxJkYVe?i6V!4|Xq#8EIc3#Vca z17B2}L9q~EVpOU7O7WW`w>cmM20dVfju2_>LFJBr-!+!q*tj_lVP zzp5p9y{6fot%?XR-tUpJ3JC26U+Z z#hPiT`LS4d3jG`TX)-7px^NY*{5A-XD=t(7#f8Eb@BE-MA_^@9rSS zPojuVFo95ot1djlC1`n=4G8*GA2J2OGdy)PzJ`h5(e|h@jTwA5caMe_NIw!!>EFbz zazBnG52zmYq?jEh?lAl1kFL-kZO!{&Eg3Xh%2^5zH|2bS-`J)e1#CNI2^WpP#s>%q zYjqS8ps#dp7M(Jk2cs(ByAO1Lw^QNYp#v1r4_#j@NYa<2`Ax11v-Ky=jAwW=rJKVQ zG?Xa3ouL8JcQdy@N=)o^4Y19Uk-!0tIq|@4NjbcIYc_fsO<*G;Ut_1+h2bs-XpX{N z&dHN!fnll1*?i_%BYvAZtu3w3KcUVi_Q32uQ8skf7Ueb#3P`p$1I--Yl+%ft1WQO4?6=_IL_wU(JFIl0L%-xgv&z%ap?B{+atko^4D1BmG>9p^D_a&irge`0UdZIb0hUNBznpr~<&bj>U6)TeD~>QgabZ9_}AuU+(WOSBB_my+`E~0T9Nv zW-re0-gRyyTB1v=+YTNM&zrkzeF(aCh%JotchA0Ghe>I{`2j=#ff@mj7f2~kr@s-$ z0e(0gsDTKTUcMlrh-RwS6B;{#%-xdhcne4Gj}SG68-KxoiZGa$rj5h-O3K&(aR=c& zELiXBz=CxTEE|tYN9^4Pf9qv&OXPje`cY+kK=PfASy=B%&HU((ZIIqeLwesYA?X19 zh?og;ZJWU!NG4Pu<^5~1sTJDw=?mSx@UXePkjI33*q-IFHTTzx1`qX~?L>Uu2*U!1 z2in!`>s@xR<_Bysr04_)X~%8<&mLfSuXlT$vEIlWti5w$VRuJZ??R}IgNFo~=^VUC zO6Hz*QPaV#vNIc=f%_{r?Ksp~dhl{$r1fLY@ZV9gg3uyk-Dxv0%(O#J<4=!dmz^7r zc)PP;DHLjB8B zc?jAb4HVZVIzPA)Nk(sU;Ny=1TEXz3{+FM?MNZ9GM=CH`yX@(mBd7={;#vf6jrk z{emvh5q3YWm;P3^Z+BN|U9BFMdEb#f%6|{`fTOezK(nIVbZ%K<;pkl%qb+ewM0MG3 zDwgsCUZG9=${95107>Y%(LHAYdt-Q-2K?2dW@Xr`2w6sFgw-YE_0x-Ff}SFqkLo(4 zlW9RT!N76UAv5#R9}f1~0a3aHzPCblCpm%(QwV7E_w?|y$8H{AXAjZO*e`if@vQVo zdKBu3Fb@W!#$}*IXgZcojP-jp zdN44-IEu>Jb>0xv2fFmWvgxrhT&5wkBs%?|G#knufWdvF`wJAJ9%uuJjkBb$jnogh z0<;LX2pUHQQ;Q+dd zb8sJ_D{&i!K%oke#ofvlD9+=mv$Zi{j>DJDF&jR{C! zN^@kw3E83FsUQ_peT!i4kF2Y&E>LbvcEoBLCF_pect($g8$aU6zz*iJ9)Q9tT#&gh zJ-d_T^SUfs#0^!bHf$pY1;+XbJ~aE?7~FFqflW@w5zlWgdj_0tEZKPGo#4c52$Q(s zhdnq*kGu0}Z^;QWaGdJ|n#7|%gB~0z#$)qa`(NCQH;&8g zjJky6?2Yo*r{%Lyclcw+{4T(e}xMzU02U#B+ z8Rnl28tZYW%Gb1Dw()M=@nkIygCpVfHm<@Wg0i<}fWCB4gVAaP{L0CK`iEYFQ`w(` z82Y_6$=wviz~f|LSYhxxGvhcsIUr+I;3C+SAjY9<>qhWNK2R-!M*crPFs8u%P@#4IFh&aPD%OWc1BPmW3*$WI=l>MGebBU@<-0CnpomwM6kZezy!UgZ>a?$ zuCN3|;}DJZ>BQHEzuIMd4Y*9S~NFYCnpXLIP&Q5e*jNwR2}L?rIYq(Z60S^z9Pn)eiUkanYqP_8qfvRkWv?QA=Ko z@F}=x6T|2Kdd1)VT7*JRV$yS&S}*6idulJNizj+NDDGUl0+ew3ym;XLwjxKIxs@## z^j5Cf+gqpq38FnQRSVlzOsG_u7Y>32UZYJn0H^SZoa?c5thW2AmHXg`QV5R0G83(D_@OGY($f$`^* zmsgjBg)`?4UsM=#Dxbb#jVF=UBDrelW3J!&>tn`Lu-}opF_XlMHLnmHc-heqqE}%5 z!J^h{AqMZoi@s$e>|b6Kbq`i7_5vs4w3)NV!{-`SGf(|#Rm{)XZmK5{I5o>844hi; zcR2G!AjzroM$+6#jo0O6y#OXYteyuAe?9Fm94lA!xO#J~67!ax zX1rwS#EmcqCw43W4>=PAj_A0puru(+e^FByHg;Ux+{|P=6FHD+TI3w6;1>J;F)AFd zP@p%HxLT(4y7qPfYyWOzP;P=;*M+bIcPJ*OW-5!iuwn>OHM^I2x|Z#pCOChVH2SRoD!UK#r2(YGwRr$9kYu^dS|3v()S|D@dxU{8eRRotW9 z>Q8Ia3%i+Z2CpRQU`YpEONbMLPcs4m3&7pmNJdUAcGl*gZJK@I5O}0(N^4VPeOcKO8TyrDSU5g|Egneml-R)ckX?~{KpR)3v$N;%1w{Y z_qv2OB7UYgD;kh=)6Z6557x4LyBQ}76U~mb7Ee%U`khGPL$cu>x z>z2ITn4eyu_?DDR%a%FaW*B>BAeqasyi`%-R01m&WggJ&WhUS-Q5-(?`rOEBo1g6@ z4v(9d9rC-Z5YUb@ils}bwxpj8A+mI$5TY3%Ql(L>x-XpWA8PW{6_V-Mys9_N{&ahp zEGK5H>x}*j#1bw=F9D`J`tEch0TZ>XugDnm_caj1@22@OyR(wHm0R>>&lr}^o$;D` zE~QA#1h@jFEXZE%`02-Za)a2i91M<11`CXK zenI+}V$HgkaMz0rpAeskiW*{+BWe_GM1I?C7Ag%z!dN`=Yyp;#5l-^FJ^HFN&Dh1R z_GPe;e2;c7?aADSOX~otZ311Actuv1h_o4V{APqiS401J8ms*|znvAa#XTOq&AKa& zobds3QVDAo)$VQ6!XrJRme)moQ*qN`hwh7&R` z!{8>{eo{p{Bq$p-SGg#eA6{Y7gH2j7{>YlPtHSTK!T>rW1gRTNRG)=GgB2irzW@kt z!fuzK-uQ6+yJ7vxP4(I)Dz5vDMo&Pq2-l~0KnkF$QPreR0 znZs9MqW;Ngmz969!Gw#{<;gKVlavP9^3UW&m)bo}j!usVv=FR8MNfnJs2n7NnEiou zv%R&$b=&{8z&b96^7bpLMJW zr@iM*^H3>Y)byXD)bYpmZ*@xMO%r)C645>HYsR~=eq0H=fn#(13|DmjH*7&!j;*>Y z8Z_Y*l~*0TS{Ta)NIV{s&t8wN{D z536Dr$FOoO&?V8Yo~E5sasaR8f1VX-kR4UW>N}UKZkUiPLe!XPUOmQp&>>gQV_=@!|RKxStED?zdJ$i&XDfuxAZGJHC!!h@yV!W%mw#8ir2bi0^Y}d z)T$I?{&E1WfQAgLhh*;-=(|1;3P=TZ;6&#_TO$#e>L@xD>tA4gA#sPKUgzXWH^vOd zOrb@7~}~bLo?-7*C!Cw5rhZ9G}c{PVa!#BNki!<(#|m!`+(4(%>Es zmI{|88NiBAiln((;4drEPH7Sk>T(#I;u8FDKjgw-p{VmlZ!qymVDfU~Au;s#yWbxQ z<~483x3EXk`Et5Z?`)X(uE#4kuYgOGm^aH%zV|x_xkAi&K2BTe`}`ksp5}kzWet=P zV=FV2*>Oa=2nI(Ezjne|0GJN5GY4SH$9~*M2k#`UAT6T&&72}nJN0R}{>VXz00Sd1 zbAAxyqwn1P%$yt1agd4u99s7shYo6Q5JwOqqQ7Oc8QyO@y{cG0x$||ujChAy`JAzk zio|iUFPulm)+I#%U=EpO@&gF|@O?PmPah>Qp0(=RH$AT!H+7ljD$oxpReH5VSp^mh zj1jpDv$1X^HU;CyzTym$Ljg|XD`=vxplI!EIdnv7azIm7kW%B*8yegq1s2F9z&z9++iio-K=9 z08EmXf4T@0?)Yg!9(>2_kb=?jvb_5;0WX`*HKrdqKXHB6)#C_G2%ed{_^D+rB;+4t zl>k8nBr2`oX$M{o(E+Nr4NtO{ZL?DWw2DEt*(ogi$T)HDQ<5reew2nK0bEpRZhq!8(Jz)tZ3VFv0pT5Y!Z2566izqvf=xt)1m<{>o zN^FVSyIcFxxH>)u3pxX6)qpI-4+X#Id?OgTUJyCl2zT ztzN^&VQXKKtDDmGpH0H>%i=W6&ZM(vG0=}jrKuw`RB!0PL(!NI-?U5Q1Iw&&NgjehkT#C3?1r^@Go zrCE5$7HT*~aQP^G`=>kAw?JHP*EUIk^_pJ_An<4|Klh z@!lpAJW_$}O<(aVWWC2Dsi|glnsocShE9)#Tb-i=b;nN9R&0LmQCK>!XGN}u+c7(i_Hw%t@`#FRXwzFb($f}&T z4kcBDS2;bhP8C^z!8hnTR6I$`*R<|=By>>Jy-SKV8n-=s$09VuVT>9mPB!##3cry7 zedviTJA`YeN4l6XKM4sWQ9}!92YA!YKNzmq!Hy1{CxmO}hyF?kZ!t*O5f$1w zo1MQWttxl7CXVqb%8NNh3P<6*xzIm8X~-d~7e%c0iF*!|Zq zsEf}w!5Enzx(bHID70HG#L&%GmU{m&G=6BEOWyYVRrhw_v9)u%iux}SPQ-xfC&+TMgXOCM5uN0IolkAM zLL1HWUh(f{74aQ?F@wcd!?$+JO&2{lhh!{_U&;nz8p;0aEwJvaEGsl8|H&Q68 zQ3|hhShXxTUiS~;l~RYBtPVM3#-~Nxg{`;0=sJ7!mW;bcEj%4HuAJoYKYc19A7ycw zq)QMf!{iKDWIpzi(LAr7rzVbpXSTZ^9)f`-kvX-%E&cAlQOP)s`zP|=7qCgEqK4oK z)mqlD{Hk;{gZN%YxpV@BJi4clVP!243bh|+H^(#iuAA04v495*vMObwBL+D8>crlF zo1;CD^i1ZGdetaqfizUeJWmD9-txoj1*{^d4Z9`Q>TeR_AOc?T#tN6n*m{Vz&W75501vW!5 zjALSO6*BjR=R}dm_YH3Iz@(AiCv{klO?@5ZqoTEZ16B@bgnrzO1hLZTJN>q_gJ$vs3+6-M}97BahMIA>T>V?VJ!ES!#e(OG`rkAcZ zxEn?Rck-bT9R&tG)#d%`{h^B#bp}7vhFJVAXHlNmM+cajBI9BOE_o81g|RE)rI)jb z97x-WBk6>GJRtbTGw|5vkoi8%Hu7C{$a!7z-M}sM3!Bo)+j@6C$?Mw)*WUPPtX1uI zGeSw=!LOU>WG-_0XM+k0^??YTokFLCJbJR&KosNu=)u2|QeLUOpj zgAWfqhbBD;F#ETJaHcv|t>n3^qFvN?DAQ&<$KPr^77nrX1FN$TMvi#B0TS&WK<37m zpc^HDdw0Oo!77Gku2zj=jgJUjgi>IC!FA?zos0@|hy~b33z%iTD<@`qh=(6s#$Xc%Xzz6mMh-eU z$U8r>2Dx@i70fw`vYsZg5M&dDe_!N!gAs8uqg-9WKrFUqQm1((ZUZUBrOc~(i_`dw zK+_`Y|4l}bPR_FtkU;PvW0Bj%yPJuCgV^R+gvTaYJO!EwtzU-{kR=k zKL(P7Y3p?LZr@3Kxj0t_zyBOn-9oRHu?nT5IsnxB3AU3XJX!v-T0PWpoKOfJNq%&w z*+hqZc2Kpqx6{$f)49qJb}74W;VT6!k?)4tS-8j9Z%Tvo43FcQ-9+E!q&zX}C~f&5 zdKcDMT~ggI)hu(rclgIDT^K8Dy0B3mOBA}Pa2v)>e;<1iUeoGAGt9sI*DTOdjtuU%9NYJvBADB&y=2zm;6ty zABDlTMqGN`x|@f2_5wwrS?e`>$=F4&E+>=pgt5e2&16vG$BeR>9bepnn&uy|5H*S6 z{JAvaV9Pbbbst9Jto!F0NKEl{lCM;3@0lp+|1v+(ar6nr>_YB6z9 zV`igq{7o19yK~gpW?FXeno@=h`q)ZWftpe*!ay1AqEnJ%Sg;-N?@QpFs*O!aQ}JgL5azzwxj5w6r{+<%$!9BH^aWJEn}Z?t1X{W_e70ew0; zt>ET+uMy|g|9T^8qEt7AI>%XaPh*EiHoXr#;bU<#n}?zQ9JQXVl^22FF;ee&V2#N4 zHS%HwU01n)c1%j!8t*Sr_j2{zpcPR2BSxWfGXQ<*M?4lxL?Fv9?`+`*WDnx^#TO*A zf#n7j`cf2k7(d$^N89HchQl)8O-#nOlM+EzL}M7`AYcOD;~wXE0pqXqTNy4}r8mrp<*Sj$UqTs{D$bPYk4k#7*4Z=`2 zW7|fC93=B_lwf?xWDICQ!e-(o(4EcCb9=zW_>D?b)*&k~&$DQ4A}k|Q=R>*p)%g98 zO-Qu%e?7?hJ6a@bGH+u4UVDJ{{rP#yaw#!){$8|1Q ziD0QGSALURcQVx~`GU{#A(B`gq%a*9&2h-`s&}Hz)N5Zd#bJg3*q5A@_IiRR*JYTj z1qZtByFQTOT{d#msUX$VHMCwE!Cqtc^3g+sj?DcZv?c$O9|A;n&dLA#s+g&yYirN18yd;u!f%1(9IIdk{6OpFmk!!NTBcXysUw?GYjT?!8g zE@Frl$)FHIn+w0ogdT;eYaWHVLie_DNc2EJlY9jY%D2Z21AJBH9R4qpd7K^RHa(${ zq{L+3*W*RVh$m&528?D6%GwbsA!DE96Rqszs4)4^5-hVMDTtfbo5;|Hx8oV)J#4Y+4K$7QI?^6ybtpN zSd(SOk7?jvrlIDfF_EwLqBQG&O3!+prXe$@sh8`M$m!q+19_pct7yPEGgX~-z;Y3` z16VY_rIsH~awFGvrkjJgz4jfw?j_3kWk7(vWGWIPW2i+`#NO|Sc2zgMsv`ElG)E3s z0yM?&>NTFJctk$;A1*)#QQ!B=&5PG~EBmk~vE$E82zsZe z3zYPX)i2jQS6+-$LzgF>q1poRK8(y8ZLrVuZyJ+?!(Fvb4>E!r82pZ09E8xpd)#u= zb3-INL^Y18CdeJcOP}z-kr%6ei;33}Dc8i(A*<5ds`SwbWt97h0aeKRwEDRk3gxBc zw2M(%D8>NpZTS043vgDf`kkt00vUp&%4-nGCZ$WO`|-xjNpL3d2K>jRtFrUOr>)?; z^tvObhDCW1Ob0_n)n}IWcC6*q+z8aL1qvpg9ykmsN{=rYtOtDqn)-{S%!sDC>Kg9T zumfrVIOsIUz-qF0@70tAejo&;7L4$}17?gEijOx%#F<-n`VrrQkln)B&18F3?9X(u zyXE5Uf%iibGPZ8>-gp{ZY3u9YN;^ONCZiaLOC~YzPQ<-#Z*nK3!{|O-NAkLMud8_u zu6=jw{yY9krclSj_4tLsyK7>yG%c@=Z2mIzKO{|reYO(_dmnboZ35sG;wbcL zCXi`~D~$5Ac?rW%h)Iplco89ryr|^S1dXNr-LpGR%;`OELPSC(m?)1iOC;EgYrc1O zstFGsHH;&;qoLb$h3f+>7=lc#vN?DM8Q)R&0z%WFBfW;j`cFkOz_qi-zlfJ<_qsLu zW>cBhwq$}k*dFR#wd)@tWoA{i-)l&Zc=&zn9HGhG(CKUt33$ax9ePo8n(vLN*Bj@w zsL<16KEIL|M{3xTYR`pn*axKj7vnR!nK)U^><%QeL9q8UNJ6{!>CstU4e#yQ1b1NU zsioVl_u(-F{^ygg0Z%r4pRSZJ*`z~zz-Cx2Lx*thF;Vx%r?e4c0}7rFud2Zq!R*l7 z)EK!1d6*RSOK5vk%i&d|zRcYe3P~9Y!LY^lsx~saK5_fauI!D}jC2b!Kl#67FQgO< znkw}ysS}cUma}6zW_3d^Z2hl1u0v$fa8xCI&xI127`(>OCeQAV0Acnk0lV>2iul*8 zjRjvrfeRM8AJWEk_-!tFzi4pE4KK>3odON6$sfbjS&=en6;1z+ck0+k`M*?;#*fLsayK7Yc2Z2KOVA?0FEu9I_ zu5y=yc`pK*5|`wv0{t6)@)vRt!Rla>Cqwh9DbK9&$zmG}}+aG8xpJVcaAyFLoR` z^-)9K?;8|hzcb_SG^4Gx#ME4g!c(`Kd5>*Z|eE3w0xySmfI|CQDSbM zGQ0pbaLf6ID=d)tvgM_t*suIPI*8$@SCu7{dwGLA#n(RCb@pCE^B#?u1t7wwz{?S3 z?W^;ENZsQPsrBDW_-^MN@ldee)_@B%BS2g8K7|Ot|>gw8kWg`fA0F3Ng)x$UnVlMxCE*)TKfptMc zYMBQJ8P`En*VzV^fC}B2{UQL4Rt%0dqRw+>H;&vog=_!qPN)d3Ebn&SCm#oxG3I`{ z1(Ubp-#b8nE5K(j>hS6Xkz1kf92b_F1pjKziA@u~=4>6B1nj0F;a;ag(>1SDIex0Z zUdpgw?zj?@d*1;S{1!AbPQajNi58-~^f}Msqb%QE$sG7Aaw`dB>gU@AGl{I>lI(fa zaf2m#PyrEhJ9i1Zk^dyZ5$t!x&&N-pOEJrf^a6U5ciyd3h0O}VW{>Xh-nSh`7E~E+ z1m*QhPVA^QJ-jhg!T?)7b!9YLQ>Re$2smx%_p|@m{3>E2H{$vZ!Z7RDP!8X-oTmVJ z7mP!IY7@3K20uq7obYBmc`{;j_%8RlN)wpw_p~?*aG4L?`{FKt-Djl|C9%TrNbu^; zMb}&AG?~DBgf%pCzdCaVLKpw&!zoF$do@D-V3p>JW^QDU!j)))^_t_3z0XPSe{4E%YI-~06FX@CVQivd29(U^<*9RI} z?6$i!#QmVQkF>lYT15g&6sUM5GH1~prqMh(fkrhkoD_txd5HFCk~-MVFSR&ebwm? zGw|$d75d=wsEXHr+Vl=>lo$=GWzjFiWo_CS(DN!FvRfJGZGOt?mN2gpin{ZKzWiK#h8UxP1TL$Ac!nj7B(^BTG9dDc<_vtt-@r^Y1vAXCu--nh;78=uP1nAf>L7BEI~-%v9+yVBx0<0on7 zyQq6a0MG{qE_P$cyvR5KpPT?5JI%~K5>K9fxXPao%5{D&hFQYXG>tfg$%cwaQw+9F zSHGgkhj0esAmf893nR(NiGP3tyyKfY@C1MuZ;T-MuH z05s$UD%9Ai88CN~Upf?ZHvh(M@fFAC476>)s7~Q4#(uYLNhzdz(1Od-8~r$ z<*JtHyMPY3@XMgUl@fQ0I3*v0%-tEieKu`;YR|1q6lIBnN3cHMU0n=$eAM7Rsni+`GQbvcn_@*UEx7#*r43FjJ0icQ+=9!f^2o7 zih~pjJUCW>AsYyLg{}WYFfer4y>ni}#%X&^v(}FmPr-v+5uIi^^aKxuEdRqfM<;CZ z5bl+??q0sRJl3-Y33$(7-*KEl}+Am%zO%JKq`FPR*);ake(UbZJ}n9J4;5 zoER(wruV^Z3oOh#xam)%6lIOw_d3pJW{+!uCjFUPviSC(!_*BNVC@#6&{3}8gtgZ1 zr(;c43I=Je#QNAX;+5@RMlT_S`{5GKloiT;|T=b?`lBTm#*y?@QtHkuqPrS3C9 zKEMYrNdVq>rR&4LtjuseYNVtXXFcRuf9cF<uCJZ7EE-zl2Lqt4 z039Lzml1>bV|yHXnLd^64`$kiLzrvYgV-TY@7H3SUk!Yr=niQEwz(}FE3uV^0Z_G7 zB|s}_h7v0r5f3;Y^W%|Z$A6+TC^9<=owG+fpDudu=W&Tux^0_7>YJIl|N zY(Es5$5y&wv4Nml+-;eOqGtd5XhMH?&2biV)GAOixtoCZ{5{_?N)W59s~2t;6F)Fs z`0~n-LAjcJfSal`x}{OH2%!D>UnIMYu=`Ca%{Mp!MisrZluv7wjp+zd?-XiMhvF1X zly{Q&OPJY1+u`O>nw4Pp!D2(_y!+ZkW80jj4W|xJYXIxGgZ#Wvp4xo^!1c!8PLL?K zSHS7xRAJNM?09K!1Iiy~bce8#@OkuM@ccU43zVf&_44R0XzpiCW|WQ=_kaF6>VLb5B;p9}b?3I0@st;C zo~IXo?$!*sa(^Fw3s4&be*Fn>MjyuM*Pj0s!tYO_GHx1HWnG+dS@+-(sFeju2JcPE z#;aZ791np;y8hNKqJ4tFbw!8T; zbS;j#3Gy#)3h_QJG@KcsZh!c2&BrB6TX(mr^|tVW7JR?2{38!w8Z=){9-*zsdV~P z!${BBnt(%A>7~0)Xx%^a^dLXSi7Z*WX0dP83m;w1t=LRt!<~$X;k=SC7f}NwhW`b= zwwc<6XcCJV$n(w%UT%;s6L@9x<0;?R2j`%u`q|lUi71nX4o~i;$&8N|Fy#^<<9F_G z?r4kW7Yj%vB*C$$t?gU`j-SM@9wRXt=c8d`HBx`2t>yam_VxM!pE8|?F0_NeMOy@? zJyAb>Ulh5R($)m+4HScaD2NTZ4zIk^)FZ3f9xQRmFuCAbP67zs+%C2W#aqBo>&1m6 zIO-z*=qp{#2e5Shm!Z)E>9T_t3tePd>gF@8J?Bd_5Xva17FsPaixVLDg$P$$z!Ix| zx;<`Xhyh;Nd8O67@g!r$qIb|Rw@}FkxRZzA`O}S-?1W;LQ&$g-_JfDA?FYcye+H_Q zdxxv!^V1=k)9ch5w{*X!+eZ!v%KsNTM5yGWfFZk^7jWZ2L;jVeOh{wOY-qkvT6#|m z5Slt5w22L;Z;9bZX5wAYT*qPG4}?aPM`_J_J%-vRp+`Ww8zcGRV4=-n`>4A?_rSnW zZDFwQeWyHm94Qsor3ulAeLu1^VX(Qi{q$=t`TL1k5hY`}5T7t9jQKj$1%?)kIHhgE zk;FzXssQEK^~=x)>Uvfo_g^^c&KI{SZkpL60YFU?B#5#9zyKe{VO8ugbvRU^?=Avq zHD0>(x);6qO4GmBx6gi5?k!cipD*D9-o+$JH0m0Sc>&QFZk1bshOK@&*idSppkDFH zE2r;zxx77TS|rOv`C$@#-v&=s$dK?f!jU#42&yauKnWDu*8*CY?qf(%-p4fzw^a`t znOTNuOBvlvyCw{PF32h(mp3nNP{BG7wR)L=y<)$IRT0b(`?;xyd95!y+_V9wms%Lq zYW98|s00H$r^Xs#XTKYBKjW|2yhARy@+s!n0h*`rWGPosID*TC?L|ch1-62Y_;Z*; zZCBc^#!rEQTpf~gbC~i8(geIkA9(V)(FbZ1|Fr1jMhFHlD9G^C)A*3&`cz;1e$;7+ zFJvwL6Z~MZ*_}g9Gsv)*1?XGQx!)?5?RY04 z(lVSr*Y-HxG(FyUVX$DABhw2^$$p3v5{sKXSpMMWhGR*?^m00etWnmHw7PwApOoLE zFmTTZHVXjt!&p79IZ*NY1R4$Cfm;5UtAnQr5;mGI%^hJzEKS?A+Hk~irg75>aQ~)I zq~Tigr}?L^qU;d{o>787e)e$4bi<$$)6;SKl~OxUPg78RSn1mF*FpIjVgm{t*{{(g zU-_Mf?dcYsXz}NNB|mep^ky8HJsb$NBkAEYujJ>a0HssuI{ud_RzT9M-b~V4i&mxN zbu3?V<<4ocj8O@f+2f{`A)2(yCqXuzMnuEKABH2WiKZ(=fGgQ^&=(4E=6V~hE(!$-| zSC`M|zl5@eIzbfj^n7nG@I!Hyh~`vNXcA@g;Huf~&bf0R2!Jl*(VMUTBXEmg?YNhP zTxn2k8i*Ax*PZUFZ6CZaIFG~tc0{#L{fWddZumPRmQX%b*ghCteknNQY^ypA+%<$k z0g-1FeK!P=>$cio%O-#c<=EOwPu3HQ^Dbx?aMNqt=2f7n3PylPfLJ3@T8i0+9@npC zhq@3=J=#|r$GX`2e!GgWo`sOiCDpc%ky+>pcf)kjd9(0ciHFHcf5Al)xv3 z!sfp4A-%>VqIX_lv#>3gD?$$V8M{wUnWC9~YkvhQb_C`97ZsePCai*nw)c)NOebN7 zAt|H@iL;>6lh)sVf+2j-aaI}xjH7Y5fE;0B6 z4#ge6b72mQc?$rxD7T^w2oK?~Gt+-Mp8e45s{TTKr%Op6oRh zuCfVBT$Ijy^*!x@;2ukrC>IY33Q=n5sxB8)K}SU`0@2@)P_MiYOI+Odz*7`i-m~jV zV)xNE5;C}uEQZjr?BI=Kvs2gaue@sRpyETjt6&Ue8U0VU~c7M zXQy8N`XLp+5oUO@;U$mh(mJp&2t^zPY$*vf0B3sL3lc8*#xAic4RIC)gBaC!0v_u* zEWj5z#)eF9_ab%Z72q}H=>r!40U@&2Ly4p2I1*2c;3mlFeHICgOujeDAqC(RXKv*6 z8ucb>Dvv-=$CshdzET;81caghbJ9|hUZ`**&)r?$NyCd)|DkDXxFz}0#j;~*CB=s! zJ>|M~qPDg+Dl9xAfTD1oYa})!X`$_2CO9&C9DuN|JtdTN9j@%8VH|HXniq=O1{_y# zGY?RAKZuH_6TE~pea#L}_~zYv!KZyN-_tEPQeo-Vr&DTPK=LUHMN#NCE>x_MKSoNQ4rbiBhc3oaaNc&{SyGTsD31(KlVv1 z)TYJE`iIHaOp&HvZH269nu?|)wGyyGIh^V!?5sG1s6=hz51JJ@v^IZ zjcR~pLDO4-$K$|nfkrhDN&e}#pR$nR&&VVK zdw2Aihd4x^H~L`Q2cJ)Db6U5kGi~>wU8bh)3xVcXazPV%pM>OIuXiRi&G=8!>gnMliQ)ykx5~iN8$Dpv78Z_u7q0@i>g<_!H4~i`>BX|!2ahE{V+1nU7_LJj{XoC>1w_*OmW`8zWU zmLffg9Zy?ekB_x*E7!64e53 z#6DW^p&O1$Jx9xeWC@;Awup^iU#Tg_@{U!=8C&56mGX!)_mnAg8JAeAIu=ij;)dfW zT-6ce-W*bL%yI>AZqRm} zec{PDGPQ`iqz9O@a~Uk8ohH#~TRSBZgF9oi4xs$R_oiC4_(dy3R&20b^UrL#PtTz2 zu78srU9&}%0dxjM(r_A-`qvy}gKOIFA173BCZ9s|kf0By|I8+Dxi&MLPQcI&O;(Pc zMuv&vR-;MOtH~FAG(zKPB=jzQ+A-iX?Tn&j1Mp*Y~TQe)C#=x)K}DwRyCFMw!I;kK*OUTXdK*Pt3! z8bT8LmB3y6Jv^-!0oh)$KB{Wd^>M1{n^x<~GS^P$TcY}cv=TH;Zv2Knk$;+wL*%}+ zm;E{+)2+dx+h=@7`*TInX-Z%-`<0x&P4iR=Dbipk8)I@<-g<7VMKiMld=sga@6(17 z1zqAEnKFiot)?f$US?GtM&H)w`MNF;ke|@w)wO7YpfoM|+CaVJR@D|$O~2I93AXFD z(O@e91YbbmUFJ8MHiH{O5E7h?E$^`~t?onvVqDp`p(>?+@=(VfXu_c|e#~i-_HyIY zY&0!VGs0Efd>-cf+WH_BIz#1{3=h4^?n@3+ntfG{W?MTJEyqOl`Ze2}!JXOa1RctV z*z10!;|U7youwYKpz&^4jRKH(b;{Zn78(4=f&AMhmuH&ZRJauvr(H~=hvTQhu9T$X*oSAIrMrT zKPuB-*x7DzoEsx-V&Kt)Nul<8gK)Ei5!hIW*b9Cn-wi$zvi>~8zFCzp824JfOW|%N z(s>z~O}WDbOqMKc&ii-J7m9lJ@*$c$_Q)}lmIGQ{+si+NdR1Mq8ShlqH%Hf*BM#47 z@g`t;-7JU{8_lb|uT9Db>J&F2>7Zlv&t4}&a{JqiXRqmpzN`(!_VM*Q`H}Y?mhTO2 z{(H&i(n3$+cy}zMkjE&)`_~b|68&^YW6{Xf8qKjJsi$-S-}_H2 z-kn(B>{#BJ!kOI6`|yelo7}Xmr90)BYNE&a(Z2f;cOSi+zdB%cvyjT}<3wb(k{{qK zM7X-PdZRSOIX2w&RXMfnw2Y1Y*7t2LLVjJgrbXu`A(UD`ux|iZKED4sGxsL4MP7=X{Xz;bhG1dO+xn;lItUj{T~mn!w}lAR4@vk zCU=2RSSwrP9seays;q2fh-W?of?xSc>!NN5nVblgw&q2+SO5oE>z=mf(vtPPP4#}P zWWy<-rJSIpUyT~0oBauE_J%SO@Hnr3%7!blKj`&w9c4jHOsv3xp-3gB&p{zbY$c`a z1a+vxUgUqQ))*tnw`t?efie9G#xe}uWG}36`KN_sUbiH*1kWe!9tCV@C6e; zB$~QM7xMe(*e00P_7nCJb6pd!Q!{|^04=5i2e^FIhwe{!M9H(anIGiHR21v5`^bb0 za%@qGj8G>WT-hp}@~p4X8Rz!7f#BY2@y_!_$#4ZPK@Vt3YaG&$^TI2|58ocq5&bNakj4nE<*Y0O?9+@ zu50OJScKfJR7n{ci~njXs_4~~`G0tn5&v|3fi;pwZiAmhRE%tHBeDM!Ph z(%#)8dB8xDh&`YanuW+#m>uhUB`5hHOFs}g7&u?qvI+_HE`r96Q+?B(U-0djY!H6? z=v23*_+tmSdOfWtI-kqd#Mv=!E^MbQnBRB1VAn=9S*Ef-)1){C7i_ADvCxi3`-b^)IduvTE~f+nj~=gzl_ zfezHg2K_#{`X zL!L#bAGx2e6T*l!aJ+qHdmGl_Y(@5A9NFIg<=ss;( z_BDKy%ShJSg3Vynm8aLWiw)luOMj*Kp)^}}FpA-EGf=&rdw$j6O22j_5|Bq0g(fD2 z4cD|hi|vGVBcmmw$=1l;m3-g_xaVS1n!x==1CEvPuwJE|FEg}pXSUOtM$-2f$~5!A zw|^uhtxzhWj%!}s`$_X4?~N{1CE^j?eW3h8Pg^0Q(?VqZo0^knRN1^sry!`0{hSFJ z(bQ_RkK+q-m%CpnvR!7bH!jOdUwHoU)uG9Eian`d13crO8Mp1tx6{Dp^i*KXlNaom zQJ++q@im`-cnb(7Pi!IDi7C2u$q;R#yxSCEkSo$Gg{O^iS=Yt1NGEL`MDLsZf`kiv-CN zHcjnOU_WPLG~H2n)>qCq)@$m5$?zQ!$h3wdptFHXEUaQ#d=AM z$ngx_d6*0)?DDZ`?d+IMVbH`E9CM$I~fxJEYx@ME03i&a6`jVMFj1o z`_35jT=Ja{4U4gz8au6=A_naa)mcTb(1~zx!r5R} z?4EAD4`mc{>zyL^6~|vzvWBoNL>o+9&!80*0LpFQv3u|FWTb$<>>b2GDlW=KcE1%N zs|zE`N~VU4(H~wD*0FLDGLf_)b($!iapJ&H8%)k|DF9zNY36;3&iU=IXPjrUrOc#x8Tx+cMl)taK*qY{(-YtDM#bEXdP#8$WC-w!}S;Z^Fc`l`>2#z ztFdNoRp!FUA zM07s1fkWOS+IwFFgyc4u2>+XHK}YWObC3bZKDvp)Ek!Zf&O&>%M~s-NR~YFY+9kGR z{&^AwQR7f~&u1z4&Fk2>Fdxk_+g7$=hnrqX3_+8t^G_kWh~?rrM0sq`I)06qqEyD# z?N90T=-FPL%^18~cxTBrW`=MzZPmQiLtTPXr>OLu*|!czC4E@VZ6pzE3D_{hrnm0S zl$()i@14?h&|F(W)T#k(4X7)Mr8jiBs_vakxm4jB!~v=xHcI!^3i-H~p}qUm`YuCJ z@H}b-(eA>rMqa%Uo8IAeOvK#%B=sUT#n!XCT&4H;{c#;cIoiY*%_1c}$CLM=KNz)h zAq#0O%D8^MQMB(h&1(4I@N>y8+n#?a!T3dXQ~deoW{H}DHIIw}Iml;J6#^d#MjI(F zfYt#}K4~qA_9kwkTQLUvrvMqfnr*+Xne6dmF|Q7%t@p8e{Y$`@%7}*C+SDVRK9!yQ z#`uXBw0lGk0d7c?D7XJrT!Y%NgSfT#j<3bVKE#p+t}3}rr=4~j@GeV(#7T8cOv-c* zJ(KaM+(MH*Wu^YzM_3j(&?U3DQafETz1$aJlHa^u1+rsId*M z;i})Wj#75Al>jiL%IY9`enQ|=qUKqRWlYGNm4JK%v3e=aGG%L$6(( z`L|;BQ0%%NH?jqH^6q%TnXsO%dCRLFk{kfYiSVl`+#IOZ=QXwl=vcx7O4OYU`xutQ zkp}J}udK1R3b0;5njecDT_1G!33l4-aG%orLan8bZ@xM~tC(}TZ1iIe9PVV+r#n}z zT19uCUS%Uv2VZV)$jZ#tC~Mqmv0_FKNMwK_^S~o&$7Pu40|mTus~z=?76Wt4S4vDn z8;smw%6&!Ku2jKx6G<+UdznDvMsu9dYFwKAk&qE{bz{$o#ku!Ie9%C_mlMNkVAw%{|I@&if8u=Hn(T%WJbfZ0j0; zioYQa{A0&V+Y>i9R|G#^ay$ItYJtkT;5aK^OitGqRsz^=h4iF_%PJg zj2~B1xo)!VuOYVduMQu>3){{2IQn+a>-7PLu8;AEfg$n}pi1b*m88 z0EAe8h^ygYab#;2(pU$4r2qqXv(5X6XMJS^{QT8;t0i`fT3yWRrE$f&yVkH&2l}gD zYGo^I6;J%OdT0)V=d*5A@ET)g?4TFAaMQgGp6=5{SUWcvuCN8u8+%Yac=Z2qb>;C; zZvX#0Gh-+FTB2QK3#r6Ri*iF$mTZ}{pt2MZ$@6Fx6)j3hCY6*#*@>Bo(rRC_jqLl{ z7{<&zzvJHP-uwOi<1er0%sJH`<(OKWN7y?zzGG^bdXw%(>E^PMAGYcA`Mu` zwJo6b3)bF1kA_w8=-ZqEy_20CTM*kdL1--H5#ymc@@;3k3q@3St zFQ?E;f*I4!f9>@P0?kz?ZB`lh47~gn%I#A_v&fK}hcakW2;22SjGffR=1`Ru5-JVo zg*ngjYd>0Fgu4W{OrZP2Zq=;2)#r@s#~#^-&K0A74RT6W>CJ%U(Zyz2Bb^&6tqC~< z^?U+tkt+ zPL6%)EL=?3cibG*-o2%`LjdA?Qz2T`&*<>~_~<^kX(mOZc<%(NwXt^)riVRG-LiU% z^=G;QrZ&(&eFB2?VZUwQchIOX`<4>a*ilKjnVZ59|KF^+{BYQH?}^x`vO5sQbtzz+ z_Y=QTLu$-Ys=1HMvUkS(6{umvVOY_;%Qs1=PCl4fzra6<(UAwTgH4Ilp0^FFl1~08 z5e7n?TS2YjPE!JvCWPof2=e)pEBQcIto=uM`7m*+zdRt&N>aJ&Ukta#)$!Y+!VTe> zuRrs^+~+N5r+(%cdCeGK+p&9u7%|sIvDA!fvVWC*tp1$w%A~M*8HhuKkg1><)K3!W z62*iC3D6@;=i=y5mIKx_+G;Z~7~bw)k?{ib6-uhLX?%=PnZ+lBSrG zXRs%|aUdr?KfHduAv{Htd9fSP4($pNlQsqT(=99V1=LRq&JSmZ#`jped`i0153fW0 zdj&73>ji$BJgTzRc-x8!R4&ff7sY;FW6)2DX=7E01h>@#alhv~q8d@6x=?o4 z?WKZPx&otg9d>dRCRx&H>E4$kX=<$uhJ%I{X3A3do6~0RJ>G1yD4%z4%kisz%Tkvv{V-Mfc1*OKk!0-4KXl%HPE7wukrW z5GlD{E;Ei91-S%632aJ;IrCIEsQL1PdY`mJpa&)-8y-9;sFKklZ`?1w*d%b*Ml0ig z027u-32s>CF)KSNmt3~RXKycjQc-;SF%P}a-^cvUGR5}a?3$V#08fSiO_ZP+*0asS zqdR_|64*dn@$9w_uE4H&;g0qa z*$a*8tq0AvU)?`%L75jR$Cd{zVyjmD%q2V!l(iLP_#4W7&=8*>6LhDliT8>YUb&!SJ_4JLDs8Cl=|1k1R;&+*kw%urJL*dlVIzk_~<>((nI%vo$)qsLQ5_w zfj6fN*zUR@^`T2J5-Z54xo*np@jc@dXkrQf;nUFt700if4>olZcMSS*fZ4xxe#B@i zS{4s$JTVk}QR<18@!7>1MCy7KVfbdN%(0FlCf;<<(G98p64(u;1wtNrw*?t5rbpQL$hWjtD4RJq zwjd@mTi9ouN3>gsZTW*l5xE83gIxMj5c4H81`#s1BVp66Xvi5C6|h!F> zdp>Tre97;7?lIOlQZQ(u3U7M_8GVSP*B!}Jflo6za(+)2LEw=9z3D$AEfE=7KjKj3lrn)Y6)!0fpgtgEu3YC_4W=a$5NaBcHVQCA z@97`skyy3B#YDzcf?hQ6y+X+6s=9OD@0pFQf$ym1EfYgLK$qH^4V(6EM_SIl>?4Ox zFA937^C$HJCzWYI3cbwTwua2tS+bAk9(kZa0w^QuV&IkJVqVjVyY%*_9~H18eROz) z=_wLlhDQR8kaY(@m(bCJ&-T}-*|*WPaOPpcwj+%0yWF3Op@~}$60vkJ8B@O~sX%|9 zOib&EWT|BvR!q-Pf`6eRqve&0qugu??6V68jfNJvy*S5sf@Cf>2b;p$XOr@W9%qQR z!pXo%YWxxRc@Z%hi6uIp-038U9slG^vMu5Ni1t1G;gJbmb}_LOc;y{h!ce#fM{I6M zTwRmKksOvjCb?;Iq=ea<0Anl=zVk4bkSYTS=@PGpQ`Mr|q}f*#-0kn1HFeJJo%8ss zK|pCiL+LW1@Y7|pW}K)PZzJ%n4!tKz9RXA^-1r!vg4>2!(~&(w_ZmQ^4>7eDx2Ywp zXS11SI5iJXa(at~eUcjvYcaSVjBwAz`GX{V4;RLan#IUJD4j4oEL8gAAiXBDs3Rzh zRI7k3yN9dEBd)SBFS%n;?6aregUSFLa%o&t956vwm>N-i)%qpdb`vSa1UnThiljt- z$a=$m$iI5fCR!Zx4R#7_I=Kp#BNLL%+=m-nf39{2A2WQdf3xPI+CSk(?+hV*%HlX$ z&EDoY8}T#v(qgMP7|iVu#;=d}r$$uF*ud<1av8# z5XTl(-rW1b5PaMXdP{~(E6#9USMb7$a@K^p%|#>E@9P8HQV1>V(jzV6!E@cKxd}5` zWE*pPcX;$i&i3%l@*{>w9z^Q$OIx8`+&2IZp;NOQpY+v*!-To*XmG%-%Ll6?R&#Kf?dWv+8;={ zK1&arq*(3}F#=Wwj3WTP#J-c*&hwkiO1RtQfK`LJ!Ist23@!@=MaQX`UJL~iDtmq5 z@y$6a*3%^=zr|OzE!k+ouCTn@@A;YZO%(`!FnVovy6c!9&Y+tZlmXi#n4cnOCE1#K zDq=T3O2L3vzE&J$Nzr^v7(Z6{DOxE9TPFddti?thlnZj{d|d$h;3`7 z(`2L8Ti3_;b&i5Yn0jRRx)=K14t%q;K|k(&IJ?0clxu(>f>-UPFQ~yn?bo5Bx3=NG zmQCipyEl)sDC)$BwgZw;-H%cAZP9&$;*Bc7sRcv^MFj{wLHzH02bmBDM2CxGtA9u> zg*EcJnSL~_H}n^o)nY}|6C><8E;Rjue7a%s;fa<>vsHP7q0i~S3R)~oZCZyFA{0J)<-;|^R{Y3*B1IB!NOCy_%C}&nXTB!2zCGKYx%a0Ctr0U~ z4OP*!9HtUAwx8d>*YC#coG4^2`ck)(np#U5!&}mmt;=xbYm{Og6S%sCeUkNMA3wf0 zJ$bmo#sCBwFxC)K9eIuw`an}9NF4K^!dFdmHv$J)XsW!d3f)t4!}uG`4pnj1ofw<7 zkzKfrV0eaBVDfhekQ2%7`hwpoS=H2BpK{t>$KI2Ws|p-uCDGwTHEt_2_$9x2DN^l# z!}lbN34v>1xOuP~Lb|!d)CXOwLmN?NRqToicq7$5XRxdxlI`(KgJgMExgiL5ed%$(l}5 z7NKRv5^Ot2?|_D&K`pTDa5o07MIiMYCcBcM<<9xhn>bzTp1)d?)aas+7<73HR`&7L zYtNYa+$(Wvn-T-DkJt5#=hS#G)}=nA$W7r-M&C@hn+_BdopS=2gcH`7r>#=#^ZDRPIYM~T&YbG>UDiuBDCkL|Du5w&rz$AP8cl-} z&Pb61*>ylq0_0SWS|aLPI>YV*&;Ys{jM5OPn}V4u1SkpwE;P`u!OiK1tD=Jl`($86 zup(2HI==b1huFzrEUqZ#a5Q7(0v-08o^fuLkyy)s-)!e-auaGE)?54&qW{^nss+HW zh@1CtWFL>+jVE{m8EHYvMOgtjKi4EgJ%i?lq&|FB2Oox%puHse_b1?;y}@f#7mt!E z-DHOESP>cUP0kAvz6ToR)7a$Aztzm%yfglsKFFV`Z$9x z+^QctgY%4Dzv17?pwGsj6%L>>4$s&|PZPw}B66Dp%94aJLVy^N2Htkndc%6hlF5B$ ztjk_tlGEUJT^!q06ph%1aqlzVLyTv7I=hb?nBAy!V{J7T>4gWp{+#kp;q0bmRVE$# zUk{g`x#;yM{Y{n2%g1qu-Xe)oYUWA~&wjl9aq!s*COY97hpRag)qNCUH6;2>UXXGk z|ItOT^)Yza48F)=cZ>UO*4TtL>9*AluZdpaB%HZS0$aBllzsAF;;gi|QQKj}Y}aw| zLa`I{mVbzW@VT6F9OarV*^19ZU@_Q!;O}+`mvkum5W{P~rN%971h#2>&H!B-C;JG2 zRzMX3OxmG2(6CJJ>n|s95K@>SOgp6r?h(emC>BrtmVFq+v2LAu)5ppcaT1Q*2+D-~ zZ#c(xpsa@n%i3RWRp`$xaQw@80cp)&sq|BM7`lajPd%J)3of|^m;3`q`69{_xX&+q z!e|ADwFN7brUl39$>aVTV&HZ{Gs}rYV!gE}-h{CBoAl{jJ5)fYAyC$%sA3%-^4Du0 zzq)a^HO3NJY_pTmA#M`iofjq-huN+fow?C>oSbP9 z{G<2|h3X255xEfcAG4qT}v= z&@t@>scGw+(Un%;U>i+LE|9%a*6y1si&kkV#kj}UEIulk%7QR$U-G)w5AhG5LF zpzu7b2-rm{I!52OabQPsmQUO;uP1DcXDjc-G`{@-t{V)&xMSH0HSVw{DH6R$Xcxm9 zw&HMNJ;MiqT)dPL5NP*)c4RdveuXIGDB zyh)4J8}5{dJw^Cub*Ux7<=k-P0p`z{NUxmAos&kPtfBNdJBv^fuTSRU#5BpXykfPp z{c2CT@McjYC7qu|WXN4oBhogNue9X(6-&`dBxs>-K0MDeEgpoo{pZqjHceEnqC1R` zXt~7W=HsqIg0^k`)i)p5@OYP__~&=*xPf?V-DMO0PtsozQLo|LKdKs%(Kj5v+{r)v zuuXsM1L?>Qc=ysO3-Qb6y;yYeK6y#A37$>(bWN|Dv=pKqz+<`RG>wMZU9e({8mC<- zIFHy8N}pV@B~oHQ$V)E#<$dV`aKrRCS;=Kj~J)R0aK zOC7>OZGDxXvi7PE=J=`|S9YTdU(T;XymUm6pY`trC?!yG=89LaVApho*CK^qZ(Jtu z21j!=U$brekp|ARXE7D|F^Jyd&v43%r{A6e$4!v(T)RG8VO*Dara|rOuax1hmlIWX zAZvD91TN|8q(S$!RoYLb8@-}`4Fu^oqVY?92JS5!B4Vqz7YHDz%s|gBx5d94u2#7W^$e0+a3hBfxh?B41~4? z|1O8s3S$QD(|2l6jxwF=6ep-IhTMevPp#gw9&s}C&wgXDQ&MShi}rTjir4ymmy8)V z=7H`$k?cZZ)ku2ukL$eM@#vXZB#NW&n6eXsy1OvF@^UnAJmT^wr*_AyO?amORKUY( zrmZ>%z_@qdw?5d3?R$jKq6ogLNz-uGdwR_}z3HbPyYk$lf{0WT#>AzYccP>sgQeFm zUq@Onq_FVAt45`q=c=|O&E7u=Fv_F|-1jt7ne-o&z@QPuMAew>X*|1eKYnGy%!0XG zSJsT1!vfj7g_B4>`_mflC!(IKLFzM7V-#NCfd53OJ7p0f&9!pLMNp^D`9jwcW!x3? z@4Vi!}27J60?Gc=wLT-7e8`7FW*?6up!G+eGT5BDZn3ujy-kjPt(xEN>cq z)aWH?USx39fin|9Nfb$~Lub}2O+Btd3k2GUkRYXiI$4kCi6QsRfzL(I{AK~ez-Ibl#Z+PQ<5sXSalf5->@fJMYUez6j&5#6 z{;Z^vr8DQ!e(8BhOJaMDCeF+e!$RGzga<67WC>!WmV8`pr84|@?4$}P(ZIBgz#$UG zJaKf_2z z(#duNt5*4U;!x^#4RhwH`IOe-heuHN9-JK3@XRcio%4!|HY@<4BlH3>Oor_}gDZg* zyXL~tft6a^BhecV=5#>vtps|e2R2$fZHd3VU5oSu<(Z!X>ulklQA?bMN2%Tl#&J zjda8>Ha03<`Q@+9IiEl6PNy$zWBpR(+gcXxd?4&Vp5~8(^ zZ0~@{h>N6{|2qfRosVPO=|Fk*uXQA_9q8C|t*PyTnDy8*AN<*6-q+rpl?lzD@Ipz! z3hLe}o9+_0)1MwZTY!0k{HvhX7u+rBufPi$+!StzRNitSd=vz`LARvdzw!*YV6-bF z*D{=Q-hTXH4EMSyp6A2sT?>A5(a8c|lE#B|uVWC~jzh54kWQ(;{n^M*6@)x2Scvi2 zjZ&wZ2YqjQgNmQ^@Z&p)G{rgs1Ee0oyygFEn%2vxTKv3{63r3Ri}@@gf9lkuG`w2e z)`RZFCwI`h{gjX+N-TX-9x=rfKA-uYL410AVy z8{sI+-E5!?KQxUOktg2Yy4iv@575&%=>6$cTy*;_VIoas4C3XVL{kBVI9?$o;9uhz zJiNYRgJtn>azpc-S^`apYP8iVZ9Z_%nU2>2%_t#!lE4lIcxu@9toA;%oo+`y!;3dHliXcU03R zP6pFmdUU3bo^=r~$|c;+NO**&OgA`kPgTLhd-3xH#8#pU_LF=`@h;#6J#jn3MJNAP zmPzoU@drNDB&sFj==Qt+yYT9S&JJ`AR?Tiv;NKEt5G6m4;SELa@tTwPsbv&%Bt9lo z4x4eUdMZr)JPG?ChiKaaUbTYSLC!%75=Cwx!(rB^!u_{j+v%pcD6z0M2-}9(LFa<+ z%l_-VAuDN$_^l2)(_MCuSJ%fjRSWrLpk0QCrQxs-?KV_2flKq{tu@85D8|a~cXCu| znlgRXNNftj#XX=?!X#I1yBsCwpyl9ycQ^hFp{E|Lp5qYMoBTh;B^8>TW-(hhF~j)L zjRtz)g{snAf%{4k5pP{!8$)XJ5as@uWcoK%Jeam@*x?Oo38_IByy2O#zgwa3_Xg}_ z6tkF{PvABsc)!hlwxBY9)OnmOk7srBn{)A+WdylDmIBTDdzFBE#Hnon(vfBZ&jIHS zrrApl&}Zbi`hSp^`>y~0es|J};?8Tx;}@~{Ca<`qEJe-nB!vmT`+%c>LAGvZU%~-g z4o~P<4lQMIuC6Gyn$v_0vJO zMKiP46ed3O$}38)J8DkKTVCjH|1QGSFVSS_U#*4vSvphk? z{GK4jZElfZ*h^I=i29EUG`P{veA>NRj*^jQZ6Qmm8HseT+`olNuphkX`XOk_vQTf&FUwM+xA@sH#U-J&6D*0E3Im=P* zOHEamCYBYcIGHT20y~qk2!Y^5#mII%@6_T>mDl|3V#ED`*b*)9IKz z-mL=sk8ZSpgLamkWRVSjGv)Z^Y4|e!Gd)v1kOF=lAjF>nT?ayfi4gd#+D)1$o+|5g z59Yl}4AlnSgwh;fArRlTynW|?TuUlm0BO!e*N(a?@QZp&Ow0nhtrhz_m=679?cZc; zZgUj=v(&5rMqwq`$i;^A!0mQpHC7~6X^7Qsft35{Uw$P$*-0Unt`Zt`?u33lp$P<# zXT}`Yxl^tGz%hg6G{0HJ41R`rhx;WQ|By#NS&#B3o|V8N@$xn#_28CL)MA<}$dKz1 zf`8P7l)x8KWf?t9idyds4hFP$OlB1O_Fn&xl%4<*gJAbhj`X0-@c&IkCnDPiA1NN) zRlvdfw{d${^Plzdp{u2H2H(3YP9MjOTUYCqs0cECGZb4TD2n`bvJ881|D_w-RWtA! z)Xs(Q#R4RQ6k{Y`=D*vWVol8&V_s5HZsvdH;_S0S=H%Y;SsN`<-xs{$BKlLmuKaHQ)q3&&TWmTF3pJk645GdCv7Sr_bMUNepATYdLIA%Bu>E$X2(Y}b=8X?K= z!>{~7g$E*?W#^WsD2V;)@k7;7(ae`VViubj{nkRS{^lV6+y_{jS;_IEb9pW>+UIDD zl7CLwxbxV`Ak+=O47df)x_}=9b|&&4(+>hGk-(Gp)>Z>oBXD~)ZE>Oti9eN5JXL!u zDdeM(rYJ>$bjXF#zl-$hf8gK?kw#H?m3HSBoK05O!s$-#JV_%EC5H!yK&`KXsq!9D z|81S(%)5UWAitMlGO<1`6a!I)9DhGi{iniMQ=*9^n)^_cvYBx)@m9;v@fw2c=3S#S#Ocr?%UEM+YR*4o2C%MkJySvN38Do;eX0<%= zvb$s+i_pyP{>iDxe#R<6MpXVROg2rk1<_~I@Z3P)fO{G|c)DMnNV9wJ?poY# zF~(idc36sNGMaU{9c0*^xFvuTCAVHrhfoc6F@8`M8kJ39=)AYs-b^+v9%%F+mbx3!bqipOcZnRcz(NaB<~t%24`3Y0y!2 z7Gqo$hAo72{%o$`@2A9U7@mf=wf}X@;IH5(rLjd_@3*_iY11UsE1uB9^ls+&uf&E* zc8b_m)M?-IP#bqYlqvQAveIC`$g@k^kSD{Uws2o`MH@Nk?q^xgSCJ(86h-;K|<28Jb(Dbi7B8rG( zKW$>9WYw3?mHC;67cxpMVl!e;X812fdflLpZ1bJm=>5S7u@xphK?3nS!$(5%U!DVO zjXTxVf8&RCw4u%_82{mFJ~SRq6gdqyO2}3MET!1DIk4@HzhBAl;|)&Qn9e-I>)Q4Q zZ&-(fHgC(TkxkrX{8J`29U0U=+$Zp_Uonzp^|sYq%TVh40e1_cx(q&;)-f_Wnh(uQhkw{i)y^b^o-^m8ePS`#)xvctg>P@inZ{14~)mz7}!zqmPL(Z>|PMk1>25 zw2@BGRwn#^z;F`-1w6B?&iXM zE_i=MT;nP>dObx$kaAW~tCVDsCeW@anEFg0pG4<}2EMftn4a3YZcorjA6)G-~~9sUW3T zaAhf}Tty((L8$u;mto#SZJsp-|B%P}i~zU)prUBFQ z!nC{WtlF8r1hrz$g8)$n9+bE^;0xC!>VW}cT2Fi*n$Q97!L=1YAjw>kh*Vo)ci>_b z+zJozbF3#SDGJy<2S+`@=H(P#kF@E0ClwCjC52@5G3WXM;d_2(&@~0m8;!>>`GWy? z2F|~i@vMt~xeLFn1e_djpDNhKzc*7TFOG4pIVzhF`jVNRAoV?#BCTgOn#X6&RLm6I z`q8KrOtf7|fy4F%t`^-#pV=DoABR`5P%rLF`Zh}s7&S7cTTAkcx6W)8n}dM&CjGQH zJG$`=_X40REliCy1UVCa(V#LKxfF#m??en|!5y0Uv}sp8G1i6X8=WWkM1#sZBKbel zSp=t(B+hgH(~&+y7*d4qy2l=Eo~ZaXYcuO|g}bJi|2!4kB1;3K`!|$;k&1Y_mXj5b z=VW{XaRh3!yt?0JM&DcG2U+ZatwD>!clvodtvPjgH^V1cYY+*v(*)+o;D*FL`Tw}@ zTN!@^-olqrd`^B}k{td@8?P4S-*e%uewQHz&N28eqVolmuPGaFQF_@J55WhTj!oyn-?DA|xphJqt>0+FzU<-Y80+9gyt_6;h*kykHY^93SUBS zHlCGtH5tu~Lmj)(v*t;a_)OxF-B4oDa}aFZi@;ZRe%B#mQD~e8)fmZLVM089A3Py^ z`*i5>zv6g6s98o;#CaBDXG&4!UpS{8%}qvOBiM#Jxc%L4aPp}YNe`_3b^qr(@6IRD z;jOi=hXvcCNSVVjR2A?-kLJCo)P(r9i`c7L+?yZJ{RNd1kTNI0k%oi9M69rT-XgI8ZPdM_6z9dC2VI@?pb7;J~H?VKYWR=^~R2$ z@oP~{5hRNyk?KN46#<$Ra5TjBE7@M*zO4eX{iJv>X>hL(Ui$hsGQt=`BBg2gLJvbx z8T@b;@A4(S<$6vK`jTG}UU<8jD30yX+m(J}O%AYH#%Pgd*vnNO7R+A?e)mPxJLwj4 zxd#^qb2qg5zSY8BNT>%3dF3^ov%sEzm)H4E)nI#&u%rWjI6Lx|)1 z_|D;O=ABVp_W%(z31NIeul3$1<@V6Vk z?$iIzZx0l-M#PJ6`ZGgU3$jTxT z@3%_W^XeR8EBf)d@y#-lu(d#D&(x}m{4fDzRWj(>@LFW-c0kv4P~3J>PNH)7qYG)^ z2DrKC6p~_w=Bxi_=&QnVQn=GaddOR+u?htN+O`sJf;!*R(EUrv8bQj>ZO5?mabz`H)#(K}tD%pQb4Mewm66xf6aatcJbFZD|_$eucb(IQC{`xm@$+6V}o}pYNW$mZ&Ym zxC$V>vebmwm@Kd|S$sb_73VnIbYgn-p6N6@a5kFZkY=iY$Ac9WGWY+}T8UqcK$6IX z_c;#dQ(kd1%(ZZ#1!fc9W84DTLY!G=o9oZMYB;_dJd(#*{&;02dUthM-E`Kx7C>)r zy=#jNATlaaU+uU6HPoZIDq!H$VN$#xd~+kZmLZTkuO{_Db|l&To(v{pTWv>E{?E!5 zN?FL_N9)`jX3?Sc4=K|XOSx{(ks~}TI|{esWqf^dZwq;jehCr1t5HMJFi@pNKk~1) z)Fm4?E%kp-iVPNtEkmx5;@=Z!6^x4ZPy7A{3 zT^UZ2(GaAQx_EburUNP$2r?Fl@1ZJA#)DiA&>^a)Hzw)IQ;*Fx=E|Eu@p>6*4Jp!8 z)CyxLGY;Q1?2tdG=K%nl(W`)b)a!(Ux`M5DQJoN_!9u zJHj7c>!izB3&gS?Ed(k4Ht=5iy=*S5B|3n+VAsfR*OgWb}%N|0r)ZaNI9yDq9mT2}2E{C|AN} z3RiPJ&$?H7UqvckMpUQ>sE@YY5v0-ANta~6STDm}cZ-o@Lb1FDPDWD>gYw?iS64}W zQ9)_iO+IzYS0mr=zxr3UF5B9jhU{Mq1DK~o{sqr z>ALdw*m2p$mw$X|{b!mHDN>pCoVx<}lScTbV~5k2pZbWU`%Hz)43v@Qm(pcsoF@1+ zS0hryyWh9K#_8mxjisbY3D7Eh(i}QD_y(V8jKs8A;E6Qr#a-8+kvX(Mf6Nb>#Y( z6Ja%47;9sR=v|Je!$a=JKP>S8hF*F(E}s)bY2QGNutl@7diHvnu}u4n=i7mw&J0?~;4 z?5&lIgFewks5oK09lJ*Ji3gw_x9 ztCte)ug?|>hDTeX^}Ebu87)f~cLdwh#A1zBFya>I-8cy?^l{9_k>gIndQWt)MY}{v zIv=0(==?(;QR+xTGkl`7-?(B1H|;1skps(N&nWcl#r-irFKL#)?gLbii?P-F+t$^mjK%y8sD9QI59r|^({|lU6^oS#&AO53B_Og!O^2io(Z*k&AbV7{TGKPa(r9y{pOxCazRTje0 z^POz>nU1eN?!6Stlp9s3v|mZN>xEUPi2chYMwBhhJY46VHlgdtUsgqqwdZ$o@#S6k zz&36|+Qbrb{M$xQvJ>~#!gsdZV$=84tgC7D0EgZiv4x&p%hOd={|;&O(7pvo&j`3@ zHMgJZUWrLv!J#H{I|Y&sRerZ+D29xd3TNNHVJr-;c20o@P$$J+c$gULz9M^|m- zKUE%!!EyY|JCrv#XkU&SmZHvWsPuTokM#Jp-y0&JURQPdfx@$?X(Cc~a(d5qSKd5@ z>tc}mDOqE+zD6Gs1d0X&7^n#SM#3VloZ z+n9Ox>u3|F!oHuG!-<(rV)h$D`6aMY4bj%wrzp#aTiKp2M7s*^$>_DMpt>%^yfEi) zYd6koe*x*JmHMGNvNO+S3m>XMG`rlH;T877OoeJS5ApakUL>wk@ib%rb_X_Ha|k&r z0sGDJZbgJtw%yg@P{>Z^Z^7M~g$Isc!z$X|grN-+pFQ&)TL1%XhN^^AE9I@v|5Te| z+vWyS;7i?pF*J3u@5p9DF!|S|QGbGe^=p)e_Bc^1re)&F;QnQ4TrGVc zmuqZ!?xZ>4kTm{6?aPHq^ODtlZUnVobefv{9kOCzdrtELeFS!vjJ1Z!ZV)&b-%0-6 zGoC+H84A*RB|25W>aV-){tCgj7*EC&J+?ZqZ8W)q1^kFKzSCCR4cA#wq$G7!{|VB7O>0HigTU(lxdbM=S{p8-E9WnCPsRP-XdhxRN`zF45wCjpDzkOnNw& z^pfKqd!b^G(Be2$A;&TsAC=+eY7pJH2^Cw*(EIw8w-5B1?SY|R&r~kLdmEuIjlHB< z;Qq>p;jm}QP{QjTl)HZ+t)~CV{@_2#cX*3h1W=f3Z8?ge)?k1*_Uqr#CoL&g(6~`u z0rc&F?nTt~m%9o)$q?#6vg+b6J*07`T+Y{pu#_IKQRE&KaCiS4Y}z0c8wYFAA5U3} zh&0370ZiLA3lP!?1zj_F*0fm%w$ExrXWTDMOi%hsrm{q(ay0IHh*VmIK+Ks9yQRL- zL2?qA_kLm`dhE&j3+I0e^__6z1lM@`$vRX@1Z64NPpj=5SEDb^98fFdjJmKYZjNR| zpLO{`FG#j|M;AyKb@Edrs%yROQG<1tIs}Q|T7%_9f13+-ttA{XWOQB+oA|kQXbve0 zR1V*-0cP3VHQ?>&cxjV!ak2=tH{eFUJD@cy9PwQHt+yu>WCPJ1L)U6#9xT zQ3228h4%>tY0*>T}6kI0S?anyys=O>U`EsM5_W7W3n-aJaa0gl*V z*0Du7|j@;hqI4@=|2w&8v0Sfd8I)woR~?)t5#KUjuHg`KbdsE}o_ zbX4;o+`gd@t6)#PMzV-f6uqaAxg$kjdVrX{v2#mAinLVgp&{|H|FF5XNW{1IWKE7@ zFZb&ve0K5M!KQ`$u0+RGZZ&1Og9U!kW;5ZbNc)QszoJ}Ui`3pIFN+*>@`32~^DE&w z_Nc@AclZ|a9&TTb`N)%(vzZE;sg?qn!wPx_cD?N=8#QTmP@}{MR^~|@H#ZTqQV=T@ zjvp!QIy#T%3=`-8{+VrnISm_yzO2AiY(PBH~*-@0H`{wdyZm2aAL^ zi@x>gCI>!c${SH(-NE{!_{bT%$GxJXtA@~BJ?u3_R}ei*&g7}#4N@}8iL&;hDG11_wLHz zwX(W37!H1*B4wPWC~;NgnFHn8Gh?^;5}taWWL2g1e4kGaS%$yxg9TUe^5@5zBfSdz zJkq7vSs3GBJ?JpZv_D8O22qiy1OM3u?_RF65(qHE4En;omQ$QoQlyuu`yHSh7QXr& zvtCBic3vx^F3l~JmNFM!euFTQ3RK08FvNRw@6N{;>PM1mGBc-1w+uZ56*@^T`Cs3M zYknd-jl&kY&a1DQ(~37cN1K}}9Qx^z(+w4grlTFl;R`rzM`YmSuVr5v1Nq17kHz1-|w4-5$U^;6V8~E7BHYa+?%j} z-s^2wM*Q)P{@k&9CtZj0_CpD)QG%!yMgNO@YO9x zS1?_xR`t@qi4?T^8~|&kNgAhTA5{U)iO^}fui$hw0Um5~SX9Y&?&-js-@Q+*_#zzJ zEcAtdb^ZqO%IbTGH&qZ#O?61DCP%zhrVR*elejM8lf2ZP);`n~IFEjgY*+V*b1zZk z-HLgUjB6<1x6*jyFK`Wx^&YTpyT@S|6!Y5ntU>;OpV{p9<+V(?8nbbquU~B-nsAz7 z`%HSONGI%y4BWg9ZS3(ok`<({a}~){>U6DhPis~AnfZzo83&2XQCXrq8w2Sr zOQi!pc(kD2fn{b>k0rJ%SmMM_r%a`hfK1Dyh;uC{iQuBJXmogkFqD!JY3<;`IoJLK%nb7)MSp z#&;29k6>2?Bhkm{q{D|8>o=;mN-^ZhH@Iw=m*z%nA>~H#tW96M=lG;?6XLkW$#J}E zRTjtPdDV+zwfK*rcJy^qhM4;bhV=U8s@k7-Y7gV^Knblz8M<>(w1sM^*4|p(%!U!Q7_5Mxx%M&**d0{<^tO~%zkcG z54S5LboQPU+dNaaahEYE*&h8M6?u`aay`B8id_4Ld65CdiBw%0{)BpKQ}~MMZm|>H z;RUDMxmsm!L$6*yv*VcluC3(jgh+EV?8o-(CbW5&X?uY0bb+pu>n1Sstzj~f4=di3 z)d!}SQ+X|qJhVZ+;)O}^3Z+=BEd;S1Xd@gDAuSx2-nL!$a}ZN{C^(I^$+ z=Mu3$g(H&**H2G4Rej+%id!rtCeux}EM9gE+}lWd=$9h0yw_aCf>QD?LeDbMt80>WQtDQ^i1FiXB}kLYR&f8)fWP@cf+FH?C#lT z_rNO+U|`J{O8DNWv`}TOCavyh&eWoip|sn|QqjEiTPRPFY`FdQfmlnB-Z~+Vt(2$Y zr709wi^{7qjYHcb^`%rzL#TUuSF-=E3io*td~f*4a>kDhELzR38whu0=I_#x{d$e*3ukePK8o7wTO~aQVwe& zg{X{Mh~&@+)r!V8TemYAw{p%-4-{&)4<3nqR4+C}yrXBfrCLui6522bIMDTht++HS|<=u2hk}p7&RSnRvb| z_~OzLS|dEXM8et~y?&|>i{>~gT-q0o-&uz`tF<^dbGvJ8;&bTP_9fb})m_^hf`vlt z@wt-8hEv3T#M1M`p{FD_=xv*6+HR0zr%GHU4st8YNqE}Hj`Z7ppNkSOh1Bfvwxe9{ zYR+D8th+!dlzc6>k|9bZsG-)|iJL88&uZw%0nf7vMz6cFp5J$wfpJF@3XW5bzt(x` z_1bxH-8}+!$5^^FpRwBYwA#7vGk4aB|1!~VYCbR~C_(B^BmCCBY6A@rDtObiv&xlE zc@djoE^8XS6Z@Byj=-R((mCgEId6ACxuII=&y#lISM6SY-j04&S0UuHzJ5fFEaKGx zdm}P(Zb)iFE3=?rr9R{ja=yT3;r!=AV}=CtjTl-)8Ex(hH*N+R?Sh~5irbXv$TsqjE(t5RA+X-6D`r5|U|H=t~!;@cOOMeRZ{ zHZRCgFCICe2yu=4H0m|4n~EXf+0^0MyTfP^whz2!EXRTw`^%qBi?E`JsejxC>p=ju;F6pCB#c-e75FU5p1?Q1&@a8Y65d?xb|lhreGHOON3+rT?IIp_xU+9S%x zRHdjc{onQqN$aG>Q+#8j)xj>0J#}_sY67p{ta3l~V%hB;f%L7}YHWfg*;XP0xzM-S zJs0FAYWk_*$`04v;N+9e1@drVZ)tUB6VY5wwC%E@rov_Z*WHilzM{Wuei`Ui^jzG{ z&A!wsD|<&y0BD;ex>b1qAg4&dxhx&o?0!`3`U{)RHN!nC5g8>BYo+zqX2?h`mc=5f z2~E+i@U8}La4RgR1-(fpcGs9Nt7pa6-NFHmD0WZYtT0e)CYZO$yUX)JtmdGuHoSo8 zW{(dKukSp3;)CyZVIkrt-!tAUX?4hLl{r=}XqlWV=o|%aFSwxzBF2Gu`X9_84E4Ff zeo~v=!fySG3X|r@^_Qm(p5J{)9C}npfvm>z#);NwL!RJH*g06~z+77BQu5ZdyXp~} z@o|u&_ng!2WuREUK+&`g0~rI!vzsDrno@;i9(Pt}@yAMnZnaf!_5!&0N0>t}^=F#C8>} z{5|Q!Z}F&n`DS#D z6yH*9nc$sM7%YmST;=%ahn9dt90VZ_MWFuf6XW0=2U1a#X?_0tcds|PoC5xQDU6{I zZ`>9-q_WZ|W2Fq0G&x%sl2P`&%I0rpjR$Ds9k~r4Hz}iMSL47pixg%Gm4EAO7M}-t z_dlA>uBWF;?X7Y@!8Pz5d9$(D&!B0~ZWV0ZkyNr3c8h>~N4AzUFyD|;9~$Ff*7m9F ze!Y7xZvDv7F1Mi}iMWHuIOl^N@BDM>w-ckWpf$plr_=V>m|U@7X!pJC*wVqDn^sbd zYHK&e*RpfFYWdtf{~Q?&Jg!((^6lW!ZidLB<%hkCEXSZJO~wzwwxDBhQ$&@Hb#}cf z%vBw1KJ8(z?Ei+Ds2l=tnq>CDNG?`j2kJ|Me1HSE!M z-hUxOWL@o$Q0R5nqmcD>4!v&kkulK_i?{ z7f4b66vQmz`i6P|@omwh>Tp)nk1&hou;2a%U-d4%Bv128$NbI~RQlY0m1ydbn$&;0 z4ZdODOc@r%mXckiWFUq=zSE)G;oeo{hz>wJTAX z#ZRtjTfmk}Hdq1aBbNRE+1;hA0sJ}62rv=BAFee$?I{6WZL z3kD}yLPi@)E$@f*jU>dbS*sf=54;fvMHp#DP1QD9ignNebNkswH&~`=zMh;ft6J&> z((_Rq%lsFzpm~+}!RwBJ>jB?ln!hHVpF%nvNPRu7^4j26it+k~XfUU-OoB6+;4paR z{)i!CuH?Pfid*!Vmv=JB(NV8-L&P^T4|>L^Jf>I%KlMY%J)(qAd^bXpK!tYf$?||U zRQaL|n5P?XpF)tg=io?R`!#3lS4uXn_2L)xwV}snhS<{rpTv)tb#j)K9*qm7dX3n; zW9${}^c1+Qe{!bJl@A&bt)UHxUh@=uku4>II@g=?PUw@5wi;IryiG6EL2o0=Vd<)M z)!DhUg3_+w?^>`lWA32jk(nbnRZ;fAN^cY4@yp+on%jkFg-kX&GQU-j&`DFLhpoR6!}dPBO=xqM zYN!+Kkx$*Za9&nm5{WD0$1{c^#%*2t|CurrI7#*`j5;2V@b>YUru#+)xR>9cJY2C9 zS^s`V24K0Vq44&SS5b#-bW?6koqRasr=y08#6O!K4z$14QM*~A|02z!r_lFmbA7;7 zp@1&or(tTFCv9ei{_Y6+*0(BXo7%uGkVUR{&GX)kF4`r50xBIynrl7_qUu)7U*{j& zo--KuVInUmweD_TZ=Yp}H&t*wFd88ctMskLuPc;N&ceaR3)a$8S7QOerKbp-EHa`a z`)+}nh(fYz_D)&ZPjDH%T^;ZxuL;y6BEWcM*-R(W8+!UB5GM$GZ`|N!mXtkhPgr66 z%y$+wT(~a_$PG{v#75JFU8a&7@w0X`=9|eWN6S9C)XV~@S zX)|)Bqt{Q6-?FcfHCWJUA-Ta*=N)BDEhAO<2zKGmf;Q+E4fo8U#vn;}ZZLYoxAf`# zFcZXE*%9v>aoTbU|3qClb1|5~Ze}-W>{wdq2(Fyw6|<68;R_`gAn(~BA}vqK4yRP9 z3qKo8-U!loypxXvr13`a9XNAHbb6(Gh&XDzk)SIHj2pcJcFOpETwsy#9CMHNpo5`- zaqfqdW5^}q*eIzIK$sP5Rh5m&haAt!jdT^cjOJVlbE=2;s;;ZT=^52vg%F*Dj8DTO zVx!R6YTwK9t1iGBE>-EMkp{7Q+2xOlKKf`1d~2q@Hldc2Z%I)YG}hXQr+H@UYu}Tn z$DiAFikNzFbj*nOYJYO?8n)OGxIX<~@}dhq7cqvkZQ=Me5Lh=IX4i}=m2Y`7e&Pyx zM8N%C$8Y#XE-||{VsCoaj~7g=&S;)AzvP)dET4#6j0T323UVUipAXe2!yAsCB4x3U zVvCQ%Rkt*j^?TLDVPtp4pF@J6E}mneQGYS+=;#S9_M9Gsv5LLjDtXu zG8c@_S{FEW>3`j7#6~3`2PCg!`^>(2g{94&L0Qjng1u6d;m8%oYF*l#zu=z=h@lzt zYzo-(;yjY>f)-`!>+;cRVZ%LNiar)T9Hke)?<6w8GrPx=*YejhcCMH6?a|5 ztN+x2Et`>qnO}8~F0*MUBZz=Fx`=|1Bp`uqAIdF>z;`H_YKmg|h1J2GV^#i@ys^Ws zdKQ|Qf^?mk%uFb^y0@L`NZ|-2e_(apP8E+`Nl_jqK|Y4#2D~_^(Q`ni1^`&yMM+AC zM+RQQq25Aa(S+nNw?8r?)Ak8ocT~5XXp$>m2nC z4KOAe(yz|b&-oc;@is^HaDLh7zP7wkrD=?U4w%IpHK~u#R)C)lDhjuwg9jw~?6L$f zwI2&w;F48`xunbRY(z#V$0M(_wP`V+$Hm}2%k^0=_I>L6gZss{P6=FwSsyNsWbV6{ zKbuq@zFC2y03qk2%@QefK!+oujp-b#*STazvwzZdcvbfZlskC($PQzjXHd-8+o@7j z%=h=z2Nudzq=s>k!;u#s_3Aq_#R$9>-K||B5jv@m6uE?GDr4O&l7kcvox6^g1>0S> zlw7bgCYahI>XR_~QFHzg#QvnR*2R{MctXle@`bd2@v!odTVh$02cKAxi^URsRrm3!!=ot|6s!+vFV2)P zj1lnDZRdg+1oK>3XURnbq`#Y`c3Q!@Gc120=O^AqvFZpfDjJK0=rJv$76^j|TjK3} zhL+7b#(b<1gMTl6)S)RFbSGk}0`k)XHqI7yoLEhkFJ5&lK=7tEaM?jGB?qFsCroi~ zvw^7v-1;5>yz_8l2b7$07VfF^A{lJgS0uO!|NJ6%K<%^-qCV?G4HVfstTX9Eo_2Eyc^ytkpzmmAbat-s(eNqbAB zRj2)XlvNpusU^tO=y?aH#n;1?BxK=7=PbmZ8ON^09OJR%a+ra4<%a_0=i7n~3!7y` ztJMk%)ArHLAcWC%trm*ayYyOXQ!h;hHB&%8s)$q?e9F1=oXyRQCH6#pLe4hPUGlL+n8(h%UkgSaiRc|cdN1}?O?#|J(=|L zs$oXL+?e@~zMA`qD0J?H8{|ApS;B+9L1JE6M;)MZu0vr-`&7{iQ)8d~i3!-d^r{j; z9xifSZ?M11g9HEb*Cn$WkLmN&iMm(YmTQHiRzSY8LtamZ9-#Y&oMGIBBL~j~6Lar~ zeN1QQlk_llJQ0b0nMDJ@=qPF>j}Kh;$%jG+hKj7k!X$8}i=l;cSpLeIQ9w7DftZ_b z4?EiQj?mktacp7fu-V%F{{=}6NB5iyjLZ3{I>wD@Im+z_esKBj^`-TrMuvli_fhyC z)e-|u)77H-I_dG~^tR~PG(ElVG8AUN9%`P4-;x5e=1zK^Doa)tS6V0&)YqXYTNynGTT=0* zJA9V7*OCP=+P!uKXI|oJ-L^Fb=t$QnL9^q038=8tTkBPEQ5x1~vvc4@)jG#81;4z) zRuOOEP%g3p{<+!02AvVzb}8W`vEGJH4ljcTm`i8<@ZXd+r)Hq0dJ8gI@$fA)q%4`V z3t`Ko5!%Fb+x(+vN%T)vb!)sQLK8G!p@grYvvL(;R1@)mCfxJT_|#WmY8L&K>R8x* z`)+l+T2jLU(r2v6J{&u@oYc>sH`orT%?aqP!FSOsMNIK~w;R+E7{etQ?dnYSgO>2D zu{OW#yANQU;UFi9mzK=^m+H{Qbq6YCBguV{Y4ouldSlkd z{)t+`U5j@q~jOUoYKy`fXm5PL)esL?n|Dv|Z z-d(qjwoAi00i>KgrEjp5-viBCU&ns+llE>D&(Hg5*9_b)-=xaDYq6ypCm|M+k=UP> z$ za;-Mw7QS5b5#wwIfP*xCv{Ofl<&2&8&^zoLG+o;Pup7(5i);%+3wUPdtSV1C%Il=R z`&|#XQZg_|Gl7eEcoLFYP9#r#qbX-uew5Oi)R0)(0i+8&AmI&fp4;l69!$0AwfXZz zx4c`_B;ef;FzZVhg7h)ek8>kCT6X@clgD9N#tJ$k2BR+D+AqMY0R!Y5 zVdy3ENA@msOVNxEQ5xRUPCM+G@2Jw(NdY;9?$fXMu^;*fHn)j}qeTCQE!TPk%3_Is zZm>Wr90YE07#pgygZ~AEtZ%-BJ#W_ErYX=@1r?T3PZ$0GZdZp72$R7N(*WAV6;%bC z>504h@5yad5V(d15z#1tQBMPS{h_=G)c{y}0`M{01D>T#tLh@?y75dw^*Qvq5=}qA(Dcif~bTTm?(&yfFRgn z>)MS9yzl&H=J^e?49qYygwFkOcrowYd(QuyoA2Ip8AgRE$5gJ&&{3b6tFR4AWYVVT_FU*Ufq|OnPsI>EB=Q{&0HVo?#|W z7CgV6-oL>xR#t-NwN;qbi&Pi{q`&ZIh8bzD$~2>EN{a6A@6&-{h!4@As-nu|Zau{K zOkKb{@!P?$m!C20JCAq!l zEAu1z%?!`rS-g`=?*`9a%6LqgTQOm^YtVT+@6Q+4`mzNPp24#o6X#aMyYwt`WTo@K z3-&%)X*NFWgQcGAV^a_Iu?Z25LWJM&44%b1c=wj)X6ED?&-q9bzq1pa_%y?fWv9B( zx#R!u(QkML&*B}to4GEOIc>9U3GN{+{`>Tfi66`Q?d8WYiQ)v&`*;S=;vKx3@B5SK zS)_e5iDg6M`0q;k{scVIi`~ieD|>I0&ia0BJZ2x z-D_^a^uCud-p`{y@BrOSC0P&;@B07x!#j94*~y&DcHa3D{f1}o>}4Xn zD{DYGLq#1!#Tl>s;l)Q~o+Lqq-q6)9$JDJ-jrpm1%>oI}=$0$bsHpJEI&tv_%`#-W3=r=qgcvgiyn8b?%aS4Y|V{>M1-$A&g=00&w*Ju+< zn|;gdw;Wu)HtNs{hnRv0&(O1>cn9wyj=6mXF`>rGza`PBG01^1?-XA4<=>{TUmt`@-=i+557RknlT*192fv1j3eK&tx+3 zt6f%b&t+J7vo997vv20QNkn)S?{M!UF2sqr+cl<&jRMIQ!2OQrxqQt#PNFgnBvNJz zKZAF;_YoK3Y}@E(W_TAvro2uCRVs@@@jLJU-~4!~EJ2xsa>QZV|H~8H6DBHS@DAQZ z9Eb~XBJPQXeHnvBP1OjutzzQ`-&?4>50B@U*TQk*TqJ(P)wc1^YKR*|7>SP`<==P* zmR%XlvQJ*J?8XCmc^4Bu;*==Z@(>Ec-Q^ANPy5Ec=+!O1{OiO9S|F$Pz!j z%TA#*wkPn@h&{`)#$NooZ3fw~toRGw|5oqbcu4V6osIT@1o%%X%znPbLGf|z1E1Z6 z#?RU3nBRLdx>YKxlFe=rYyZM&%p^?g!})1_yPr3IAuip@l~l+4-itA6)s7*>F=uSO z{1HFsKji~-@Qr{A$_wFpPP})x_YoK3{G)X{ro6T`^J+shbH;AH8TY%ahv>?zAdSZaED6+M@hsyUl3X|N;>N$-PF~C>+aTtWTj1~{C;vN? z&bPAg+j|1+#9q@oymu*%ESn%^x3kx`_>Z~zGiSUvG1uqXFezS}S|qz~G);C3@}_o6 z2+@{8D1`Scy_2$jQ;Tc!YvnFM-v+}}f(heuBSCt53BQ{+Fl zWxj!U6BspKe@~xcGa^DikQdMaEJLAry`PvRe~np;Gw@yhmXh6x4_+{?@d4oq=sT>ksYNz0vT_zc(IM2;rH3=vlmjcM%8T62!@H zY0$kqp>hSCZ`UJ!>(OB2>?I4Se;gfW;dCZ`mCI%7Q`s;${Lh6G7#cGT!<5Kb2td6i*x#&nb&V{ZR&^b6I<34 zRu&cVJK~<#cTjDlB^tojt|e<`&{zOZZjOf(TOT%UjdzgS`ofxrYfqe{-c5`+l}7`+2%^kqGZ14&gYFMit$P8h^Iy{0#z!aWk3KBPQxn`}7$1 zEO^KJdD^=|^=`iRx!<`X)vbs_7zd=WYWM_QhjBB$rN42m8MAKc{HkYdz0Py#19Qmz zt*yevi6h!y7>_|aQ22g6=ZFJwaq%Jzq!l!G>9_R57OY_WXD+UO)^>do_ng@D(SCBI zHh1*y_UI^Y3gK%YLdtbc5QdJvaB(&U1~=>vQ8S;nqqS<6i<`+?g1Z>g5| zj26p-+|oyXz$TR6?{JA=S+5wDefXTRGKJ@F$R@VuZTkxJA-D7~UWakJcOO|cJBQzA z$jRlWkN=OU54VQ+6K>xV4{}Q%@_+~QM=^%T1z}!pJ!0AAL3wl`*YtUPCgNf1QI`Eo zW045QQ(4w|2kC`$;ub0Bn-Q<_#$OO0uiWGMZIJycu=(5KtPH`iRGj4&*$Upk#;o-&RJX!x^R59V!P43oBgGm{h;UXl9iV^iEWZlpeV9QD)B5M3a; zC?Vn5(|8wgP+a4Z0=HE}-0vuj0bPF=O`dl>bLc4M{-zivB_Nzhbq!+fQy)G(BDUO> zu$YQhwnSG>-x6I#LaK~+(j#NF5l1SGqaaSiJ!{zLeA5=bx!uW=cX@8p4kk5hCqrrT zh|*>xA?|s+i#QOr3F72kl%jvH8KzPK^-ry6m;j_m*0?khD7{RE(L(i&FC6$*G@0nz zI7Jh>PzEIeC4+z}C5xF6_)e%rq)mhYS$PoRLY#;jX&^0`L(Pi3fjx{@>9%a3-(*sc zzDDMQMvt%^Ic1vD*ctO&$In_s-xy70AQQwvaT(i=nljyd@aU09qeXpv@q3Fe{XmnL`tPvA}5I5il5>>t65?)pddL`%1C_-q)kWL*;F}9}(6~eOrzT%H(VlJYzb|jwv9PkDn#f5MDuPq|~;1zQ&E?%cGcp8fhz!c zJ;W#T`Nx0EZ_4KzLaE>%W#-&K1e9T1u9>;x#rya+_9wiM_mD5d`$ink!pD;4AN)avZSnkd9nizU3;)Ggm}lYhlI9=0Kn8q+jG%TX>VRjjS=MX= z-51nt!u*P!mj?cMG7ztj0c&F*1Lgx4RPJ+f$in|yLHk*j_9w>&Cj;7}drq?~<{1mt z2K^_`=6Od<|AlzswV#Pcae;l#<9|G@Z75p*MVJrn95#b*$@rcvI**xqM))WWf8vSw zAJ4uhfd8wnnSCqPjw1ex)_)Y{L--sr%%=V)=Au9!!oP{0i|7CAzU6C2u~*-SgP&m& zuQIXA?FUi+D=SamQ_}vsC@;d-#22qz%CF29evZ!b>%W61@Wv)y6VHEC0<+uP&XD^0 zZ$G2crw8z}ukR=|)g?k$!n5bno&FI-Y>vkYZNsnKFrzkUcpER( zJ-^mBP8fgg95O%;&~I^%AD&<969?YFqqxxemu3um{UdY6$!{Lbna?u@!O4JeB_5GZ zFfJiC62!};ljlgh5KnX2jJHhl#sz;wP2aGcIqc+J{gTUugL&c*8BZ$K--wsP&OX)C z1GkHV{@Zz`3Z3&4NB_}r8%3@t_mI&uUyU? z^!oq$7Dr~?cx+-)qxO|g+Z@#>ZR3tEX@T4OrES7pIK(nlo`zBtuahS=uYNp za3pgza0hcWU>lR+AI@a>ZIz8E4#dTaGlb#}jbTzLE%RCPB(nE>nJ(aFVe5Jec(u@< zR8{5j*}c$oln=-c0d!AMtn$9fSTal&qSj*=n!iLdm>4D#NBV-#9TRX(Ga^KfR=7`J z`M>vL0_4m`{!H8_oH*RLV>a#^(i$Kf=^uwTcWg$tjfkv>zRlCZ4P{UwphQ54fb0mM zQpOxMbs`NS%#q{f;8BT%QcEGkrGqq)Hh3tO1_HHlFy9PmVnPtrVoVL9xKctJ zmaEXTnoh-EYE`PzytX{4a+T&3XS1plH_h|;S(DO2nu4^!19$;X>H;3=RDJFVkmPb(Iw>@ENmHW1C-Dd}tQ1m1|pi{KSJgLn9zDM}E$hnK6mjGsB1=BYg@X&EI=AH0HR@J^&A(4$l^ zkiR8lpz<~&Cy%7Lw+|&vyRqFSEc!`rUljQNcZjBLcZCFeE%x&`(6>B1rG&b02v?) z$uCVCS>up}qkBQP0((WsQC2Vwr7By&Ba%nRTJJPGqCd=6O} z*K2?}pwNIp%dWq+(oM8>-zyx4@HxtPlyefx51FyvJmiqXeo!Qio3H{e;7OQA;d7E@ zPnYH`b$J7_g&=@udbMd^@wm0ee&INT&!v_h`ox@>gcQDCTKHqYya6foEbjTjN|MSy zq*M1w6>Hnm)N9m9sc>w-b;fDwTbMT#L?vo_*=Q#ZGIhGmuQRbl@yhdIQxB!2slFs4J zM|PA2Wk!DR4_)s##!1gVVvhaF;3C^WnUjAt`NBf}7Y^5G4FTrD79lT`O8HUVBfsZI zXbWJjzG%Q21o$785`$7FKi0lrjn__^BMd+MqJ(vL@XMcHICqurS6GU6a;cLa`5f!R zUXy?4qJ+fD{B;BpVo)mO2k+~ty;l?ra&!4}`z7?5SSsb`>MC#YF%6%8(gyfyi#f@k z7hOnSp;XHc98eZ;KF_7Wfm>gI@{+?dpJS<)A3O)rS~T>1L<9N*J4w&nUL(Rsl%H6$ z13%~mlm%r%eqaEf{i5sf;0F@xQsIjb^`0mdAU9_dWk&w|){(&;!sDf`^EuheRQs1( zD}lB6+&VPK4?moR*toE~qUU8s|HuP845&QYMmpzwf})(mx?r>w^C{m7yH}><=P*E- zj(!k_LDEgWe~BMKejWx?)&T>wjiG;x31DoX2sTjW^v~%SW&3pchJ-b2@C|${CI7X* z-1B0Na+kj|jsLCjl<)Yb7~XmHI@a;+J;PrQx-wYmx}Z?`Nfv3w|N6J@T=B#jPx+32 zi<2MsVFzgIW6w9Ve+qgwpWh0T|HK-PeSO_xxedUPn^-TQq7?p1v7G2+J&dUZn3|VtD@# z2JkU7OS*5Xg?;~mEX^A>E-$J4WF(r2)*ivaG7F!VweO!KO9*6QKNW8OW}_z|kEkYC zyE_ZZEP7s+zJHS}E|6)(xT%n>z@V792me3O7r{|$Uw66VqX<*`8^yqVg3@{leEXD8LbyCv-97;J7j<`*0UE#C_Vo%HX)hW z@3g)S?NeH6{B`DMdj;Mj-VZo=*M%(71Pv+!5!kCQnRDwy3~8-!W`XHYSy0-32hZT0 z&3M6+rJNR)V@Maygwr}#DmO3rZW%)BcQeT!f2ou6Ke!W*JYI=s@P3wLC~Cm_=~4T6 z7$j{7??L;{9iuhPrM5f(Zz=0G9ZM!&`MgWEw!I*H5Kr93FeYdBapvNth}x+E;ii|p zHk~Dm-_qJ{mi8)OldumVM~co1f^?83FKyxhybw?4z#H*cD`(Gf=5SCbPj3auCh2d$ z03kE-07GN>%;jynt6$j^)gvuv`z%^(ZkOh_)j!oYEG*S0G>T{!Q7q9u1rXwnL|T-l zAJV=Ov||={A)acmezDBmsDnISIi7hJa{7lj1FY zfk5z3g$TYS^mWUXZ{DzG9fP*|O*(b`xkWdlU)%KP)2f{j?T6Jh-Hu|8+*sKZmQ<@t zD|jX_t=p4c0%={^Yw%GT{fTh+a7T_u;`t4D??EyUFcsy6 z5&3FC`KCL(bC0g%=jI@MnQ&>BwIg_k3?oPu$VC1(B>V6x#?sXIzDUZE|D87ESLguw zbtwJcAqp7>N4|qBeOq^ELt>W`$S4K@@wWv9y?Rw0-8$s!!mljbji{YN7RXeEWFrLN z+e$nTVt%3giI>W`jGs03^qO_N@pdhRrCMlTYW=k$pays#tZ8*Rs;RVI@73A$>zo_%HP z#(tgZ%;wU*I3-Eo0la`GVJz}Hhip3*tu`S%r1h!BD|-&EaPZGBUg3M-;}d*}6tdPS z&wN2i<`l~E4DkY=?Q#RoHO25=P*yu)GEt zTkAKjEG<5xyZ5R^ZO)Uzwjz9vvKV>^;D7Yfj=LQX#RX<3D&7ejlaOQc=!;H1>pl3A*)p2(8E@vCO0`_ z>vc^S6XA22@Bt>Fw0=>-b*zfT$Lktol@=eH(Nlk>_Q6eIOoY#6!Ut;|xqV%+9xT6o z?<6Q+3d2nj`+ym}{)x{pc_Tf^mLlcK*na2lt%suM=YgJ)M_n)z>2s{OeO!`1_3)pWLBK6fu zJw9AJ26Ytn)h=qtA)iCBXZiceN?}K31|P`eN&R(kHX;db@YMkSWm1fblo@=udJ29y zUlq}J88Ad&O$r~cWeOiIulbO_mZJFe;%p55K7#g3k5PkI=WV zB8;<2f)8Z08#}$RH26@-$XJb;s!#7KW`06JxCs9SjOMOmS(gZYxg`9X1m_asbH#e> zG=0b{O)wuezV2yTuS>$;l!ecE-$or`!sp-1{3w#~#GF6>!P*t6LeKV{bWYl=+a-*N==t|Bzm8G ztQ(UyXdJik^cKZL^t!Ci&xDKw4A#*}98gw)j;`^TOL!Ez9t9Yc#reIEEuLiLGtNT{h(M@*VsWmKMAOJ`%wj@%WT@-9bF}3iS_Ee;;>7?$~gU z0;3zd4m0ofBr+#=#Av65?reJ{IAVI*hHdWTw-7!O<5Ru2oJ(E5Ipwm~<}2j8@oK8q zrW=YRO5+;RLYlm^eL{~CFOlF0yj>w4Pw&`O?$h4m%#GcL6^0Fm5qC_FjAibT&&Fq4 z$yeu}Zp`U}aT+PR4(Oyt@2ip)8Cx?gVsD)*5qs-pM8-ByBq0r?#Y>aYPT75+!s$at zG}tb-%=7U5JRZSoaR*u#{Vhp{#b(S|@_~3IY9DhW<`8p}M+cc(biA!#LK-(?4)W5x zvFi|zhcmG|2UiHzs%1ITqdC(xl`Wr+=a+}e0ZKr zltA>&52*)TD1#CKB?3wWln5vhP$Hm2K#71N5P;7nj^HB=gn>7XFtAk`iQ^APj&Dv5 zx>c$J$0vBl#~U==;ZqlWk2$}~==N16f^T0?)lxznKi~~Kf;hj;kO8tlCdkIgNvEYI zz*b<-;1#~DF|VpNQGKGHh#C?#CTdFb3lX{}&57VYxJ3yQcmOZp3A}+v@Cu&6J7jDJ)cOSY5W-RLdz%y$vRloV~6YZghoY}+_{NjP}(nYzH=W8z%*wWFu4F&{j7 z(Nv@U;~+~lk_oaA!FMTS<@5jyN+Ll2nnbXP+8S!=%|`rYIM{8%Y$x)u8h5~a?X85> zuCGs8dweEempL@2n>}v_@@6l9>_I*({MMEvfd@V>-aOvGBl)jpiRWDK4jCW|WO5xp z%VAjO-v_Cxs3NaG50D)g6n9>L6IzssD8KavweQj|aHdIMoQ2~9@;jBsFLb}ZvJ zY}g3NmP7vE?~|-S|8(p&0I~xE0T#uj1GvT2rgW=SE?=RU&B)27`_0#8z-GP|tP7I^ zvQnP73fXDT0OW;g0!$RG14>2(c3-Vgtvao!yj*wO%KdF&{C=;$Lv~=$w06DL0v!Mw zMb!tu9&ND7ztnBelJ;f@CSTE?zgKJ}m5cmDegPJw1GM8R3oufI4$$`1A;0X6HqKh& zLG{xYNqPLkABUz zg)4n%Z*=qx&@YfV4^RYXQS3=%y%d*W5JEd;*ngS)w@Sca1U=`Icw*BC?cKT|gGdBx!vBtTxSC zHlDE45bT#FJ^1v7x*Bi$Ak7F9%SAL!D^cAGJ3-l5Cd(Xg_CjS5WRf%w04u_5A#7KG zVUh4B`$zjpYqy!LCB|R#vv<*ZXgi?(Dyz0Gj&H~W*+k{d?;2R`GP6M&NQ?F=l%);I zYy0n8vDQh_yoWX>+7RO8km^4CbHJ}sDX7086J*N|Z_#_e3YZc8_(mox{^bu?IIa^- zL)p5ooWcI9IKC5b<9hL5<4w{3CpeyDHa|4(D-v@{q9r$FN3(VYqYNd_7zZYKKSAB2flV<_OnX4#j+-T3at-* zc>FO21i!zjcR0(>dpviw$o`V^EAK_`{qXps3_>0Vqwxsry(JoOFYz+V&LO|U3K*wQ z;xEA8BA8`gycI>Ce~mp<4qo8zEhA?gDDfx!Q3hdu9_(WzF2J`v_Q#%1zV79ygYOo9 z>~(`N9^fhop)VFl`)p;Ct&0nvzw-Az!G8B#+eyabcZomj8T$!EpJ3Ufn=E^g_T?;; zuJiZ#f}Ix>K4j58PX{I14^0vseV6!iHi>;wA3iS#&7%E=y=;7GUpp=x8IIpI{wSyI zx3Vn86yzPSHzoF@lCduMuJMOm0w2fiG|u@_-WuTV$FnwECLMhD_;WgNA{{(YfDW*~ zx(xej{Sf$bI&h8Tk1@+TC)}j{+buR0X{_jn!Jn%mJ$H)lXUU=$?2(G`Iw|M0{BZa~ z5BSdYQcPc$(*gF~O})di*i#;DSV<`45P$CO8f=*b2>mf za$7=P9UxD*(O8=T@_-V5A^dqdpz%8BAmSK*ZZ20Aow~xmk7wjaO8oP|6Jw_6OW}JX zw>SIi_cD#MiPM=9|9tT0@&Wej-Xqx89QgoyQ=`559oRqSP{)__{M*8CL_WY;C9IRd z90+_vSQ;SLwy3oBAHUj_=AUcJJpWluLtW>nrRyfqdFJA-{e*oV4~Ix5{|~&Hb0h z`mgeYzn?gJ7rkF%_Rr}EI+#my;4lx%dzakufYkV}cJU|tvHr2h{vQPImOHfC*;5o} zan~h|KlA_{7<*A)fWD()9u}t?8IIE8e|WWvC*gKfPtiJ{(2Uj{d5cV?pqtsMa=lMU`Z{cVm>H2r2{{g<=CR%^JityKv z#s7nrh9>Y=+q+`zJi=e;e?vlFOu%Zdg~NPcM|(vVx%|;o*TB1~JD1sxy0F$q>3@dG z718oGzv~NYeY19&+l~fy0u1R?`kP{gt&dcGKYwKZV}w=4x;Z9IfPWD&7k*7;!hk^)PdoVR%+J;f zx`%x5Bl_P1R^tc!jlBWnfj@Midfd^+^pb;LZb5kG_Z!+x&;!~;T`xaw~k=H2H;>2lhLA|D5E$F^Nl0 zdCc1$1vUp9D|T(w}a7BEsoKpqHOZp|x)wmQ1&ruc7l zA)Wv5IsgVK0b5y5_qnBC6nc{=d1chtNb5;-!}Cp0P9Wy24n z11fLWRNv4`mqQ{(`mc4?1opd}yx=dmVDRMhtCprF4}YW!x)d7StDEXR=Gb}W-O+Q* z$GEc$d*lMc9z4&mr|vTB3u>Ra{KYU{vsETW_^G(;+o4)g*f7FJ={ z=Tx2^zr(PHh}XFDJl-M0+r*2^+mlI*?`m6~jF7b?ZC(PET6oT2z*-W^r7qibl znAuNsGGBlz@>DZ=i%>IB7X0LA$vyFJOoWJ;6-IhlP<%JRfB?3wWln5vhP$Hm2 zK#717f$snTYMV%?Gh&U$9(}b`Ve|!ze*4}lxKmoRbGf$OwYGkR2ER z3t$3lIGpJ8y9kg6azRGO3)!JV_)w}$RF$YYQ4OM+M74-&6V(w=T{@O!;^cr#kPR|I zR>%z5fdQ}pCcp+50V~cH=(J1*PVca9$c06FRfr%z^!XE!K2am0CPYn%ekS^bsJVcC zrDF>LwWMQNB93p!0C}1bK{m(;Ss^oI*CzrNzy#O;BVYy0fL&R$15WR-VaR~>%CPtP zL=A}`d&{aix*glso^ZE{&GvW8% z6Z*I5ILJV+aZg|YOa#~fqk2TZ4A=p~vQi#E_o&BEhQWqW#zF5*$X`jDUM<@WFdaC2 zp~s}TKAYz*+rQJq>hiv2cJ~giaC~-jmGj$UmTsSpTe*KZVeOH9lIYYL&s@;yHS5?j zHeO|j*0JE37Ibr4T6|#|xS@Ek}-W|4Zd=A;8O{`LY1u!uoYk(gJMY@!{A>ak0V^sWo(0cd8ac5?pHaY4fGMyA#=yF?lmndZ z(bqv)rPs7}y-rkj+wC{EzXMtFlT&%Ga9cQQ>%|g=nS`bN&voi|0=5E-fpuxH0j|vd zru+T|9s5vy7L{n}{!y9V3)gXB`2ZMFyWtaI8cFTNKBRYjAsZ;kx`5L?>ZEE!dSkow z92B{Dbpqvisr?BRhQp8kJ1`||k5Rv22(T7lUXtwr^h+^@g?35($%cIg?_RRz!a3XZ z%JN=8{+od9?xkxkkPZ9|%mvs(2hc@v2IPH=O<>%r&fo33{IS#2D&f4HQum53r_K?^ z)MtzzM3@76fexSx=%ly;>K(L0tGD{8p+We96+5V{qAc?jlO#Prrroo{{8+VhhrkIHM=+kORMNSJ?IKV`l(bU*}M6jvF*<^389 z`u{WN$Vw-r@4{lr_oDUy?C13x{1@rI24%|PCUs10{ttJtRR)=HkN|Z0R}T`BwD&X<#6 zK}GikQ1+MC(Johy@_xVt1?7GC=lvc@RCn^Yh7M?4AgD?O9rOn=4yUMgAbCpUjXCN} z{bN8U`i3Qy-}J&{O&0i)PA6Z|=~mw@dPqK_@J^$=Xy4Mlt2=%nQ z!?(JB-4x?VG#>R%8Xmm#y8GL}mO<3orKF99K4XGWK>NlEZ#NWg-re z6*5D1U;r$n(YNTc&;@h?-3WA~i2ToM`!#Q%SMR_Ihn+?8p)ZgV^1}YH_g0zEmjdk) z7yt`dYyi4|PJaDKAM=J3)dqzAwa518-7LY z!Z^b|&7mX8{Br*uKz`5BuGC)k&zMd$_Eh9CAJlm$_kQ$zFDgGUk)=Iwa*gM0v%#Y= zk5F5nD>{{5AV29m{ku$>)0f&C|BBk5q}M3xc=f#k%T!Tp%fdA<0XCB2DEi!KTd${1 z6KD4(jcW^ZB|qg;OsXoXJpKF4G#P%@cKsXC^d-4QzXxsKAF8b7$R8I0{Hd=FdnC8v~48v{1LNEA0ouA!6gMJwk(M*>~R zTmP7ESboP6tHl@WeZESqhMSQ<2nk>Tazh%>n$w1z*}y6bSso!q51*X0HdPx zt)Y{MrPihb{mXl9C~OIFR)|`E6;f3GhyJZ;PIBqhKbO~IPO|LhFDx68$g&C+a`-mz@*T^r-}U|KpZZtOjZ*)ld#(;xv5{r}ef58j%1`LrC8E^YfK2&cssI1# zb-EkNo=E$@{&Dv3Im_CIm&*2_QvZUyE3dj4?Lgl>Ec@kaUK_amnB1>#E_F7b)W4kd zk2Zj*AIskRH?RJ2b@d+0ng{ax3i7fy8RJpvU(Wi6KJYEz;D!I{A9s>(vFy@-Qey*3 z{VPEKr~}aE`;e8t4V=wj*@Zr(qApPCUjh0@9boLmFYoiSfSg>GO}xyq^XM5oD`Och z%lk_GD?tC8KBJD)zFPSi0Nu-`F@pW)`C~>UXah?9D@gyS1J=+t;aBg)7y#WyA7R%i zmYqR;#uBmtrT!J9e~kO%JK)6|;`NVTKGC;=Z3!jzy-2Bl1?eAk0P^&vL;SM7AS*yS zF@&C*QvBZvl=@eo{!s@k4`SJ;LgT^W?BF%k6aIUP{dlF4bN_>QS}SaunGFH&GRpwxdM`iBjm9dAMNI zKHYOEU83=W#l8x&0j2&W&_7oWtPWw>8&obAXUL@ikW*cPg#|i6HnscT86{LU81~8{L zi)9Q|Jz?y{69*oH}v^ui`W4Cgeh>o zx2SE&n*X628o5`f|L6TH9GuI9|4(W4&y@qPf&J%L7IQp7LHmnsEI?-cuW-N~fQr@l~qDii+S zi<1Ajcc5$djKW&+cQjUvb>PJ?9wd|g$^ScaBhWu|g>Sa<3W$rh|IeP~_NyMUwMk z_y1i~y$inw8-Q=X-Sl19lGYk2xDJp-{}0W#^IbP~PHb`f+$1YOBHAWp5wrE6x9{!8!vZ}QN2esRE$ zEcTYm?>9N!lV$%m=mfffj)>&0e^m+;ujV$B)#E6wkCK%6qR%Mze=OL3WZD0bbn
Yi8#C@xlcMdYd&U@K6E6|6`jg8@bv#@H^ZtY?APy*geP&& zB+*_)s0Wlb;KaiKSO61ocu8^}IvLRQ_o}3EwEdwgMFg}fwc~Bq*<5mvjbF$Mn@72a zy05hF%_!G0hT3|N8L|TdS#=LxKqt@*k=)z>4!`K=_f8VKEbJMy2Vnm% z=ex7$|DX?yaggtmTzE1%z53&Tf}-$@s5NhiZdPimwfMdf`)T@BGQszGL!zg%z* zNR@;)NuNRA5O}0pd-L`{$3E!a9g%F15wc2(izLsHE>fTq=tiI;p)4!+Qx&7G-O8VF z+pzAEqn}*m;AF+Og71+y`Q&;e9h`Oz@aWLC9mf3?miL9M2x+JscJb+*(%dl9Rte%77nImr~k4uqPdCSTu2} zE_6a=KXjw;P)vlAHsSZ2<-3b>Tb%j4%6#?Tz!<*a+B{)5Pcgk_nY7Rz$)oG)tB_5fIuc z)qiVZvdadg4JgP4fNg3(c;cxIVQqjpuoslWI4|~qPeRQbHU5_F*^upR(gL^dO>qlS z)&+950brUIxNY~DknOEFz*{!?8Qb?owgH^iu3C*}1HW|XsFu7nrhUei zXumYStq)V&H?m2N%CVxt$}3<5tO&Cw>6@e1Cx`E9+t#qV8gyU1VkI8jC0*uoI?wNj zF{m!BF%5;`*+GQ2f4Q{nyMNCJi*Zg5+L4sz6Z-bDM=(o$7?wA7_#=-Uk?g<#SO61X zLl~tHR&HtA_ZUWdZz#{@`QKU@Ff<1*KgdhnJvCMSIAr~5HF!1v8SJdA)suJZ(aVU4 z9e8!y?v+=}~Fr{G-R zbJ=5K86x7B;~%nkZTbq?NXH*Y)>kC+BhvMC!r&CJ049XZUnvoL^u3*2HGmnYN81iO z{c@O=I%OBYkfvaKpptfZz8&0u&9MJ|;k^+X5~_VMVt38dsMsdyk+B^!B4c}Bi`@6m z)g7_puI|`7{p$9;##guRSwgh*>b5;**S77kyuN*pby=Wm#3%7<&f|Ui9#fKKF44@Z z5wYV)#=#_O&-BQB?bD+6HNF_Jr{=zpFwEOv*q6Bsd;b*=D-KpIO-=5!%pQfyt?oa! z_*N#c58p8C^+ybQ`x(PteaNsGL{C05>{q_+b9vyqI6|g}ANevu)?5EF?2X3^`+zXW z<;%+-P2;PXKi$5}s=PqPMcXgJ`o)X9>wC|ctmLcA`-^GJ`wLf?x92XGDSCH-_$J=7 zQm!%VW708|P3SV31iJq50mhkU-d6MHLm?`|b7VRT1a-AT2O$>=%TM7S8 z42oV0{|ttuyv`#Y!&oY>^8l#CBM%%(`%vbOJO&|i{*bo3`p@%L!u;e@K8pUHApAU) zx0%A%`IOH>)d#OU7cK8auZ5}~Uj2~AV5t7cBLH0r7x=vTNQfa~hh>El(8IM*gqFDe zzXZJ3dACZ>KgS`1`stRh3!kyN1N!$KN>j?|RE5#Tw1e>`+h*cwp~;}(DoLA{1u)Fd z%?I@UW4QVC7eRB@*B|A-^^Qg3M*DZ1yWVtO^D!G9{=M(Ps*^8t)h=G195Ub7U{+oG z83B5!zh5+1+a=X->)_5=F@rnnUR+ey{?sW=ol~dwF*n{WIKQvu*|AX*!ovOxyWTFs z#M!|j{&N-Y5o5Oh8dal;|37z32mLzCe@vCm?OuMp{puxi+(1XRzrUjN69+M-r(PfF zRxVp@dHqk_`ZwPcyYc1M4llGiyy$m9r{Rgc*GB&JDQC{h^O5mm_MBzZ7mc5(KY2w; z`GyaCbI-FK=7-x>@ZH%i_3u_cd-nbH%Ivx`FI*n$U8#b~n(9MO+&k;{+aDEYT&kF{ zbo}Y&2ZwtuwbTE#x=GWAzpklVnR#*Z@X41w;zk)}Wx5AGb?a!hq4z^J;%(0dx{dy= zGorS=N?3Jf$is^{iI0!gKb-sTje6DIgnIwkX@5QYYjgW=8TMxvt)3@B4X!&R_pJN( zw3;dEJsZdUm7?zObN%2ybQ%IRIrCjzTQz9gV)4;Aqia=mY#O?2z5ew9Q{2+m4{^FT_MbrQq4U;_ zt=8Y-^yPq%)05Of-IA)Q8#Q-YWL8eExk~eh-BFBAFQzA>udUs`myxzn-OCm}JqMQS z_vhXIz1HgtTd!`Q^M{sgLWsxS0nL}~zwcvKsp6*w%a`5?@U+ZH*>60#<*+G3Z7chC zt6xLyx9CvTccEe0-r0AZqNi`ZTfX6i7O|&dLt~N`Z@ad1iOsXwzwNUhs{Zib#n$t5 zt+ab5Ecp}=@j3RiV}Qm9zs}mt_0K0=ZeQ;FIuHBaEn80++iupFMlE!oSE)MA@ushH zShoF(!?&-0x)cA!|7P#$2A&y-M_=yAy_Gm9;o8>tw=>7D`tae=o!k!@k2-~S+u6}} z=}wcAb5EyNc)rf9Mupbn`yF5Udy3c3HQTjcP`_vS+V)mc{yZ_Y>aGLU=84V5EWWnT z&%DME%ewVnu6pYq>;69H$uD>I*i}yK(CR?6TH3BEX%Q+8yGE{1F-n?ba3?#rv)%;H zKReygZTE7o^WG+%{|)_9L*vHCA*~lb>ux$$yWwQNiMAg7{rhkItMkV7<7|hxcUzGA z=JCW8E8lgF|MaQptB5uK#?BqGP;*H1eGBj3nfT?4ZfWRl_Zd8U)NSvi?KKWo(J~uw zY-tDI*B4y$)hE~9SS7UXU*5(BnxUI=qZVdnR(kn0>D9{y?AQi%|MQVl`2mEF#3j3mtN^hPDL(N^Q->W@|~XLb(1%C z87oJ2IaRA)yG!d*BGocdX057f-(}ce12?ywziIom>%aW{Y0{)s(=NK_-hF1-ZB5th zRnvB>Xg6%)u$QsYvfTYKF8zI6e2WK*CYfDztMRUN#vA_tBW-=pcAg6yYYcV0XMNZ6 z=&PGKPnW%T-NUPQsCC_r)?+)8IMt_pSe5aZeXM*!^$7g%I70heLz6|4u0% z?C55{cjb`>)7h7oETUIvFsB-+^wbS7imF4x_o~}-j>d7@H)oR4?@T#!YT+!+AkxIF zl^uRMp4Mn+`Otutd-sm%*5LOqotND~9?=CpCX?GbZ(vLAc$tc?T-So|w98T=eLr z6FO~pc4x0?M$J~Xy>&I1j>9x+S2HZfWWBJd_p)*4H@7xTGrPWT#ML>|{M!FqvvczG zD(BDnx_Nt1x2VeAU>=jQ71-@wuO$E$e?JD`(T{S#6zz9aSkS_?SHl@o79M zJ1ac;vl_FbMm3LyY$w%(16g`so({~|u=#1XYg2qrCiT`l9O}`)gBsS3O-Z z{K0bD@!D(WFsjpBS2M5gzcO6>N8;SCGiN4@`R9yjP_SdolWTg?g=ft5qi>G0@2)Oq z417NI>S!HPSLJ+#mi-&GI{NxroA6N^+30w^i^*DVZ)TqET|MK9e$@)suaB+vxb?*M zZwKzo-rix~DW+kQYT6xD^&5HiKY4N4oovS>@A9X9KUn3bTc>;1YNT)Y@8#a^6H3(R`E;ha2IfM4D>9(FO)rOg6zhgfJ zg-8EnF|JYQ4x{7|R_D69XPvvV@`&kxjDL4NZ1<(^;SPj50dAfRrynr*s# z^7ox&(N!s2`Tv#h+?7_&@GtD-S@40&YrG*Q-e2U(>uz{Ft-jemHp8FaXTL@mcG0VS$41|z3S%(x%g%{Q$21BG zcxOF+WNeFxr=0yC&i=buja_kj=D(R_cIkzK#;sPhZB_o7``PkURB&L6W^W#!i`wq* zpi`}`nPbSUtCO5KTr**iO$u#}UJ>}Hvs@zx})~)>y%?Mdv>TTv)L-)Iukv1l||j@6Z?1U@E~}7 zIg3RV%dhp>oMu>Qhu_pU{c2yXy2G#McFUjWX5vqQYC~gF>xXsJ@AG^|r6aG}&v)ow zFTp&=a&gAF&&j8%#Do!}*E5s`w)@&4yK4+nHJZ2LQoE?$UXyB>blo<-TKV6dGu=Av$(q%^2_3g2 z@6rBsRJAeHLi?;3bb8IZQ@P{1bWZSfse9r#M#bpVw5KyFw|n^R^B|{l9XFZpt#HUs zr(5&CTtl1(RChPK;!y6)@a{f6^i-m%WQMD_bjz3#5k1%7;)!!HvvQseEq`)ag^(BK z2g*&ETXFvBBXR$f-|x~$SKH6|aLuJnD<_y+8P!#}aiivm0gmYghcEZ{Z`PpO+JUQQ zj$P8$@$xRyo(pSt2#qzraUH)xxFt5?m_el7lxVBx)33*A8rpYJSJ!t*UBo)-^g6c`7u0^R>sOe>;=v?7JN}=H8`ClT4ju=F_x# z_DpyZ*m>Ci{R!6Ae`yA!cG>Bry=g?;E#nFqU;T&my|MVfHJ{{5gX=n;8h%J)=>q2d zl!4QFnXa|cnW3(K&?n>8X@hX@z?Td4r}^4_|5sb>p$VHRz@SX*mamXN4v_()L+YO>#0`h)r>*) z$OgzX4|{rqhT1VTwaQJ`_plzl!Ag6)U8wGpsZXZ4`*rP8YnXn6?8FhOJp=m2EzOSa zac@-T%usfoMhllej6!v0{}Q;O{xEj->9^^&+O-=QXgg+^=Hg_x`RieKmSsf8ME``3Ocgt7ZK=qtx5!3@hJIH{G&B zb7$6Vu$u10gy{W=gZ@#kY&E5}uIqN6LvD;Zvp2L`t6l+{_No}<4z0<)2v$ARn)x_i z#s2Go_lEPdnd#HI-yVHS_qY356E*a8w|5+{K-HmU?~Pe^R_QHz*~h50nz3b#KkA{?wv#NP2bGnp0-hzieds%c2`c5;j*j^6BG3%`b|bOYOlW3jxqjl;_Fz8 zFw3^5H4TPoH`KT7pmRL(#?yrRqi0@LckCOVbUaI|iiffKf}<41oRlQg5PfVI{?$vF^rJ~7G!_?V-+mFm; zcifzL{;z>yS)*>Pj61XTt5wj#xB3eW^;Q329&TmtGY4Mp9C+?t{N2V0|Bh4Xa#ANg zXPou1pIYbSG^(qa(7<|WzZqvOugxFk9B)uQ?p@cAn=!-cjZweyCcx^ipq}a{h9&4O z8#L*yTEeDfaW4&9=RB*|iJ4iyk-iTT{Z)U_wQ?t3U7vXCPU|((4tHIvYo%h)Fn69I zGk*2g_xH4{HXcd1z5m!fcjoTPHD}V)dt22|i(YQH=!%8P@vd){eKLN3o%t<$r{!;| zelIFd4w%^aj`yoByRuX!XKE*XcCTv8?5U#~`n2Q6TZ?{~9F+LcQEQ*7|FrR6`e}5s zx>jB#k!gM8Y&Fa7%ikK-siVH{NTO-(7WH}w#a6!#GxtF|VzY`H)2O27FS$2*EMGCj(tp#IiTCy9EXZ+hv~pl$9nbwH zum09EZ2v~h=u@Z3+k8*zjmX;9w|b+=XPe&knQ*beEHjtHW-+T85D@K*nJTs&VxFkB zdA`u!^wH@q2h^V2I=_@{c3iV^TL&w<7Tw?M52E{vjd#9GA`o=z8QJRVw*0Nqft(&8 zd!9XayRt{?YP?3vT!-UFm@1pbzrC|s&tO){n4bn(Ot9>;@txlC-&7r#-qo72*PQei z%@uLhhH)EB-%nB7X4+rvo$vA+OOk9!DR*ud?F$~rUSsMRHRz>&VS>(0lcWodhTRxr zOV`KQNi`4Xh74->!jZid{IQXh|GmtLA*?~AZ2wlT=STN)u<|*W&??w(%p2eG32qt7 zFR{jJbVDxbztDYo@P!v;%vm3=_A^skyKK$j+?iF3nWgGgJQipzI9zM=zPU5qqsCAE zCFyhU(na-*f{fHdZ^UWF&xn|no7L}=h4bpP#EH?yM#qk64$<<^3^;YdGS@pdaLcmb z{f0)S7H2ZbhZrPQ^H@Wvooc8WaNU|ps7vwZc6u?7C+W64*x}~oQQA8j-1FD6Ug^`= zT7RDy4X?hPvDKK%K3Tl=eO z*-vLBG<<2NUA>c4U0dzh{na|J(iwesSWvvrnfGc*-I@AVPc^knUQ{FGR5NGR$09B^ zdvj}tp+A|w8Ff2b?Wa|>yBjkd)jjwBo#CqY!RNJG*RbxdFE5O<>o+?4Zi1nO>yVnP zuHGB7myTV{QmV11V!OX-_SbK!+f*Flq7Lr-T6xju7gik-2YJRft7V?kd~o(T*VP@v zeeP=OPj_HiXpa9dG4t)Rev`68t@lr2(pl@1lPbih*q%9%bw_LbyVVJM=}k7{@aI06 z5AT?_uQVq6?(q>;9^0z3v3ksf(N~+l4W7S~X_H<4jC)MhJPkLd=j5Sh4F{fxx2*6w zyUlWkg;B?<7$sC*zA1OatDxVTvYUbu_Eb{ca{T74QS)BE(5|YgQ|-X}nVJ87N~-uq z@0xD+9KC7hT^666WV%Sba&`6osm~rAzI)uLWfikE*|RboM!o&iAah;($SG>t+Nz6E zKHN46zNVk+*)a3-TIKQTGcU_;wKb^LxU-mpb^^eB)V&c=MEc{rf(ZarW zT79xLywgMb?U**tEg!qa3`-0wUtcB5p>l##i?}X1x=&+<-8URm&iwN~lYeoJUocti zb-6~9FC9$SF|PX*osYJDHJR;w^{+j+(`9_U(Vx^~KHKf8X7XfGtr(Ro+sX+;+PqG4 zKR#(rhJp3CmzpE9_D1@dSasg0dV9Rufr=SlpOx#x=q>*9_TCJGhPq2yt3SG!S+S?r z;LMBvj{DSPvhV2Z51RF?l5AURtF$~+d$#eL$FI9(sO{|Wvd)Aj8Rr5!-KWtI>Yj>Te$0Yp#&0lY{zz{M*_N1Bv`j#5MrQIH-w2-1s^02;U;O{$mP z4ZU|H5UPNHBAo<~BGOCf319pZzTb9scK7V;Jo}tEJ3Dijf~C)6H&;KvgsVUrH=F@o z(~-Hk@J*EI8muX^=a%3Uz)!~O#T}7qxf{r{^s$ed=TkoL-p{IkP6U~mu zGF!%g#Yt?#WYcmSKjql&DC%hOBQ%f=_UoK&vpYBd_Evck-h!dF5Rj-h%3J(?>rVS*yHi~%c; z@ojdp*u+qNjX-eN>EOr(`>f?2Cn-vS?a~b;fT9c?D8vXI^K?M|0p`9(=+d2NWCNBK z!W^lzC~g_(fJAym$kmE_zdt{7WPM$lPX)Se3V5?+lCyd7G7W)!e3U@p9{w8fv{lP2 z9t_xZi7Dzb(iP85Xf#r`t5Jz6V||pM*YQsXC6S}9M&)ae(RwPUZ6zXXfHAkD3u0WI1%p>nOfO$g@0#&NeZiYnbhEVLu zeAcHc@D|dtm9Lxi{7(BGsQ_mnZ%k>?aY+q$-rhLp<%_EUqz4{haT}<7F{$o8wPM;}oA?5E&D+ZZN=?y*SKWWtPvA zhgc%ph~zcV%!?3}>t$~sQ;i>S&8QXA7w3ukcAdZ9^ZNt*h+MJalP!4 z)dSD0@1&heV6h!m+)M?QhNl4q~119^5UQYl#EySoODDd7E9(*rK%xZ(k* zwA8Y2j|r+)Fl+beA;;!QsLEJGj*QTXFhN(pgTY#9Q62ZDVq)E0t1b=5LtOW()O7P zTTND(^feJn;s`ZT?{{JcSe4XVpl>hKp-r*UNyCVZmYX?c0h6yDPD?mYUsG2#Ggw%& z&kL>NrV}_BjgHJo+OSqr|NL*?@hbpWXzIzWK8*?GF9_3H4p$LnWu`po`EU|IIZyGk zELC&DJc{=V-!F(75SB3XN(QCi{&rmAL$jw=HEVN)SPadp5;#MSAtw(s&j_;i9}PYG zzeJYLE0k#Of>uPIdv6i*1zv9{LPrYlW8vo@bc3=H&;pXDdSfip@tK0V~+Yrm~ zb$&a|?)yPD^$hU8j1Aw>{<6I`Qw=wximzvBk|?Hp0PJzUsgAo}gI7yx?c-}5feQn) zQLM7W-1+J+r-sOXd+1)f(;a$0sFG@VEqTu9KHuil*`sY&jWC6{W@U?Y`B=+>ac)DX zI*<`;!r-}a$g5Gx^(qFT8yTrgXsxp^GJ8`p(wzh&?1l;3}Nt%qqsW#H7 zfT?9r-w}d;-u}N7!lWM>b0ifRFPwzQc^^0a=>$}HE}nWT#C5*6xP=)$V0HVGEC5Ee zFzs+F%++rA$C@vx$fGe>zo-)A?(U%WIph00HR(^^wXhF}m(>weIdbmE5cOPnuREKn zstm?=oyraGIQW0A-ow=I-pe<9?5oAYL{lOQB2BD1#)27m$oX5IlUz6e^>fC>vuSO* zT+wP<``uH+K4!R}J+&c_Wb|@>iF#msO-c1oz`B}FI9jUG8#hAeb$_QQSGt+uJkHY`zJuHWH8U58h`InA|* z2*L+aNW#~}CIrCI&@<;6eo@d4@>j00@6*+m%#G>S0DewJmH46d->Hz6kV=yG=Fa&| zucS?*w{HBAm%fXWUxRN)!wjhfrT;z%sW52FH^Kn;7(bFAhwUipu z7P>k;7K+=DyWAuDa%D|{u^>avV6k-6PI?&7$qwfT9iW8*{h7g&Ol8l4G|Q@UiNb^L zx$5OL(rg^AmCJa&)7!%?x?hr`wJ+C&0KXoAU17K(t%Umx0DgG5HQR_7`x5&^>P>?4 zGiz4sJUZrF#M-OFsm}z`(irm0=Cj0yaMRzjX)TAxnK|GbscS&5o;AW}6!a;WJZGQU zYd6qbWW&#L9wa>^PctiI?b+mbpzCpQWUlDf5kkYdlwESj^fspy_;GnFj+T+Q$?fds zG)=%uUDiAknYLwD)q8?SgF>ea=y4zO&k3)ChhZuQOVs8Pk9WkQ2|b9ttF~0CoNz(o zr}TbX!KIbuzWBw4Rqu+bGL3vb+(Ta65O?ebG;vF@?bWQeRq#a|EC8JKYj8=N3vP`= z-laFQNnS(}UFqR&1ma9WkHyVYPGiy3bO({%+t_jG3RgRXk3^$4;cQ3cVv6J{p|DxW zNTM!&Ixd58x9;2a4QBglo}eq3E+(yi_coY1Y?daiC2T=nR?90qKbX<&EY(WI?=ru_ z)imWS8I1fqa+V%zCV~1{LS5nIL~(DuKg-6eU-)g!+(F4*Co%YHT8p)t?=1$$xT9@+ z$KF*Y(za`dSc+Gmo+ugKN-Cjm1;h0YK6+ZD%kBi&IC{6#wl-tz3hjH%3py$J%9^=O z`GM3w;;GXcl#huKw_1@gr5XIOH<1d5OqwV5UGIVJ2P&*Uw_>m*EJ>#T?`+^NCI@zn zwMkoG4%ZWmoo=|%bD~s4lfMh+QK&0}y+|jhb zD?4Lj^SPQOT`=xm;XQdyYZog1u%9XMgJ4DN*zG{Kt-DNb&U<|0+;AF{AoH-pAf#YD z0{F+L3)kL?_TMt^2r=l(dp-1CT#7+jw6JpwU=@DYdMCw;{VTU}+s zr4$Ct`OP-Pl^y4Way0zS60DQC@KQ`f~>RpyM6os`b7OB8PcU-XAGt$x65dr)MIa$jGTKG0j!Q@Vx^`PqI8=J@rSV&cC=s~Sr7&m6ej zXovJvHAc-kO&A{*Dp9a9uYKNn+2p)Y>uO0j8RykwSSin#Fz47eWjrY7*rTp@23FQ; z=-GF>Uv{yEOf!5zTNiv-Up6TvG}`ujyZiFDlewp{af$Eq*F$s#Hfl8-62Z|?Lha3isUWR7iU>qYjyq>i7(w+@9{pW?=CB_|BsCUw?71b=z+)u;v_P*ATgMP zoO<+aaN&!lm-G$BK2be$)d?57U#TM+l*4fMPI7WihS|9qF`bup!m+ICkH^_oCu{;^T}=X*)^y@^FOog13F zK`b=Ac{F@b=)x6-@0Uv4kHP4JI*R_WDf;4vAoGKRA@`Uhs*$$ccsR_2YLe8Jnl#z9cOUgG1(Ys?Jg>@p* z6C%B5obMpt?%57Q)C_!#sL=O}(f5o#Epl1*(NPJRDsb?BGwG-rof*EnwF-g@$?XWs zF~RSwEb|oKGpadwUYKlr2N6+|udXi8-060S&D9(Gsz3_Y-j6jFi6%A8mq|Qd_)$5S zmt7HES#+SL%ntW8E7i{t+1=jcwzNo@BbCH!~2y|8~rN?ae z$^5WAD7B}ogm?SKj(%gZsRbe|NDB4k@Tr)PY$k^u(d?Dc7|NHaDAEnn2 zVR?ydawY>Wgv>06pJYRSPbTM0nyi&x-=ij`KQ1m|)BB6#$$x5vze=qh30`3Gs3rC9 z|0W%m{qySvzL-_X6eg_sg4ANRX{~m?}KWwnO)UB5u;Lcc8-aK{n%h_ z?;GMSX8CQ}p~54OwjEkB`Mt2PBGSwuQ|xb;NocmtuE^2M$`k#?Ct1b8Z)y&H2tFRc z78`kGJGZO+?yzWoCG1XZ-0t5}DbV9K(CsL&lvw_v`z=%EqT@ej1_(_ndPnOx=~JGQ y#!}I*8dbGw%R|$hYL!+ec**}`@yfXJ0(mo8@s7#(=>cVf40xbvpi!Y_9riyr`dxMa literal 0 HcmV?d00001 diff --git a/assets/icons/icon.png b/assets/icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7bf0fc9a8b1d4ce7ea3514e1c55a2b30be8523e5 GIT binary patch literal 18915 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
~x&HFiiGX^_1X6uh9^Eko%cn!PqRwjys1ION zifNEo@RJ#Spr2TvetS^oA13(N&QX`c{%!n5{dCF!-tUhRW-VsnAO3Aiw&Z4wMYD;m z7qnUbZ&y5)za*B{X0FNw^;AQT?Rj@OHGGqNU}-%1%ZM*o;xVwdZyz?Uz{A?YZ4&=j~rjYGW(gX6r9+_8cv>2BSYP38@o> z21Jy4H_t8)%qiXub6I3%`AlEv*R!>Md&H_>E?E+Wsmt1P+lsc{e&|0iCgE52dBx6W z+=ezkukp<&r;24D;TQ zCRTlS(`Obaihq=NkKAvm?Vzj!;_kNe(S(W#HL0}or-sw30@~KRs2(1lB_Z$QZqy)VQ*r0Ji$W2 zO=V2$_c0=VUlaWf!I+?TJ!IuajTMlssKAb#(C#imnXTg(@|AT0+ckzAu{OzB-lXzp zQpH$z7#od!qXH@F^UXVdGYeyP?bFS50{b>^@K3m=6Ym-O9t`S~Oq z$k*wA(eIcj|D8%z?!wN3T#c%p?H_g(G@VIT{-9#g86RI`p6%ECGQ3ruptFmku>Ig-AA7ix#hTkK==V37U81V8 zf|5(qct)3E!C%AF@&w1-B}bCI?>3o)N@Rb4qYH^}v1eBsEnO6$r|Y3I@Go1%(0p?P zehH7+HUlpB(WJ!U!5cuiAjXzx&Y#RQzxzpE4eebwXj;LcgXwmdWc6nII?+b=mZhAYV`J2}?vF7gCrcF|5#pLY*A3Xk652i^7D8BL@ z#$LM{TfYaaCCAXSno$3XY1@tt&A zT~B7}3%^NOo_{oJ@rSyept_@C+^c@Yv-&i;>s}hg-7t!OI{8si{sVJnG&U;&mgugZ z#J(!dx7NSw1Up=Ok;bm*wVlkPW9VDENc~XV(w-fbSsy67o#Iz2qGC&^mSD&J>CetM zZX3Z$BFc6qjctb$d()O`%h7_~a3%ZD4b7*Os+G`_lZYLW=dBw1cqj$wehTo9BZNYF^%mk1$i-g7Y#2*NjNU4U zXz#gW4Qu8 zV1hj+7-TwqfTU6l72>vbLF3VOkv8n|)Dw&Q<=0)#?~33I?)qejup8CwQUz34zh{?s z$>Vj_$1?T>!6E5is)eOhD}n=6bz21#RsSz3WV$(>*fRdon}`?5`(uO+?Vudk;+6yX4CYQ4+e)s5kG3G;w;x2HkZs~}t4 zzx?KNOj$Fgf`G#BZt?VSYVkE0SF3)E)X+b1aFi5s18N=UqI(uu6BY9pBL;=W6xRX%jCsfU(Up+0mP5dCf|Cw}iZgT&G$;Wg>iQH$dO| z`th7uT;8>n{vqn}Dax+Xs65>};x@q`f4`-&gK|B5Yd5dB^jT~%w;;Y}UONKE_AkbXJSdy&IMtiQ&i^k<#z1H>hj5vu$|PX@|k0DlR%Nd5AWfcCh^w;7%gX`T?(o`wsK3v-)5`rl*|cU%azAGf}ENihiiZZ>M)*p=ZC3l-Z}i7dRQGY2QAiYK*p`Lii@EIcpg zLH$gb2qW+20F^@py)R`pd*>f)ej39%GR39C#W*;?KkUa6IhOpUn!m&2<$vHaNw5YAaEF+OKC4|%6Xt3gji zLCoh@Q)cH@@^CYFKG6p|^}PRT9PKJsl6=mdfIm)i0@l0?vRDqdB~?Rdh}fn$;Ox;6 zX%zBvg#*mw>w{E14=ot12hQRQ60&Lzbb8m4@Vq!KxU_KbTk$-1LYO+w)*uXfpL7K;I6aN=pmW3VD9vTE`ql^Z(!4 zN&;MLC9xMXalC5@XE9STY^;RT5uJZ)jN6R;p&QZ`Mw*tv!bg89c6bo~xUMH@oE@IS zqaDII7cIh!!*+;`K(|qo0vDrIptA!+$QXNO*El24e#>|$Q^ILRV;v)2Z~xb<@=t@h zb`_W3p>TQV{@`d*y!LuEL<01N!gT1MCu@S+#imlYb`=TG5wJUb&^o1kpy1O06awx_ z!o?K$y~Vau>DHWaGPwC&m^(%JBZa`Azy%i%13BBXN!v;~g{Z)wR1v3oj<4ZZ@2g;X zF}!HyrX(Qv^t&`^b-yUm^zL~Huoe9rI=&S>x)pf`V4s_8bhMM7J#ESWMuSp{Qa4Y6 z8!@+#3rFSu2M7y2d~yY9mVa3KcATB<^dPPMdxFEkfvV@94)b860~pai;&g%5)G9NU z`l3Y_h-%j?lybdX=3mF`Lo0uU(f&Fd=WfTxgEa|+OI7C&0_uMi%NXv#xmxnXK)DW2 zv=_7v&ZpHdp>qiisSO7}nZ6DZ2OZkh_`Q%ciTi^~<<6xfJVQPGcBwMRvCp3t#{*l> zibyygXhO;*J%9~1JPCR;?+Ii2`8V#p+>5Blc9~_i18__m5*(mls3G{xwp&m+_$dL` z#n@A7k)97=v7WU;Y`kfcG;iqt(Q$P1=#pZ_hs`6D)P zaGg8HLk!$CiUpHNf`>r~Cji*grznK~`O;p0M(irAm|nXvmiqW$CUo29IJg5%H=zT- zt^0OCe=G6I+*kt{aF!9x77L4ec$K;S?4>aedffFtid0dJ`8p1`@3B+czm4=fo{Xrd zvw#7`z(q4-5IP9g3frPVu z5w7mZp+>k3(FTZx%`cYw{0#lN#3oSjsU1ExeY!PcHQW5Q_q|YV3J`k3*=Ox^w(kk( zK6DPz?wue>hjaU*-Ko5aYjM$ytZZ|t@8C{e*c1&mTI$AhCc@zXmdGCA-qoTU*a5d2f% z5EvHLl`-N+Y|s@gL@%7k!Vok9m&0HiT;J&GJk}C&^lz6+&oz2x>yja2GQGwwRnJWe zSDRBl5u8)bAO?6~xoS;w*O5(vYLN(eY9UQ>$N$j5{4MYsB#bB~tToE-zHW z>4v&$H78%du4NT&q}8#DUIb22aI@rFolPx=zKa7qe9_JEw?#KcXJ2F_a>)#64Sit& ze5e1=*4J~-yL;g6NI>m^Tj#m^0Df40tf*e1}HD4#yjz6+}2Nn+C zWDXX=e9A{%3aA~NXJV=UvR(Qeqa7Nt zeF|hVG+oW=3TaeYs;G_=;qa7_NP%+U%;f^<8it{xDaT*w1Favw@0Rk0G--oZnM&|M zWefwsq<8s{g6p3bm0VbOVj+W<9ykY=_EZ%5mGNRf%3*sqVB1i(TX;w}Bn}gkG(h6) z-iJ=^ZS0lV1$l}U$Tp!P8XTj1OXE(3Q1REyoT706H`bXq~ zr3Vfq^CI9=b4D7`o+J;G_B$F$Yd;e9D{je;&ontIEp({H9_|z4l)w01_J$oe64rO6 z?_FD@Pd;RGpXi? z-x$c1|4vtNp6h1GAJyKWnejF=MkOMD5>5AFTXjkhzj=~e7S!s>B2cKezP zV(3Es1*0z>v^C_kebC#GQ^wIq-N~9c(y=&II%K{5f@@?CN3U;-a-U&ou2F^CTU#Vo z2s`jVmL@+WFdo19^E2kA5M*EMs#qj|Ae}fkr|PLK3eHFML}?JW*d2^P>4v6G(4)pQ z;F|fckY;W3Wy*+fj7Apiq34@SDZT@*zdvFE-RxG1rMHh4+3~>*Z%IWWqcI@IULp$v zZ#IQ_L~(Ly5`qu0(fJvk{_DP+7BI+Yu_B(ilwG>~%^v87^)MIk70z7bQP}RJ*AQ`+ zDrgUF2?HW1PJif5vvMA|+lCZ}e0;%(-iVxKcXmR;X^oY*Gxb^3)H*yc^PtEU~Nun9CFC_-(V*L5q7cey=P-&EdxV=W>os3#RPFkSjdh$v+rcRZtGxZxxuE!1& zDn=mxuSp=>12M{IpRkV``_2!sLH^d_rT&xA0;&1C+3_UU)OAG&MANN2)6D8c0{jGBhOWJmgZ1&-KaKU<;&}P2!4U>xt`^%t666b zy@5~%$}fB8x`W5Uh|xV*eo13+Mu?8p7#Y0m;Q^O|-ohg!F{ut8s_U$a0=oj9BC*pi z9IP9UyHductRWE+u753~a(Ev|5JbQ;Dez`qEfo2I|u;P4cG*0Qsfk2-D?wbtZci&_t*xSp3<76kkj#cn2YDwu(`gR{O2@Rx6UcJ`19A=`vBdnyWV$>ge4v|Wt!-J| znOy}I6HD{BSTQC}d(`JYQ4!cwoI|UKx7wNyJYCj(G~dCzF>gk#gAvY_V|%>VoAvRL z{$B;a354kj)*IqOs1UamRO|jvL5NpT#*!*RNtx0n25oSZg~PO#)XSic(xCWpRGEFt z)X(KcT$E1E`fEJ`1qz*S7yk1W(H+b_u3N_{ zBp-CQ8o3{lceRtT9(y<}B-D5I$>BZU1)B@7@D!b}A_X&Y|AZO^-nGS7?s`TvH*9GO zy7k!th`S*G+E5k8{|Y9BeEf|-z~`Y)+-D23l{~k!imzNvvxT-W`2t`>1snhuzT?(l z^XyBWxg_|<3~nwT3fH2PoA{qTNT@Q%g)prS6qF+0tQOXe5?M4zF5q*xeWo{_MwSME zdT^%|6B?bYHIAqZ-Ix_FQlPYLVIuZQ0Rs>E*=qLs3Ds10g3L|0@`63?6JZhbx%)S~ z0zb^A0eSR5t(%x5;FVYBAOlC}QPcTj^_L@^2H!qv-QM15&($JmrAYHnM053ofA|!% zu!&Kmv~6M>0TSr*1G8xf>LgllOcQTK-!7Da4V?*!8tOZ^!bqfphf)s*67g;z@b<_;BC(h?E&XQgs37KCxbqpJziZ13`@PL-oKjrpUS@ub3e3JzLy=Mxu zMaVOU@N?WMQ20ER-HvMRzK%kgeu}rIzh5VSb5_K)c?<-$c7D1M3TH7RLI?m(oN}$} zp}M>%Z&v=K*3yOP9LFmqL83s}INvZVR)xlPnw!<+?0mUYl#M)m#IC}T0d359gtEB3 z%pm*;rXv@c{DC(}gOaI!$!An(cxuJkXENw2wzB#r-idJlQPhgvX0>w7nn>stJAN~| z6~lM7@)B(%fg|r=ZW@B21=)Wa=BTT&me-Y!KM|db|V)u^Pp;jWAUXWpo&l7 zHqTHIM6PO<8mtL};~e1@Fh5Bn~&y@ z)pG4`3aQ&dU66dh8%nS5 znO5ZKb>ux0TH11&Epj9@f4JB7+;Q#&oDV%Otr#r0RpX5+0+V>}gPy>GO^j{Ig1Dw8^MD4~Ck^B^ZjsJVTySo_5K9SV5iN9(Fvqp~01 zsFT*~A|=`lgi>93@}_2y|A^hj6HM0HL%Yr9K8(=8R+y>~V*G5FleRsqzOL|4p8VkVYFjsk<{%t7<>>C2(AiAutkGT1P7wW;FR+|lhAw*yg`+wyLq-%;=Wn%AqE%cRb)tuA zM9>&Cemx1JcJ*_G0Fhe)ZodfJOT+h!zYTq|HnWOZVV**5&k4BeGdS6+*aPJ2-$venM%-?H0qxo3Tp045lL~CfHNrJ zGQEL9`i&K$ph3tJic(VQ3+be!5h|&`eJgZ-m#_d%>a4U zhwjX?aaa`Ok%S3q@w@m?nDZvzI!6*60$4QIEWJ>^|bE zdMMtB*)Or#6yTMHWJqUS*fdeS95B)G^@HQdZ~>YCKiHM6cJ%SX+V8p1`lF9D5kBs5 zn;e;j$v=y6>7j69=?x`e@@dFVQZ)4X^-sjdMSfW4!g0mW$)u0BChTEr7y#OOuK7LZ z3ks|p%Kl=RVbdV;4laretTa|(zMJ2W7M+U4EqujJF4l)KRotR>JP_|~UOCFH-|j82=7nC zE*N3mPcccLO&EM)02J59D=Vg=Xk*sCv38Vb8 zVF_o@9aA6+T1kLZ$gesGmeL`H$bGG`paebz2KREw*ZbcpTFm#hhFY1|QpbzRRES?u z!9DoS@n|r52sM(B2ri31R2O!Z5Ur9Dl|ck@kBOv8A~NbaUEX|@hVQ)r@bO;OR%<+T zFRdqKm5Q1z$nSU&I;;%cYQ^_QVQ57o4Gtr`6cJaL?ho$6T{^dBfX%${!{P9a(iVF7 zvhhCnUYk|E^72vAv+IM#4UhP(SP$ zbU#yAog^X)#lN;H&7x;lev0{kCjl#dw*{V36X$RzTaA=1&Rmw>=P@X{rNvzkZo6oX z@u?-uu0T3P8}3lHH+3wB;zE@;3Tu300I}5|?QNvsZigm>AZ$PQKqb_T#(Pn$(}yE` z&l)j2`pzhd1g6oSRj3`m@4g688^CC@1d8ri?QgHc(j7R&~oD^D0KScqG}=25e_rX_7Bgyu2mT~2qQoqL(A+- zt(woup|$N35r@ZxC?$~EEPoM{kE&@#xqm~sm)OB=dsrTqp$RlfV=3qzVJJ+vyz z^iuuoSJFc#x)=oT40GACdQ^IFs;f?TqKnUHVCYTRYlR<#-i=RPl;JY!f;px$9^+qP zw~|md=Dwi~ns8a9GerJAMwMMMZ zlX`5^D@CKGi0dgR679)XRbI^F5TygAOv8Q8%06q1rA>ttz=T(pghMRb?hWQrX5_O- z8_))(&bOdPwy0uJFPGH12UF4`5;D!6H4jzvLfs;oX?1K-fv2dcw6uUhOU=WMF zMMC=YeM{e~P=Xk)MT}=-EqM+}Bh@M*C8sD?jPrUGz2&LzEF`VMv8CdHXW%91Pbkd$q37Zhy^jn`#2ctowav?{8TKeF>bcxtj|$rp zd|9{sfI>)1)B%I`1JAyk%3@`HSDdTA|FII+18pw3(_$%ybWSS$xkiHvRbZ>klTP}i zG&k5F)bRMNry@Il;Jn55HL3I0Nk-nik|%|l`-XC#407IBO1t|OzN}rwGZ`0RSAws> z|I*_R&Cl`3Tx%_)mOdfOE|`$I+u~7Qjp!8xILc)?21GbAI2F?9TJsUgGspSve`n=l z3gdl>6sLbtSZnBG5@tN-!r6Y6Bav2aua)e|*ZQVAg*5zE+AZnij#yoLe4Mpj{`8fU zL*YDckN*OBB5Nzkqo>S|P|{SnQrEOU_%lUkdG4G4B;uz=^%4B5zxPEfs@N$0 zv%LM6cL-C=X@Oh(cXH;U<0gN0csZu}qt;hcR=8^&mI~_{gx!h5^dc@xn7#RQ!%lXu zhSQ`dgte{crSPn^IDX8A5hPU;)h2rZpTo1%Djv7_cNUuRIwm0*>uW5N-PY$BTUf)M-dT8e@;oamX7Y>SsdU-+*oe{t2td~v^`heF zez)1-ad-Y2vHr?3jG*=T7_1x4hr zCQ|LNeIkR_1b0hc6WZTNwC1{~0pmwA`_G~>48tjRizPmPJ(aF>`a#_NTN2#Iv4K|= z@RW*iAxU>u-Nq>q|1WG>eWPbzu&a`?VPaoyjz4nU8qN*z_P}e+r72UDo}j9F;OOt0 zVz$@RnD)6LjhcVU5;ldKu^F4f*DhVYFpK3xDr$2iz~VeTR?m@eulUesChhZrvG;ji z-TKU}j+Hf^^3W)B(R(1^+OfD__%(inTXn-Zj$L)D!l|fCynjJ{m3jNFP(Wud|F!Q6 zdbyje<8`;pDK7k|)~xQ!-&*P8_aRCw+hy64EfL~0S!>KRCI!E53M-Y+=rVS9%CFL& zIcdTA@s>TK;TxCH*GPd7 zn-W!%jhtauHzt#L*pQsNdabwzf7lf+dKYFX-Rx|k&*nrZ9_C0y2zg%NQ`jcf!g?~6 z>yX{j!)>#PC_Z#=(^uYB@FUrYFZ3{7$5nIuN) z(sYX?l!KPtqQG}!gLGRjKBsH@!ehrw--LydrpUo%Ftaos&LDmR!o-Z zj0G1fUU2x*)r}v=f-6}&kPN2m@ubUo2K*vk4l-)Qj}A+Qw!z-2Y=cUho-d+RUg ztQ>aPQVKnFz@S8lLra+>liT#;G1D`Qf3iho>An8LtINfD?#lg#+R29dHq6e1GU4D` zqUw01u!^JHLVk8D57PoG-loB37;N*Oj^J~qmsaOO&T$V<(=w;rTRG?svQxP4r){%* zFI?1s`QufN1R8CNy{x=JG~r@0d#)TY7-Es$Jb)I8Tl33QGXB$W-lspj@tXgeh_q_4 z{?SiQwDPx)(uy>SXn;{LAt_;Ef1f{q9J?lJ%y`BijFU$DJjY{+{aRyeToK2;?lYf` ze`I#+D4Hf_Z9P-T_D{n_A99GyDgS<5ff|>koQ|X$YhG;l&YZS=C^5%a3FJ9Gm^poM zT3zPY&-Dw-gJ^?8k}OxWp4Lm5@0Gg>p6K^2#wca}X&7u2zt`yIZxq=WXtR9+&hUr! z<-o?CefkVrs@Z>TD@KC;+{yb7Po*n-exNP=;E-Nv3_@vdLR4h77q=??r?Z-U{h!$C z&cBFuT^o)-#pjreNM+wSFGF)q?2sg^%lrH89Y1$SlFjQ6hh8ZffkwGBnD+mCx{)-7OmZn%Q8YuWLR93UefW@-Sm{8^@CcjPB+R@9PxJ z&k?NH%K-9Pj~~1@Dq9vy3p^Rb?y;UIWZ?t +import { createRequestHandler } from '@remix-run/node'; +import electron, { app, BrowserWindow, ipcMain, protocol, session } from 'electron'; +import log from 'electron-log'; +import path from 'node:path'; +import * as pkg from '../../package.json'; +import { setupAutoUpdater } from './utils/auto-update'; +import { isDev, DEFAULT_PORT } from './utils/constants'; +import { initViteServer, viteServer } from './utils/vite-server'; +import { setupMenu } from './ui/menu'; +import { createWindow } from './ui/window'; +import { initCookies, storeCookies } from './utils/cookie'; +import { loadServerBuild, serveAsset } from './utils/serve'; +import { reloadOnChange } from './utils/reload'; + +Object.assign(console, log.functions); + +console.debug('main: import.meta.env:', import.meta.env); +console.log('main: isDev:', isDev); +console.log('NODE_ENV:', global.process.env.NODE_ENV); +console.log('isPackaged:', app.isPackaged); + +// Log unhandled errors +process.on('uncaughtException', async (error) => { + console.log('Uncaught Exception:', error); +}); + +process.on('unhandledRejection', async (error) => { + console.log('Unhandled Rejection:', error); +}); + +(() => { + const root = global.process.env.APP_PATH_ROOT ?? import.meta.env.VITE_APP_PATH_ROOT; + + if (root === undefined) { + console.log('no given APP_PATH_ROOT or VITE_APP_PATH_ROOT. default path is used.'); + return; + } + + if (!path.isAbsolute(root)) { + console.log('APP_PATH_ROOT must be absolute path.'); + global.process.exit(1); + } + + console.log(`APP_PATH_ROOT: ${root}`); + + const subdirName = pkg.name; + + for (const [key, val] of [ + ['appData', ''], + ['userData', subdirName], + ['sessionData', subdirName], + ] as const) { + app.setPath(key, path.join(root, val)); + } + + app.setAppLogsPath(path.join(root, subdirName, 'Logs')); +})(); + +console.log('appPath:', app.getAppPath()); + +const keys: Parameters[number][] = ['home', 'appData', 'userData', 'sessionData', 'logs', 'temp']; +keys.forEach((key) => console.log(`${key}:`, app.getPath(key))); +console.log('start whenReady'); + +declare global { + // eslint-disable-next-line no-var, @typescript-eslint/naming-convention + var __electron__: typeof electron; +} + +(async () => { + await app.whenReady(); + console.log('App is ready'); + + // Load any existing cookies from ElectronStore, set as cookie + await initCookies(); + + const serverBuild = await loadServerBuild(); + + protocol.handle('http', async (req) => { + console.log('Handling request for:', req.url); + + if (isDev) { + console.log('Dev mode: forwarding to vite server'); + return await fetch(req); + } + + req.headers.append('Referer', req.referrer); + + try { + const url = new URL(req.url); + + // Forward requests to specific local server ports + if (url.port !== `${DEFAULT_PORT}`) { + console.log('Forwarding request to local server:', req.url); + return await fetch(req); + } + + // Always try to serve asset first + const assetPath = path.join(app.getAppPath(), 'build', 'client'); + const res = await serveAsset(req, assetPath); + + if (res) { + console.log('Served asset:', req.url); + return res; + } + + // Forward all cookies to remix server + const cookies = await session.defaultSession.cookies.get({}); + + if (cookies.length > 0) { + req.headers.set('Cookie', cookies.map((c) => `${c.name}=${c.value}`).join('; ')); + + // Store all cookies + await storeCookies(cookies); + } + + // Create request handler with the server build + const handler = createRequestHandler(serverBuild, 'production'); + console.log('Handling request with server build:', req.url); + + const result = await handler(req, { + /* + * Remix app access cloudflare.env + * Need to pass an empty object to prevent undefined + */ + // @ts-ignore:next-line + cloudflare: {}, + }); + + return result; + } catch (err) { + console.log('Error handling request:', { + url: req.url, + error: + err instanceof Error + ? { + message: err.message, + stack: err.stack, + cause: err.cause, + } + : err, + }); + + const error = err instanceof Error ? err : new Error(String(err)); + + return new Response(`Error handling request to ${req.url}: ${error.stack ?? error.message}`, { + status: 500, + headers: { 'content-type': 'text/plain' }, + }); + } + }); + + const rendererURL = await (isDev + ? (async () => { + await initViteServer(); + + if (!viteServer) { + throw new Error('Vite server is not initialized'); + } + + const listen = await viteServer.listen(); + global.__electron__ = electron; + viteServer.printUrls(); + + return `http://localhost:${listen.config.server.port}`; + })() + : `http://localhost:${DEFAULT_PORT}`); + + console.log('Using renderer URL:', rendererURL); + + const win = await createWindow(rendererURL); + + app.on('activate', async () => { + if (BrowserWindow.getAllWindows().length === 0) { + await createWindow(rendererURL); + } + }); + + console.log('end whenReady'); + + return win; +})() + .then((win) => { + // IPC samples : send and recieve. + let count = 0; + setInterval(() => win.webContents.send('ping', `hello from main! ${count++}`), 60 * 1000); + ipcMain.handle('ipcTest', (event, ...args) => console.log('ipc: renderer -> main', { event, ...args })); + + return win; + }) + .then((win) => setupMenu(win)); + +app.on('window-all-closed', () => { + if (process.platform !== 'darwin') { + app.quit(); + } +}); + +reloadOnChange(); +setupAutoUpdater(); diff --git a/electron/main/tsconfig.json b/electron/main/tsconfig.json new file mode 100644 index 00000000..9d478122 --- /dev/null +++ b/electron/main/tsconfig.json @@ -0,0 +1,30 @@ +{ + "include": ["."], + "compilerOptions": { + "lib": ["ESNext"], + "jsx": "preserve", + "target": "ESNext", + "noEmit": true, + "skipLibCheck": true, + "useDefineForClassFields": true, + + /* modules */ + "moduleResolution": "Bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "module": "ESNext", + "isolatedModules": true, + "emitDeclarationOnly": true, + "declaration": true, + "declarationDir": "./dist", + + /* type checking */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "verbatimModuleSyntax": true, + "forceConsistentCasingInFileNames": true + } +} diff --git a/electron/main/ui/menu.ts b/electron/main/ui/menu.ts new file mode 100644 index 00000000..9e416b02 --- /dev/null +++ b/electron/main/ui/menu.ts @@ -0,0 +1,29 @@ +import { BrowserWindow, Menu } from 'electron'; + +export function setupMenu(win: BrowserWindow): void { + const app = Menu.getApplicationMenu(); + Menu.setApplicationMenu( + Menu.buildFromTemplate([ + ...(app ? app.items : []), + { + label: 'Go', + submenu: [ + { + label: 'Back', + accelerator: 'CmdOrCtrl+[', + click: () => { + win?.webContents.navigationHistory.goBack(); + }, + }, + { + label: 'Forward', + accelerator: 'CmdOrCtrl+]', + click: () => { + win?.webContents.navigationHistory.goForward(); + }, + }, + ], + }, + ]), + ); +} diff --git a/electron/main/ui/window.ts b/electron/main/ui/window.ts new file mode 100644 index 00000000..7d5d1af8 --- /dev/null +++ b/electron/main/ui/window.ts @@ -0,0 +1,51 @@ +import { app, BrowserWindow } from 'electron'; +import path from 'node:path'; +import { isDev } from '../utils/constants'; +import { store } from '../utils/store'; + +export function createWindow(rendererURL: string) { + console.log('Creating window with URL:', rendererURL); + + const bounds = store.get('bounds'); + console.log('restored bounds:', bounds); + + const win = new BrowserWindow({ + ...{ + width: 1200, + height: 800, + ...bounds, + }, + vibrancy: 'under-window', + visualEffectState: 'active', + webPreferences: { + preload: path.join(app.getAppPath(), 'build', 'electron', 'preload', 'index.cjs'), + }, + }); + + console.log('Window created, loading URL...'); + win.loadURL(rendererURL).catch((err) => { + console.log('Failed to load URL:', err); + }); + + win.webContents.on('did-fail-load', (_, errorCode, errorDescription) => { + console.log('Failed to load:', errorCode, errorDescription); + }); + + win.webContents.on('did-finish-load', () => { + console.log('Window finished loading'); + }); + + // Open devtools in development + if (isDev) { + win.webContents.openDevTools(); + } + + const boundsListener = () => { + const bounds = win.getBounds(); + store.set('bounds', bounds); + }; + win.on('moved', boundsListener); + win.on('resized', boundsListener); + + return win; +} diff --git a/electron/main/utils/auto-update.ts b/electron/main/utils/auto-update.ts new file mode 100644 index 00000000..7c738b5b --- /dev/null +++ b/electron/main/utils/auto-update.ts @@ -0,0 +1,110 @@ +import logger from 'electron-log'; +import type { MessageBoxOptions } from 'electron'; +import { app, dialog } from 'electron'; +import type { AppUpdater, UpdateDownloadedEvent, UpdateInfo } from 'electron-updater'; +import path from 'node:path'; + +// NOTE: workaround to use electron-updater. +import * as electronUpdater from 'electron-updater'; +import { isDev } from './constants'; + +const autoUpdater: AppUpdater = (electronUpdater as any).default.autoUpdater; + +export async function setupAutoUpdater() { + // Configure logger + logger.transports.file.level = 'debug'; + autoUpdater.logger = logger; + + // Configure custom update config file + const resourcePath = isDev + ? path.join(process.cwd(), 'electron-update.yml') + : path.join(app.getAppPath(), 'electron-update.yml'); + logger.info('Update config path:', resourcePath); + autoUpdater.updateConfigPath = resourcePath; + + // Disable auto download - we want to ask user first + autoUpdater.autoDownload = false; + autoUpdater.autoInstallOnAppQuit = true; + + autoUpdater.on('checking-for-update', () => { + logger.info('checking-for-update...'); + }); + + autoUpdater.on('update-available', async (info: UpdateInfo) => { + logger.info('Update available.', info); + + const dialogOpts: MessageBoxOptions = { + type: 'info' as const, + buttons: ['Update', 'Later'], + title: 'Application Update', + message: `Version ${info.version} is available.`, + detail: 'A new version is available. Would you like to update now?', + }; + + const response = await dialog.showMessageBox(dialogOpts); + + if (response.response === 0) { + autoUpdater.downloadUpdate(); + } + }); + + autoUpdater.on('update-not-available', () => { + logger.info('Update not available.'); + }); + + /* + * Uncomment this before we have any published updates on github releases. + * autoUpdater.on('error', (err) => { + * logger.error('Error in auto-updater:', err); + * dialog.showErrorBox('Error: ', err.message); + * }); + */ + + autoUpdater.on('download-progress', (progressObj) => { + logger.info('Download progress:', progressObj); + }); + + autoUpdater.on('update-downloaded', async (event: UpdateDownloadedEvent) => { + logger.info('Update downloaded:', formatUpdateDownloadedEvent(event)); + + const dialogOpts: MessageBoxOptions = { + type: 'info' as const, + buttons: ['Restart', 'Later'], + title: 'Application Update', + message: 'Update Downloaded', + detail: 'A new version has been downloaded. Restart the application to apply the updates.', + }; + + const response = await dialog.showMessageBox(dialogOpts); + + if (response.response === 0) { + autoUpdater.quitAndInstall(false); + } + }); + + // Check for updates + try { + logger.info('Checking for updates. Current version:', app.getVersion()); + await autoUpdater.checkForUpdates(); + } catch (err) { + logger.error('Failed to check for updates:', err); + } + + // Set up periodic update checks (every 4 hours) + setInterval( + () => { + autoUpdater.checkForUpdates().catch((err) => { + logger.error('Periodic update check failed:', err); + }); + }, + 4 * 60 * 60 * 1000, + ); +} + +function formatUpdateDownloadedEvent(event: UpdateDownloadedEvent): string { + return JSON.stringify({ + version: event.version, + downloadedFile: event.downloadedFile, + files: event.files.map((e) => ({ files: { url: e.url, size: e.size } })), + }); +} diff --git a/electron/main/utils/constants.ts b/electron/main/utils/constants.ts new file mode 100644 index 00000000..caf3a8ed --- /dev/null +++ b/electron/main/utils/constants.ts @@ -0,0 +1,4 @@ +import { app } from 'electron'; + +export const isDev = !(global.process.env.NODE_ENV === 'production' || app.isPackaged); +export const DEFAULT_PORT = 5173; diff --git a/electron/main/utils/cookie.ts b/electron/main/utils/cookie.ts new file mode 100644 index 00000000..b1c2c574 --- /dev/null +++ b/electron/main/utils/cookie.ts @@ -0,0 +1,40 @@ +import { session } from 'electron'; +import { DEFAULT_PORT } from './constants'; +import { store } from './store'; + +/** + * On app startup: read any existing cookies from store and set it as a cookie. + */ +export async function initCookies() { + await loadStoredCookies(); +} + +// Function to store all cookies +export async function storeCookies(cookies: Electron.Cookie[]) { + for (const cookie of cookies) { + store.set(`cookie:${cookie.name}`, cookie); + } +} + +// Function to load stored cookies +async function loadStoredCookies() { + // Get all keys that start with 'cookie:' + const cookieKeys = store.store ? Object.keys(store.store).filter((key) => key.startsWith('cookie:')) : []; + + for (const key of cookieKeys) { + const cookie = store.get(key); + + if (cookie) { + try { + // Add default URL if not present + const cookieWithUrl = { + ...cookie, + url: cookie.url || `http://localhost:${DEFAULT_PORT}`, + }; + await session.defaultSession.cookies.set(cookieWithUrl); + } catch (error) { + console.error(`Failed to set cookie ${key}:`, error); + } + } + } +} diff --git a/electron/main/utils/reload.ts b/electron/main/utils/reload.ts new file mode 100644 index 00000000..6ec5724c --- /dev/null +++ b/electron/main/utils/reload.ts @@ -0,0 +1,35 @@ +import { app } from 'electron'; +import path from 'node:path'; +import { promises as fs } from 'node:fs'; + +// Reload on change. +let isQuited = false; + +const abort = new AbortController(); +const { signal } = abort; + +export async function reloadOnChange() { + const dir = path.join(app.getAppPath(), 'build', 'electron'); + + try { + const watcher = fs.watch(dir, { signal, recursive: true }); + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + for await (const _event of watcher) { + if (!isQuited) { + isQuited = true; + app.relaunch(); + app.quit(); + } + } + } catch (err) { + if (!(err instanceof Error)) { + throw err; + } + + if (err.name === 'AbortError') { + console.log('abort watching:', dir); + return; + } + } +} diff --git a/electron/main/utils/serve.ts b/electron/main/utils/serve.ts new file mode 100644 index 00000000..9eaefb88 --- /dev/null +++ b/electron/main/utils/serve.ts @@ -0,0 +1,71 @@ +import { createReadableStreamFromReadable } from '@remix-run/node'; +import type { ServerBuild } from '@remix-run/node'; +import mime from 'mime'; +import { createReadStream, promises as fs } from 'node:fs'; +import path from 'node:path'; +import { pathToFileURL } from 'node:url'; +import { app } from 'electron'; +import { isDev } from './constants'; + +export async function loadServerBuild(): Promise { + if (isDev) { + console.log('Dev mode: server build not loaded'); + return; + } + + const serverBuildPath = path.join(app.getAppPath(), 'build', 'server', 'index.js'); + console.log(`Loading server build... path is ${serverBuildPath}`); + + try { + const fileUrl = pathToFileURL(serverBuildPath).href; + const serverBuild: ServerBuild = /** @type {ServerBuild} */ await import(fileUrl); + console.log('Server build loaded successfully'); + + // eslint-disable-next-line consistent-return + return serverBuild; + } catch (buildError) { + console.log('Failed to load server build:', { + message: (buildError as Error)?.message, + stack: (buildError as Error)?.stack, + error: JSON.stringify(buildError, Object.getOwnPropertyNames(buildError as object)), + }); + + return; + } +} + +// serve assets built by vite. +export async function serveAsset(req: Request, assetsPath: string): Promise { + const url = new URL(req.url); + const fullPath = path.join(assetsPath, decodeURIComponent(url.pathname)); + console.log('Serving asset, path:', fullPath); + + if (!fullPath.startsWith(assetsPath)) { + console.log('Path is outside assets directory:', fullPath); + return; + } + + const stat = await fs.stat(fullPath).catch((err) => { + console.log('Failed to stat file:', fullPath, err); + return undefined; + }); + + if (!stat?.isFile()) { + console.log('Not a file:', fullPath); + return; + } + + const headers = new Headers(); + const mimeType = mime.getType(fullPath); + + if (mimeType) { + headers.set('Content-Type', mimeType); + } + + console.log('Serving file with mime type:', mimeType); + + const body = createReadableStreamFromReadable(createReadStream(fullPath)); + + // eslint-disable-next-line consistent-return + return new Response(body, { headers }); +} diff --git a/electron/main/utils/store.ts b/electron/main/utils/store.ts new file mode 100644 index 00000000..bb6bd9b4 --- /dev/null +++ b/electron/main/utils/store.ts @@ -0,0 +1,3 @@ +import ElectronStore from 'electron-store'; + +export const store = new ElectronStore({ encryptionKey: 'something' }); diff --git a/electron/main/utils/vite-server.ts b/electron/main/utils/vite-server.ts new file mode 100644 index 00000000..e87e1e55 --- /dev/null +++ b/electron/main/utils/vite-server.ts @@ -0,0 +1,44 @@ +import { app } from 'electron'; +import type { ViteDevServer } from 'vite'; + +let viteServer: ViteDevServer | undefined; + +// Conditionally import Vite only in development +export async function initViteServer() { + if (!(global.process.env.NODE_ENV === 'production' || app.isPackaged)) { + const vite = await import('vite'); + viteServer = await vite.createServer({ + root: '.', + envDir: process.cwd(), // load .env files from the root directory. + }); + } +} + +/* + * + * take care of vite-dev-server. + * + */ +app.on('before-quit', async (_event) => { + if (!viteServer) { + return; + } + + /* + * ref: https://stackoverflow.com/questions/68750716/electron-app-throwing-quit-unexpectedly-error-message-on-mac-when-quitting-the-a + * event.preventDefault(); + */ + try { + console.log('will close vite-dev-server.'); + await viteServer.close(); + console.log('closed vite-dev-server.'); + + // app.quit(); // Not working. causes recursively 'before-quit' events. + app.exit(); // Not working expectedly SOMETIMES. Still throws exception and macOS shows dialog. + // global.process.exit(0); // Not working well... I still see exceptional dialog. + } catch (err) { + console.log('failed to close Vite server:', err); + } +}); + +export { viteServer }; diff --git a/electron/main/vite.config.ts b/electron/main/vite.config.ts new file mode 100644 index 00000000..a155801d --- /dev/null +++ b/electron/main/vite.config.ts @@ -0,0 +1,44 @@ +import { resolve } from 'path'; +import { defineConfig } from 'vite'; + +export default defineConfig({ + build: { + lib: { + entry: resolve('electron/main/index.ts'), + formats: ['es'], + }, + rollupOptions: { + external: [ + 'vite', + 'electron', + ...[ + 'electron-log', + + // electron-log uses fs internally + 'fs', + 'util', + ], + + // Add all Node.js built-in modules as external + 'node:fs', + 'node:path', + 'node:url', + 'node:util', + 'node:stream', + 'node:events', + 'electron-store', + '@remix-run/node', + + // "mime", // NOTE: don't enable. not working if it's external. + 'electron-updater', + ], + output: { + dir: 'build/electron', + entryFileNames: 'main/[name].mjs', + format: 'esm', + }, + }, + minify: false, + emptyOutDir: false, + }, +}); diff --git a/electron/preload/index.ts b/electron/preload/index.ts new file mode 100644 index 00000000..c99936fb --- /dev/null +++ b/electron/preload/index.ts @@ -0,0 +1,22 @@ +import { ipcRenderer, contextBridge, type IpcRendererEvent } from 'electron'; + +console.debug('start preload.', ipcRenderer); + +const ipc = { + invoke(...args: any[]) { + return ipcRenderer.invoke('ipcTest', ...args); + }, + // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type + on(channel: string, func: Function) { + const f = (event: IpcRendererEvent, ...args: any[]) => func(...[event, ...args]); + console.debug('register listener', channel, f); + ipcRenderer.on(channel, f); + + return () => { + console.debug('remove listener', channel, f); + ipcRenderer.removeListener(channel, f); + }; + }, +}; + +contextBridge.exposeInMainWorld('ipc', ipc); diff --git a/electron/preload/tsconfig.json b/electron/preload/tsconfig.json new file mode 100644 index 00000000..862ef516 --- /dev/null +++ b/electron/preload/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../main/tsconfig.json", + "include": ["./**/*.ts"], + "compilerOptions": { + "rootDir": "." + } +} diff --git a/electron/preload/vite.config.ts b/electron/preload/vite.config.ts new file mode 100644 index 00000000..c0a3c568 --- /dev/null +++ b/electron/preload/vite.config.ts @@ -0,0 +1,31 @@ +import { resolve } from 'path'; +import { defineConfig } from 'vite'; + +export default defineConfig({ + build: { + lib: { + entry: resolve('electron/preload/index.ts'), + formats: ['cjs'], + }, + rollupOptions: { + external: ['electron'], + output: { + dir: 'build/electron', + + /* + * preload must be cjs format. + * if mjs, it will be error: + * - Unable to load preload script. + * - SyntaxError: Cannot use import statement outside a module. + */ + entryFileNames: 'preload/[name].cjs', + format: 'cjs', + }, + }, + minify: false, + emptyOutDir: false, + }, + esbuild: { + platform: 'node', + }, +}); diff --git a/eslint.config.mjs b/eslint.config.mjs index eafac089..d2764646 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -39,7 +39,7 @@ export default [ }, { files: [...tsFileExtensions, ...jsFileExtensions, '**/*.tsx'], - ignores: ['functions/*'], + ignores: ['functions/*', 'electron/**/*'], rules: { 'no-restricted-imports': [ 'error', diff --git a/notarize.cjs b/notarize.cjs new file mode 100644 index 00000000..a59c50c8 --- /dev/null +++ b/notarize.cjs @@ -0,0 +1,31 @@ +const { notarize } = require('@electron/notarize'); + +exports.default = async function notarizing(context) { + const { electronPlatformName, appOutDir } = context; + + if (electronPlatformName !== 'darwin') { + return; + } + + // Skip notarization when identity is null (development build) + if (!context.packager.config.mac || context.packager.config.mac.identity === null) { + console.log('Skipping notarization: identity is null'); + return; + } + + const appName = context.packager.appInfo.productFilename; + const appBundleId = context.packager.config.appId; + + try { + console.log(`Notarizing ${appBundleId} found at ${appOutDir}/${appName}.app`); + await notarize({ + tool: 'notarytool', + appPath: `${appOutDir}/${appName}.app`, + teamId: process.env.APPLE_TEAM_ID, + }); + console.log(`Done notarizing ${appBundleId}`); + } catch (error) { + console.error('Notarization failed:', error); + throw error; + } +}; diff --git a/package.json b/package.json index 144831fb..e3a15c5c 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,10 @@ "sideEffects": false, "type": "module", "version": "0.0.7", + "author": { + "name": "bolt.diy team", + "email": "maintainers@bolt.diy" + }, "scripts": { "deploy": "npm run build && wrangler pages deploy", "build": "remix vite:build", @@ -25,7 +29,20 @@ "typegen": "wrangler types", "preview": "pnpm run build && pnpm run start", "prepare": "husky", - "clean": "node scripts/clean.js" + "clean": "node scripts/clean.js", + "electron:dev": "pnpm electron:dev:main", + "electron:dev:renderer": "cross-env NODE_ENV=development pnpm exec electron electron/dev-server.mjs", + "electron:dev:main": "cross-env NODE_ENV=development pnpm run electron:build:deps && electron build/electron/main/index.mjs", + "electron:build:start": "electron-builder start", + "electron:build:deps": "concurrently \"pnpm electron:build:main\" \"pnpm electron:build:preload\" --kill-others-on-fail", + "electron:build:main": "vite build --config ./electron/main/vite.config.ts", + "electron:build:preload": "vite build --config ./electron/preload/vite.config.ts", + "electron:build:renderer": "remix vite:build --config vite-electron.config.js", + "electron:build:unpack": "rm -rf dist && pnpm electron:build:renderer && pnpm electron:build:deps && electron-builder --dir", + "electron:build:mac": "rm -rf dist && pnpm electron:build:renderer && pnpm electron:build:deps && electron-builder --mac", + "electron:build:win": "rm -rf dist && pnpm electron:build:renderer && pnpm electron:build:deps && electron-builder --win", + "electron:build:linux": "rm -rf dist && pnpm electron:build:renderer && pnpm electron:build:deps && electron-builder --linux", + "electron:build:dist": "rm -rf dist && pnpm electron:build:renderer && pnpm electron:build:deps && electron-builder --mwl" }, "engines": { "node": ">=18.18.0" @@ -94,6 +111,9 @@ "date-fns": "^3.6.0", "diff": "^5.2.0", "dotenv": "^16.4.7", + "electron-log": "^5.2.3", + "electron-store": "^10.0.0", + "electron-updater": "^6.3.9", "file-saver": "^2.0.5", "framer-motion": "^11.12.0", "ignore": "^6.0.2", @@ -104,6 +124,7 @@ "js-cookie": "^3.0.5", "jspdf": "^2.5.2", "jszip": "^3.10.1", + "mime": "^4.0.4", "nanostores": "^0.10.3", "ollama-ai-provider": "^0.15.2", "path-browserify": "^1.0.1", @@ -127,23 +148,32 @@ "shiki": "^1.24.0", "tailwind-merge": "^2.2.1", "unist-util-visit": "^5.0.0", + "vite-plugin-node-polyfills": "^0.22.0", + "zod": "^3.24.1", "zustand": "^5.0.3" }, "devDependencies": { "@blitz/eslint-plugin": "0.1.0", "@cloudflare/workers-types": "^4.20241127.0", + "@electron/notarize": "^2.5.0", "@iconify-json/ph": "^1.2.1", "@iconify/types": "^2.0.0", "@remix-run/dev": "^2.15.2", + "@remix-run/serve": "^2.15.2", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.2.0", "@types/diff": "^5.2.3", "@types/dom-speech-recognition": "^0.0.4", + "@types/electron": "^1.6.10", "@types/file-saver": "^2.0.7", "@types/js-cookie": "^3.0.6", "@types/path-browserify": "^1.0.3", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", + "concurrently": "^8.2.2", + "cross-env": "^7.0.3", + "electron": "^33.2.0", + "electron-builder": "^25.1.8", "@vitejs/plugin-react": "^4.3.4", "fast-glob": "^3.3.2", "husky": "9.1.7", @@ -152,17 +182,17 @@ "node-fetch": "^3.3.2", "pnpm": "^9.14.4", "prettier": "^3.4.1", + "rimraf": "^4.4.1", "sass-embedded": "^1.81.0", "typescript": "^5.7.2", "unified": "^11.0.5", "unocss": "^0.61.9", "vite": "^5.4.11", - "vite-plugin-node-polyfills": "^0.22.0", + "vite-plugin-copy": "^0.1.6", "vite-plugin-optimize-css-modules": "^1.1.0", "vite-tsconfig-paths": "^4.3.2", "vitest": "^2.1.7", - "wrangler": "^3.91.0", - "zod": "^3.24.1" + "wrangler": "^3.91.0" }, "resolutions": { "@typescript-eslint/utils": "^8.0.0-alpha.30" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bb37289b..04f2ce93 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,10 +19,10 @@ importers: version: 0.0.39(zod@3.24.1) '@ai-sdk/cohere': specifier: ^1.0.3 - version: 1.1.8(zod@3.24.1) + version: 1.0.3(zod@3.24.1) '@ai-sdk/deepseek': specifier: ^0.1.3 - version: 0.1.8(zod@3.24.1) + version: 0.1.3(zod@3.24.1) '@ai-sdk/google': specifier: ^0.0.52 version: 0.0.52(zod@3.24.1) @@ -31,19 +31,19 @@ importers: version: 0.0.43(zod@3.24.1) '@ai-sdk/openai': specifier: ^1.1.2 - version: 1.1.9(zod@3.24.1) + version: 1.1.2(zod@3.24.1) '@codemirror/autocomplete': specifier: ^6.18.3 - version: 6.18.4 + version: 6.18.3(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)(@lezer/common@1.2.3) '@codemirror/commands': specifier: ^6.7.1 - version: 6.8.0 + version: 6.7.1 '@codemirror/lang-cpp': specifier: ^6.0.2 version: 6.0.2 '@codemirror/lang-css': specifier: ^6.3.1 - version: 6.3.1 + version: 6.3.1(@codemirror/view@6.35.0) '@codemirror/lang-html': specifier: ^6.4.9 version: 6.4.9 @@ -55,13 +55,13 @@ importers: version: 6.0.1 '@codemirror/lang-markdown': specifier: ^6.3.1 - version: 6.3.2 + version: 6.3.1 '@codemirror/lang-python': specifier: ^6.1.6 - version: 6.1.7 + version: 6.1.6(@codemirror/view@6.35.0) '@codemirror/lang-sass': specifier: ^6.0.2 - version: 6.0.2 + version: 6.0.2(@codemirror/view@6.35.0) '@codemirror/lang-vue': specifier: ^0.1.3 version: 0.1.3 @@ -70,22 +70,22 @@ importers: version: 6.0.2 '@codemirror/language': specifier: ^6.10.6 - version: 6.10.8 + version: 6.10.6 '@codemirror/search': specifier: ^6.5.8 version: 6.5.8 '@codemirror/state': specifier: ^6.4.1 - version: 6.5.2 + version: 6.4.1 '@codemirror/view': specifier: ^6.35.0 - version: 6.36.2 + version: 6.35.0 '@headlessui/react': specifier: ^2.2.0 version: 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@iconify-json/svg-spinners': specifier: ^1.2.1 - version: 1.2.2 + version: 1.2.1 '@lezer/highlight': specifier: ^1.2.1 version: 1.2.1 @@ -94,10 +94,10 @@ importers: version: 0.7.3(nanostores@0.10.3)(react@18.3.1) '@octokit/rest': specifier: ^21.0.2 - version: 21.1.0 + version: 21.0.2 '@octokit/types': specifier: ^13.6.2 - version: 13.8.0 + version: 13.6.2 '@openrouter/ai-sdk-provider': specifier: ^0.0.5 version: 0.0.5(zod@3.24.1) @@ -106,61 +106,61 @@ importers: version: 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-collapsible': specifier: ^1.0.3 - version: 1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-context-menu': specifier: ^2.2.2 - version: 2.2.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.2.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-dialog': specifier: ^1.1.5 - version: 1.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-dropdown-menu': specifier: ^2.1.6 - version: 2.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-label': specifier: ^2.1.1 - version: 2.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-popover': specifier: ^1.1.5 - version: 1.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-progress': specifier: ^1.0.3 - version: 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-scroll-area': specifier: ^1.2.2 - version: 1.2.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.2.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-separator': specifier: ^1.1.0 - version: 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-switch': specifier: ^1.1.1 - version: 1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-tabs': specifier: ^1.1.2 - version: 1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-tooltip': specifier: ^1.1.4 - version: 1.1.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@remix-run/cloudflare': specifier: ^2.15.2 - version: 2.15.3(@cloudflare/workers-types@4.20250204.0)(typescript@5.7.3) + version: 2.16.0(@cloudflare/workers-types@4.20241127.0)(typescript@5.7.2) '@remix-run/cloudflare-pages': specifier: ^2.15.2 - version: 2.15.3(@cloudflare/workers-types@4.20250204.0)(typescript@5.7.3) + version: 2.16.0(@cloudflare/workers-types@4.20241127.0)(typescript@5.7.2) '@remix-run/node': specifier: ^2.15.2 - version: 2.15.3(typescript@5.7.3) + version: 2.15.3(typescript@5.7.2) '@remix-run/react': specifier: ^2.15.2 - version: 2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) + version: 2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2) '@tanstack/react-virtual': specifier: ^3.13.0 - version: 3.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.13.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react-beautiful-dnd': specifier: ^13.1.8 version: 13.1.8 '@uiw/codemirror-theme-vscode': specifier: ^4.23.6 - version: 4.23.8(@codemirror/language@6.10.8)(@codemirror/state@6.5.2)(@codemirror/view@6.36.2) + version: 4.23.6(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0) '@unocss/reset': specifier: ^0.61.9 version: 0.61.9 @@ -178,13 +178,13 @@ importers: version: 5.5.0 ai: specifier: ^4.1.2 - version: 4.1.34(react@18.3.1)(zod@3.24.1) + version: 4.1.2(react@18.3.1)(zod@3.24.1) chalk: specifier: ^5.4.1 version: 5.4.1 chart.js: specifier: ^4.4.7 - version: 4.4.7 + version: 4.4.8 class-variance-authority: specifier: ^0.7.0 version: 0.7.1 @@ -200,12 +200,21 @@ importers: dotenv: specifier: ^16.4.7 version: 16.4.7 + electron-log: + specifier: ^5.2.3 + version: 5.3.0 + electron-store: + specifier: ^10.0.0 + version: 10.0.1 + electron-updater: + specifier: ^6.3.9 + version: 6.3.9 file-saver: specifier: ^2.0.5 version: 2.0.5 framer-motion: specifier: ^11.12.0 - version: 11.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 11.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) ignore: specifier: ^6.0.2 version: 6.0.2 @@ -214,7 +223,7 @@ importers: version: 4.4.0 isomorphic-git: specifier: ^1.27.2 - version: 1.29.0 + version: 1.27.2 istextorbinary: specifier: ^9.5.0 version: 9.5.0 @@ -230,6 +239,9 @@ importers: jszip: specifier: ^3.10.1 version: 3.10.1 + mime: + specifier: ^4.0.4 + version: 4.0.6 nanostores: specifier: ^0.10.3 version: 0.10.3 @@ -247,10 +259,10 @@ importers: version: 13.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-chartjs-2: specifier: ^5.3.0 - version: 5.3.0(chart.js@4.4.7)(react@18.3.1) + version: 5.3.0(chart.js@4.4.8)(react@18.3.1) react-dnd: specifier: ^16.0.1 - version: 16.0.1(@types/hoist-non-react-statics@3.3.6)(@types/node@22.13.1)(@types/react@18.3.18)(react@18.3.1) + version: 16.0.1(@types/hoist-non-react-statics@3.3.6)(@types/node@22.10.1)(@types/react@18.3.12)(react@18.3.1) react-dnd-html5-backend: specifier: ^16.0.1 version: 16.0.1 @@ -262,10 +274,10 @@ importers: version: 4.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-icons: specifier: ^5.4.0 - version: 5.4.0(react@18.3.1) + version: 5.5.0(react@18.3.1) react-markdown: specifier: ^9.0.1 - version: 9.0.3(@types/react@18.3.18)(react@18.3.1) + version: 9.0.1(@types/react@18.3.12)(react@18.3.1) react-resizable-panels: specifier: ^2.1.7 version: 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -280,56 +292,71 @@ importers: version: 6.0.0 remark-gfm: specifier: ^4.0.0 - version: 4.0.1 + version: 4.0.0 remix-island: specifier: ^0.2.0 - version: 0.2.0(@remix-run/react@2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/server-runtime@2.15.3(typescript@5.7.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 0.2.0(@remix-run/react@2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2))(@remix-run/server-runtime@2.16.0(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) remix-utils: specifier: ^7.7.0 - version: 7.7.0(@remix-run/cloudflare@2.15.3(@cloudflare/workers-types@4.20250204.0)(typescript@5.7.3))(@remix-run/node@2.15.3(typescript@5.7.3))(@remix-run/react@2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/router@1.22.0)(react@18.3.1)(zod@3.24.1) + version: 7.7.0(@remix-run/cloudflare@2.16.0(@cloudflare/workers-types@4.20241127.0)(typescript@5.7.2))(@remix-run/node@2.15.3(typescript@5.7.2))(@remix-run/react@2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2))(@remix-run/router@1.23.0)(react@18.3.1)(zod@3.24.1) rollup-plugin-node-polyfills: specifier: ^0.2.1 version: 0.2.1 shiki: specifier: ^1.24.0 - version: 1.29.2 + version: 1.24.0 tailwind-merge: specifier: ^2.2.1 version: 2.6.0 unist-util-visit: specifier: ^5.0.0 version: 5.0.0 + vite-plugin-node-polyfills: + specifier: ^0.22.0 + version: 0.22.0(rollup@4.28.0)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)) + zod: + specifier: ^3.24.1 + version: 3.24.1 zustand: specifier: ^5.0.3 - version: 5.0.3(@types/react@18.3.18)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) + version: 5.0.3(@types/react@18.3.12)(react@18.3.1)(use-sync-external-store@1.2.2(react@18.3.1)) devDependencies: '@blitz/eslint-plugin': specifier: 0.1.0 - version: 0.1.0(jiti@1.21.7)(prettier@3.5.0)(typescript@5.7.3) + version: 0.1.0(@types/eslint@8.56.10)(jiti@1.21.6)(prettier@3.4.1)(typescript@5.7.2) '@cloudflare/workers-types': specifier: ^4.20241127.0 - version: 4.20250204.0 + version: 4.20241127.0 + '@electron/notarize': + specifier: ^2.5.0 + version: 2.5.0 '@iconify-json/ph': specifier: ^1.2.1 - version: 1.2.2 + version: 1.2.1 '@iconify/types': specifier: ^2.0.0 version: 2.0.0 '@remix-run/dev': specifier: ^2.15.2 - version: 2.15.3(@remix-run/react@2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@types/node@22.13.1)(sass-embedded@1.83.4)(typescript@5.7.3)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4))(wrangler@3.108.0(@cloudflare/workers-types@4.20250204.0)) + version: 2.16.0(@remix-run/react@2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2))(@remix-run/serve@2.16.0(typescript@5.7.2))(@types/node@22.10.1)(sass-embedded@1.81.0)(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0))(wrangler@3.91.0(@cloudflare/workers-types@4.20241127.0)) + '@remix-run/serve': + specifier: ^2.15.2 + version: 2.16.0(typescript@5.7.2) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.6.3 '@testing-library/react': specifier: ^16.2.0 - version: 16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/diff': specifier: ^5.2.3 version: 5.2.3 '@types/dom-speech-recognition': specifier: ^0.0.4 version: 0.0.4 + '@types/electron': + specifier: ^1.6.10 + version: 1.6.12 '@types/file-saver': specifier: ^2.0.7 version: 2.0.7 @@ -341,16 +368,28 @@ importers: version: 1.0.3 '@types/react': specifier: ^18.3.12 - version: 18.3.18 + version: 18.3.12 '@types/react-dom': specifier: ^18.3.1 - version: 18.3.5(@types/react@18.3.18) + version: 18.3.1 '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.3.4(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) + version: 4.3.4(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)) + concurrently: + specifier: ^8.2.2 + version: 8.2.2 + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + electron: + specifier: ^33.2.0 + version: 33.3.2 + electron-builder: + specifier: ^25.1.8 + version: 25.1.8(electron-builder-squirrel-windows@25.1.8(dmg-builder@25.1.8)) fast-glob: specifier: ^3.3.2 - version: 3.3.3 + version: 3.3.2 husky: specifier: 9.1.7 version: 9.1.7 @@ -365,46 +404,49 @@ importers: version: 3.3.2 pnpm: specifier: ^9.14.4 - version: 9.15.5 + version: 9.14.4 prettier: specifier: ^3.4.1 - version: 3.5.0 + version: 3.4.1 + rimraf: + specifier: ^4.4.1 + version: 4.4.1 sass-embedded: specifier: ^1.81.0 - version: 1.83.4 + version: 1.81.0 typescript: specifier: ^5.7.2 - version: 5.7.3 + version: 5.7.2 unified: specifier: ^11.0.5 version: 11.0.5 unocss: specifier: ^0.61.9 - version: 0.61.9(postcss@8.5.2)(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) + version: 0.61.9(postcss@8.4.49)(rollup@4.28.0)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)) vite: specifier: ^5.4.11 - version: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) - vite-plugin-node-polyfills: - specifier: ^0.22.0 - version: 0.22.0(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) + version: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) + vite-plugin-copy: + specifier: ^0.1.6 + version: 0.1.6 vite-plugin-optimize-css-modules: specifier: ^1.1.0 - version: 1.2.0(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) + version: 1.1.0(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)) vite-tsconfig-paths: specifier: ^4.3.2 - version: 4.3.2(typescript@5.7.3)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) + version: 4.3.2(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)) vitest: specifier: ^2.1.7 - version: 2.1.9(@types/node@22.13.1)(jsdom@26.0.0)(sass-embedded@1.83.4) + version: 2.1.8(@types/node@22.10.1)(jsdom@26.0.0)(sass-embedded@1.81.0) wrangler: specifier: ^3.91.0 - version: 3.108.0(@cloudflare/workers-types@4.20250204.0) - zod: - specifier: ^3.24.1 - version: 3.24.1 + version: 3.91.0(@cloudflare/workers-types@4.20241127.0) packages: + 7zip-bin@5.2.0: + resolution: {integrity: sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==} + '@adobe/css-tools@4.4.2': resolution: {integrity: sha512-baYZExFpsdkBNuvGKTKWCwKH57HRZLVtycZS05WTQNVOiXVSeAki3nU35zlRbToeMW8aHlJfyS+1C4BOv27q0A==} @@ -420,14 +462,14 @@ packages: peerDependencies: zod: ^3.0.0 - '@ai-sdk/cohere@1.1.8': - resolution: {integrity: sha512-IUNmRrlYsGL2PICHYi5dh4xtflQP429FKRYtNgUfn3Pwpg5rf3kCYqnbEXGh6P1B0xUGtE31Xt4SnNyBXIw3YA==} + '@ai-sdk/cohere@1.0.3': + resolution: {integrity: sha512-SDjPinUcGzTNiSMN+9zs1fuAcP8rU1/+CmDWAGu7eMhwVGDurgiOqscC0Oqs/aLsodLt/sFeOvyqj86DAknpbg==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 - '@ai-sdk/deepseek@0.1.8': - resolution: {integrity: sha512-ZnugEqmkscB0an46I0Z6Ppor8YwOC2bIhWXkivkGbVdpQgpx43cPBrD3lyOyNEHIFwHtcrJF13S+4FNPzR0Gng==} + '@ai-sdk/deepseek@0.1.3': + resolution: {integrity: sha512-cj0uYgFk0TWWtHKtwB8v17frttquLll9hCpRWtKpiZO69SbiZOwNSjENaoyZvN1sHMLQoQkw+hnbMGtWuU2yOg==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 @@ -444,14 +486,14 @@ packages: peerDependencies: zod: ^3.0.0 - '@ai-sdk/openai-compatible@0.1.8': - resolution: {integrity: sha512-o2WeZmkOgaaEHAIZfAdlAASotNemhWBzupUp7ql/vBKIrPDctbQS4K7XOvG7EZ1dshn0TxB+Ur7Q8HoWSeWPmA==} + '@ai-sdk/openai-compatible@0.1.3': + resolution: {integrity: sha512-3dr81jVNTd7Tg4i6JwGKHX47DnQ+jn3zOuxLvu6bM2hFylchtIFn/ut3Et7VfsdMWf4gj9tXp/9rUiQ0JokkrQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 - '@ai-sdk/openai@1.1.9': - resolution: {integrity: sha512-t/CpC4TLipdbgBJTMX/otzzqzCMBSPQwUOkYPGbT/jyuC86F+YO9o+LS0Ty2pGUE1kyT+B3WmJ318B16ZCg4hw==} + '@ai-sdk/openai@1.1.2': + resolution: {integrity: sha512-9rfcwjl4g1/Bdr2SmgFQr+aw81r62MvIKE7QDHMC4ulFd/Hej2oClROSMpDFZHXzs7RGeb32VkRyCHUWWgN3RQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 @@ -483,6 +525,15 @@ packages: zod: optional: true + '@ai-sdk/provider-utils@2.0.2': + resolution: {integrity: sha512-IAvhKhdlXqiSmvx/D4uNlFYCl8dWT+M9K+IuEcSgnE2Aj27GWu8sDIpAf4r4Voc+wOUkOECVKQhFo8g9pozdjA==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + peerDependenciesMeta: + zod: + optional: true + '@ai-sdk/provider-utils@2.0.5': resolution: {integrity: sha512-2M7vLhYN0ThGjNlzow7oO/lsL+DyMxvGMIYmVQvEYaCWhDzxH5dOp78VNjJIVwHzVLMbBDigX3rJuzAs853idw==} engines: {node: '>=18'} @@ -492,8 +543,8 @@ packages: zod: optional: true - '@ai-sdk/provider-utils@2.1.6': - resolution: {integrity: sha512-Pfyaj0QZS22qyVn5Iz7IXcJ8nKIKlu2MeSAdKJzTwkAks7zdLaKVB+396Rqcp1bfQnxl7vaduQVMQiXUrgK8Gw==} + '@ai-sdk/provider-utils@2.1.2': + resolution: {integrity: sha512-ezpQT6kzy/2O4yyn/2YigMqynBYjZIOam3/EMNVzju+Ogj+Z+pf27c/Th78ce0A2ltgrXx6xN14sal/HHZNOOw==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 @@ -513,16 +564,20 @@ packages: resolution: {integrity: sha512-XMsNGJdGO+L0cxhhegtqZ8+T6nn4EoShS819OvCgI2kLbYTIvk0GWFGD0AXJmxkxs3DrpsJxKAFukFR7bvTkgQ==} engines: {node: '>=18'} + '@ai-sdk/provider@1.0.1': + resolution: {integrity: sha512-mV+3iNDkzUsZ0pR2jG0sVzU6xtQY5DtSCBy3JFycLp6PwjyLw/iodfL3MwdmMCRJWgs3dadcHejRnMvF9nGTBg==} + engines: {node: '>=18'} + '@ai-sdk/provider@1.0.3': resolution: {integrity: sha512-WiuJEpHTrltOIzv3x2wx4gwksAHW0h6nK3SoDzjqCOJLu/2OJ1yASESTIX+f07ChFykHElVoP80Ol/fe9dw6tQ==} engines: {node: '>=18'} - '@ai-sdk/provider@1.0.7': - resolution: {integrity: sha512-q1PJEZ0qD9rVR+8JFEd01/QM++csMT5UVwYXSN2u54BrVw/D8TZLTeg2FEfKK00DgAx0UtWd8XOhhwITP9BT5g==} + '@ai-sdk/provider@1.0.6': + resolution: {integrity: sha512-hwj/gFNxpDgEfTaYzCYoslmw01IY9kWLKl/wf8xuPvHtQIzlfXWmmUwc8PnCwxyt8cKzIuV0dfUghCf68HQ0SA==} engines: {node: '>=18'} - '@ai-sdk/react@1.1.11': - resolution: {integrity: sha512-vfjZ7w2M+Me83HTMMrnnrmXotz39UDCMd27YQSrvt2f1YCLPloVpLhP+Y9TLZeFE/QiiRCrPYLDQm6aQJYJ9PQ==} + '@ai-sdk/react@1.1.2': + resolution: {integrity: sha512-bBcRsDaNHzCKSIBbPngMeqbnwZ1RFadXQo9XzHoGrvLANYRwuphGNB8XTXYVLC/eXjoaGVGw2wWf/TYigEnCuA==} engines: {node: '>=18'} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc @@ -533,8 +588,8 @@ packages: zod: optional: true - '@ai-sdk/ui-utils@1.1.11': - resolution: {integrity: sha512-1SC9W4VZLcJtxHRv4Y0aX20EFeaEP6gUvVqoKLBBtMLOgtcZrv/F/HQRjGavGugiwlS3dsVza4X+E78fiwtlTA==} + '@ai-sdk/ui-utils@1.1.2': + resolution: {integrity: sha512-+0kfBF4Y9jmlg1KlbNKIxchmXx9PzuReSpgRNWhpU10vfl1eeer4xK/XL2qHnzAWhsMFe/SVZXJIQObk44zNEQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 @@ -546,15 +601,12 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@antfu/install-pkg@1.0.0': - resolution: {integrity: sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==} + '@antfu/install-pkg@0.4.1': + resolution: {integrity: sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw==} '@antfu/utils@0.7.10': resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} - '@antfu/utils@8.1.0': - resolution: {integrity: sha512-XPR7Jfwp0FFl/dFYPX8ZjpmU4/1mIXTjnZ1ba48BLMyKOV62/tiRjdsFcPs2hsYcSud4tzk7w3a3LjX8Fu3huA==} - '@asamuzakjp/css-color@2.8.3': resolution: {integrity: sha512-GIc76d9UI1hCvOATjZPyHFmE5qhRccp3/zGfMPapK3jBi+yocEzp6BBB0UnfRYP9NP4FANqUZYb0hnfs3TM3hw==} @@ -575,92 +627,104 @@ packages: '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/client-bedrock-runtime@3.744.0': - resolution: {integrity: sha512-kKKN6RwzlI4GRvfJ6pe3z4Rwm4FHL3BnVoe2xcP/Kr/c5dT6kZbBDDBumsg8Svb4KE6N4pWck4qr/6F9axQ2Bw==} - engines: {node: '>=18.0.0'} + '@aws-sdk/client-bedrock-runtime@3.716.0': + resolution: {integrity: sha512-ZnolSsCZE4IT4A8nn5sOHq+JiOomEV1+pp1SntHdK1SGu6pP5YMWNfwJwujZFrsKkRB+QpSGj7l0W0lr2B/JBw==} + engines: {node: '>=16.0.0'} - '@aws-sdk/client-sso@3.744.0': - resolution: {integrity: sha512-mzJxPQ9mcnNY50pi7+pxB34/Dt7PUn0OgkashHdJPTnavoriLWvPcaQCG1NEVAtyzxNdowhpi4KjC+aN1EwAeA==} - engines: {node: '>=18.0.0'} + '@aws-sdk/client-sso-oidc@3.716.0': + resolution: {integrity: sha512-lA4IB9FzR2KjH7EVCo+mHGFKqdViVyeBQEIX9oVratL/l7P0bMS1fMwgfHOc3ACazqNxBxDES7x08ZCp32y6Lw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.716.0 - '@aws-sdk/core@3.744.0': - resolution: {integrity: sha512-R0XLfDDq7MAXYyDf7tPb+m0R7gmzTRRDtPNQ5jvuq8dbkefph5gFMkxZ2zSx7dfTsfYHhBPuTBsQ0c5Xjal3Vg==} - engines: {node: '>=18.0.0'} + '@aws-sdk/client-sso@3.716.0': + resolution: {integrity: sha512-5Nb0jJXce2TclbjG7WVPufwhgV1TRydz1QnsuBtKU0AdViEpr787YrZhPpGnNIM1Dx+R1H/tmAHZnOoohS6D8g==} + engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-env@3.744.0': - resolution: {integrity: sha512-hyjC7xqzAeERorYYjhQG1ivcr1XlxgfBpa+r4pG29toFG60mACyVzaR7+og3kgzjRFAB7D1imMxPQyEvQ1QokA==} - engines: {node: '>=18.0.0'} + '@aws-sdk/client-sts@3.716.0': + resolution: {integrity: sha512-i4SVNsrdXudp8T4bkm7Fi3YWlRnvXCSwvNDqf6nLqSJxqr4CN3VlBELueDyjBK7TAt453/qSif+eNx+bHmwo4Q==} + engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-http@3.744.0': - resolution: {integrity: sha512-k+P1Tl5ewBvVByR6hB726qFIzANgQVf2cY87hZ/e09pQYlH4bfBcyY16VJhkqYnKmv6HMdWxKHX7D8nwlc8Obg==} - engines: {node: '>=18.0.0'} + '@aws-sdk/core@3.716.0': + resolution: {integrity: sha512-5DkUiTrbyzO8/W4g7UFEqRFpuhgizayHI/Zbh0wtFMcot8801nJV+MP/YMhdjimlvAr/OqYB08FbGsPyWppMTw==} + engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-ini@3.744.0': - resolution: {integrity: sha512-hjEWgkF86tkvg8PIsDiB3KkTj7z8ZFGR0v0OLQYD47o17q1qfoMzZmg9wae3wXp9KzU+lZETo+8oMqX9a+7aVQ==} - engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-env@3.716.0': + resolution: {integrity: sha512-JI2KQUnn2arICwP9F3CnqP1W3nAbm4+meQg/yOhp9X0DMzQiHrHRd4HIrK2vyVgi2/6hGhONY5uLF26yRTA7nQ==} + engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-node@3.744.0': - resolution: {integrity: sha512-4oUfRd6pe/VGmKoav17pPoOO0WP0L6YXmHqtJHSDmFUOAa+Vh0ZRljTj/yBdleRgdO6rOfdWqoGLFSFiAZDrsQ==} - engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-http@3.716.0': + resolution: {integrity: sha512-CZ04pl2z7igQPysQyH2xKZHM3fLwkemxQbKOlje3TmiS1NwXvcKvERhp9PE/H23kOL7beTM19NMRog/Fka/rlw==} + engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-process@3.744.0': - resolution: {integrity: sha512-m0d/pDBIaiEAAxWXt/c79RHsKkUkyPOvF2SAMRddVhhOt1GFZI4ml+3f4drmAZfXldIyJmvJTJJqWluVPwTIqQ==} - engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-ini@3.716.0': + resolution: {integrity: sha512-P37We2GtZvdROxiwP0zrpEL81/HuYK1qlYxp5VCj3uV+G4mG8UQN2gMIU/baYrpOQqa0h81RfyQGRFUjVaDVqw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.716.0 - '@aws-sdk/credential-provider-sso@3.744.0': - resolution: {integrity: sha512-xdMufTZOvpbDoDPI2XLu0/Rg3qJ/txpS8IJR63NsCGotHJZ/ucLNKwTcGS40hllZB8qSHTlvmlOzElDahTtx/A==} - engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-node@3.716.0': + resolution: {integrity: sha512-FGQPK2uKfS53dVvoskN/s/t6m0Po24BGd1PzJdzHBFCOjxbZLM6+8mDMXeyi2hCLVVQOUcuW41kOgmJ0+zMbww==} + engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-web-identity@3.744.0': - resolution: {integrity: sha512-cNk93GZxORzqEojWfXdrPBF6a7Nu3LpPCWG5mV+lH2tbuGsmw6XhKkwpt7o+OiIP4tKCpHlvqOD8f1nmhe1KDA==} - engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-process@3.716.0': + resolution: {integrity: sha512-0spcu2MWVVHSTHH3WE2E//ttUJPwXRM3BCp+WyI41xLzpNu1Fd8zjOrDpEo0SnGUzsSiRTIJWgkuu/tqv9NJ2A==} + engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-host-header@3.734.0': - resolution: {integrity: sha512-LW7RRgSOHHBzWZnigNsDIzu3AiwtjeI2X66v+Wn1P1u+eXssy1+up4ZY/h+t2sU4LU36UvEf+jrZti9c6vRnFw==} - engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-sso@3.716.0': + resolution: {integrity: sha512-J2IA3WuCpRGGoZm6VHZVFCnrxXP+41iUWb9Ct/1spljegTa1XjiaZ5Jf3+Ubj7WKiyvP9/dgz1L0bu2bYEjliw==} + engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-logger@3.734.0': - resolution: {integrity: sha512-mUMFITpJUW3LcKvFok176eI5zXAUomVtahb9IQBwLzkqFYOrMJvWAvoV4yuxrJ8TlQBG8gyEnkb9SnhZvjg67w==} - engines: {node: '>=18.0.0'} + '@aws-sdk/credential-provider-web-identity@3.716.0': + resolution: {integrity: sha512-vzgpWKs2gGXZGdbMKRFrMW4PqEFWkGvwWH2T7ZwQv9m+8lQ7P4Dk2uimqu0f37HZAbpn8HFMqRh4CaySjU354A==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.716.0 - '@aws-sdk/middleware-recursion-detection@3.734.0': - resolution: {integrity: sha512-CUat2d9ITsFc2XsmeiRQO96iWpxSKYFjxvj27Hc7vo87YUHRnfMfnc8jw1EpxEwMcvBD7LsRa6vDNky6AjcrFA==} - engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-host-header@3.714.0': + resolution: {integrity: sha512-6l68kjNrh5QC8FGX3I3geBDavWN5Tg1RLHJ2HLA8ByGBtJyCwnz3hEkKfaxn0bBx0hF9DzbfjEOUF6cDqy2Kjg==} + engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-user-agent@3.744.0': - resolution: {integrity: sha512-ROUbDQHfVWiBHXd4m9E9mKj1Azby8XCs8RC8OCf9GVH339GSE6aMrPJSzMlsV1LmzPdPIypgp5qqh5NfSrKztg==} - engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-logger@3.714.0': + resolution: {integrity: sha512-RkqHlMvQWUaRklU1bMfUuBvdWwxgUtEqpADaHXlGVj3vtEY2UgBjy+57CveC4MByqKIunNvVHBBbjrGVtwY7Lg==} + engines: {node: '>=16.0.0'} - '@aws-sdk/nested-clients@3.744.0': - resolution: {integrity: sha512-Mnrlh4lRY1gZQnKvN2Lh/5WXcGkzC41NM93mtn2uaqOh+DZLCXCttNCfbUesUvYJLOo3lYaOpiDsjTkPVB1yjw==} - engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-recursion-detection@3.714.0': + resolution: {integrity: sha512-AVU5ixnh93nqtsfgNc284oXsXaadyHGPHpql/jwgaaqQfEXjS/1/j3j9E/vpacfTTz2Vzo7hAOjnvrOXSEVDaA==} + engines: {node: '>=16.0.0'} - '@aws-sdk/region-config-resolver@3.734.0': - resolution: {integrity: sha512-Lvj1kPRC5IuJBr9DyJ9T9/plkh+EfKLy+12s/mykOy1JaKHDpvj+XGy2YO6YgYVOb8JFtaqloid+5COtje4JTQ==} - engines: {node: '>=18.0.0'} + '@aws-sdk/middleware-user-agent@3.716.0': + resolution: {integrity: sha512-FpAtT6nNKrYdkDZndutEraiRMf+TgDzAGvniqRtZ/YTPA+gIsWrsn+TwMKINR81lFC3nQfb9deS5CFtxd021Ew==} + engines: {node: '>=16.0.0'} - '@aws-sdk/token-providers@3.744.0': - resolution: {integrity: sha512-v/1+lWkDCd60Ei6oyhJqli6mTsPEVepLoSMB50vHUVlJP0fzXu/3FMje90/RzeUoh/VugZQJCEv/NNpuC6wztg==} - engines: {node: '>=18.0.0'} + '@aws-sdk/region-config-resolver@3.714.0': + resolution: {integrity: sha512-HJzsQxgMOAzZrbf/YIqEx30or4tZK1oNAk6Wm6xecUQx+23JXIaePRu1YFUOLBBERQ4QBPpISFurZWBMZ5ibAw==} + engines: {node: '>=16.0.0'} - '@aws-sdk/types@3.734.0': - resolution: {integrity: sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg==} - engines: {node: '>=18.0.0'} + '@aws-sdk/token-providers@3.714.0': + resolution: {integrity: sha512-vKN064aLE3kl+Zl16Ony3jltHnMddMBT7JRkP1L+lLywhA0PcAKxpdvComul/sTBWnbnwLnaS5NsDUhcWySH8A==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sso-oidc': ^3.714.0 - '@aws-sdk/util-endpoints@3.743.0': - resolution: {integrity: sha512-sN1l559zrixeh5x+pttrnd0A3+r34r0tmPkJ/eaaMaAzXqsmKU/xYre9K3FNnsSS1J1k4PEfk/nHDTVUgFYjnw==} - engines: {node: '>=18.0.0'} + '@aws-sdk/types@3.714.0': + resolution: {integrity: sha512-ZjpP2gYbSFlxxaUDa1Il5AVvfggvUPbjzzB/l3q0gIE5Thd6xKW+yzEpt2mLZ5s5UaYSABZbF94g8NUOF4CVGA==} + engines: {node: '>=16.0.0'} - '@aws-sdk/util-locate-window@3.723.0': - resolution: {integrity: sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw==} - engines: {node: '>=18.0.0'} + '@aws-sdk/util-endpoints@3.714.0': + resolution: {integrity: sha512-Xv+Z2lhe7w7ZZRsgBwBMZgGTVmS+dkkj2S13uNHAx9lhB5ovM8PhK5G/j28xYf6vIibeuHkRAbb7/ozdZIGR+A==} + engines: {node: '>=16.0.0'} - '@aws-sdk/util-user-agent-browser@3.734.0': - resolution: {integrity: sha512-xQTCus6Q9LwUuALW+S76OL0jcWtMOVu14q+GoLnWPUM7QeUw963oQcLhF7oq0CtaLLKyl4GOUfcwc773Zmwwng==} + '@aws-sdk/util-locate-window@3.693.0': + resolution: {integrity: sha512-ttrag6haJLWABhLqtg1Uf+4LgHWIMOVSYL+VYZmAp2v4PUGOwWmWQH0Zk8RM7YuQcLfH/EoR72/Yxz6A4FKcuw==} + engines: {node: '>=16.0.0'} - '@aws-sdk/util-user-agent-node@3.744.0': - resolution: {integrity: sha512-BJURjwIXhNa4heXkLC0+GcL+8wVXaU7JoyW6ckdvp93LL+sVHeR1d5FxXZHQW/pMI4E3gNlKyBqjKaT75tObNQ==} - engines: {node: '>=18.0.0'} + '@aws-sdk/util-user-agent-browser@3.714.0': + resolution: {integrity: sha512-OdJJ03cP9/MgIVToPJPCPUImbpZzTcwdIgbXC0tUQPJhbD7b7cB4LdnkhNHko+MptpOrCq4CPY/33EpOjRdofw==} + + '@aws-sdk/util-user-agent-node@3.716.0': + resolution: {integrity: sha512-3PqaXmQbxrtHKAsPCdp7kn5FrQktj8j3YyuNsqFZ8rWZeEQ88GWlsvE61PTsr2peYCKzpFqYVddef2x1axHU0w==} + engines: {node: '>=16.0.0'} peerDependencies: aws-crt: '>=1.0.0' peerDependenciesMeta: @@ -671,24 +735,24 @@ packages: resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.26.8': - resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + '@babel/compat-data@7.26.2': + resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==} engines: {node: '>=6.9.0'} - '@babel/core@7.26.8': - resolution: {integrity: sha512-l+lkXCHS6tQEc5oUpK28xBOZ6+HwaH7YwoYQbLFiYb4nS2/l1tKnZEtEWkD0GuiYdvArf9qBS0XlQGXzPMsNqQ==} + '@babel/core@7.26.0': + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} engines: {node: '>=6.9.0'} - '@babel/generator@7.26.8': - resolution: {integrity: sha512-ef383X5++iZHWAXX0SXQR6ZyQhw/0KtTkrTz61WXRhFM6dhpHulO/RJz79L8S6ugZHJkOOkUrUdxgdF2YiPFnA==} + '@babel/generator@7.26.2': + resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.25.9': resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.26.5': - resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + '@babel/helper-compilation-targets@7.25.9': + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} engines: {node: '>=6.9.0'} '@babel/helper-create-class-features-plugin@7.25.9': @@ -715,16 +779,20 @@ packages: resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.26.5': - resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + '@babel/helper-plugin-utils@7.25.9': + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} engines: {node: '>=6.9.0'} - '@babel/helper-replace-supers@7.26.5': - resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} + '@babel/helper-replace-supers@7.25.9': + resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-simple-access@7.25.9': + resolution: {integrity: sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==} + engines: {node: '>=6.9.0'} + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} engines: {node: '>=6.9.0'} @@ -741,12 +809,12 @@ packages: resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.26.7': - resolution: {integrity: sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==} + '@babel/helpers@7.26.0': + resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.26.8': - resolution: {integrity: sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw==} + '@babel/parser@7.26.2': + resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} engines: {node: '>=6.0.0'} hasBin: true @@ -768,8 +836,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.26.3': - resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==} + '@babel/plugin-transform-modules-commonjs@7.25.9': + resolution: {integrity: sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -786,8 +854,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.26.8': - resolution: {integrity: sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==} + '@babel/plugin-transform-typescript@7.25.9': + resolution: {integrity: sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -798,28 +866,28 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.26.7': - resolution: {integrity: sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==} + '@babel/runtime@7.26.0': + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} engines: {node: '>=6.9.0'} - '@babel/template@7.26.8': - resolution: {integrity: sha512-iNKaX3ZebKIsCvJ+0jd6embf+Aulaa3vNBqZ41kM7iTWjx5qzWKXGHiJUW3+nTpQ18SG11hdF8OAzKrpXkb96Q==} + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.26.8': - resolution: {integrity: sha512-nic9tRkjYH0oB2dzr/JoGIm+4Q6SuYeLEiIiZDwBscRMYFJ+tMAz98fuel9ZnbXViA2I0HVSSRRK8DW5fjXStA==} + '@babel/traverse@7.25.9': + resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} engines: {node: '>=6.9.0'} - '@babel/types@7.26.8': - resolution: {integrity: sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA==} + '@babel/types@7.26.0': + resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} '@blitz/eslint-plugin@0.1.0': resolution: {integrity: sha512-mGEAFWCI5AQ4nrePhjp2WzvRen+UWR+SF4MvH70icIBClR08Gm3dT9MRa2jszOpfY00NyIYfm7/1CFZ37GvW4g==} engines: {node: ^18.0.0 || ^20.0.0} - '@bufbuild/protobuf@2.2.3': - resolution: {integrity: sha512-tFQoXHJdkEOSwj5tRIZSPNUuXK3RaR7T1nUrPgbYX1pUbvqqaaZAsfo+NXBPsz5rZMSKVFrgK1WL8Q/MSLvprg==} + '@bufbuild/protobuf@2.2.2': + resolution: {integrity: sha512-UNtPCbrwrenpmrXuRwn9jYpPoweNXj8X5sMvYgsqYyaH8jQ6LfUJSk3dJLnBK+6sfYPrF4iAIo5sd5HQ+tg75A==} '@cloudflare/kv-asset-handler@0.1.3': resolution: {integrity: sha512-FNcunDuTmEfQTLRLtA6zz+buIXUHj1soPvSWzzQFBC+n2lsy+CGf/NIrR3SEPCmsVNQj70/Jx2lViCpq+09YpQ==} @@ -828,44 +896,53 @@ packages: resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==} engines: {node: '>=16.13'} - '@cloudflare/workerd-darwin-64@1.20250204.0': - resolution: {integrity: sha512-HpsgbWEfvdcwuZ8WAZhi1TlSCyyHC3tbghpKsOqGDaQNltyAFAWqa278TPNfcitYf/FmV4961v3eqUE+RFdHNQ==} + '@cloudflare/workerd-darwin-64@1.20241106.1': + resolution: {integrity: sha512-zxvaToi1m0qzAScrxFt7UvFVqU8DxrCO2CinM1yQkv5no7pA1HolpIrwZ0xOhR3ny64Is2s/J6BrRjpO5dM9Zw==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20250204.0': - resolution: {integrity: sha512-AJ8Tk7KMJqePlch3SH8oL41ROtsrb07hKRHD6M+FvGC3tLtf26rpteAAMNYKMDYKzFNFUIKZNijYDFZjBFndXQ==} + '@cloudflare/workerd-darwin-arm64@1.20241106.1': + resolution: {integrity: sha512-j3dg/42D/bPgfNP3cRUBxF+4waCKO/5YKwXNj+lnVOwHxDu+ne5pFw9TIkKYcWTcwn0ZUkbNZNM5rhJqRn4xbg==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@cloudflare/workerd-linux-64@1.20250204.0': - resolution: {integrity: sha512-RIUfUSnDC8h73zAa+u1K2Frc7nc+eeQoBBP7SaqsRe6JdX8jfIv/GtWjQWCoj8xQFgLvhpJKZ4sTTTV+AilQbw==} + '@cloudflare/workerd-linux-64@1.20241106.1': + resolution: {integrity: sha512-Ih+Ye8E1DMBXcKrJktGfGztFqHKaX1CeByqshmTbODnWKHt6O65ax3oTecUwyC0+abuyraOpAtdhHNpFMhUkmw==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20250204.0': - resolution: {integrity: sha512-8Ql8jDjoIgr2J7oBD01kd9kduUz60njofrBpAOkjCPed15He8e8XHkYaYow3g0xpae4S2ryrPOeoD3M64sRxeg==} + '@cloudflare/workerd-linux-arm64@1.20241106.1': + resolution: {integrity: sha512-mdQFPk4+14Yywn7n1xIzI+6olWM8Ybz10R7H3h+rk0XulMumCWUCy1CzIDauOx6GyIcSgKIibYMssVHZR30ObA==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@cloudflare/workerd-windows-64@1.20250204.0': - resolution: {integrity: sha512-RpDJO3+to+e17X3EWfRCagboZYwBz2fowc+jL53+fd7uD19v3F59H48lw2BDpHJMRyhg6ouWcpM94OhsHv8ecA==} + '@cloudflare/workerd-windows-64@1.20241106.1': + resolution: {integrity: sha512-4rtcss31E/Rb/PeFocZfr+B9i1MdrkhsTBWizh8siNR4KMmkslU2xs2wPaH1z8+ErxkOsHrKRa5EPLh5rIiFeg==} engines: {node: '>=16'} cpu: [x64] os: [win32] - '@cloudflare/workers-types@4.20250204.0': - resolution: {integrity: sha512-mWoQbYaP+nYztx9I7q9sgaiNlT54Cypszz0RfzMxYnT5W3NXDuwGcjGB+5B5H5VB8tEC2dYnBRpa70lX94ueaQ==} + '@cloudflare/workers-shared@0.9.0': + resolution: {integrity: sha512-eP6Ir45uPbKnpADVzUCtkRUYxYxjB1Ew6n/whTJvHu8H4m93USHAceCMm736VBZdlxuhXXUjEP3fCUxKPn+cfw==} + engines: {node: '>=16.7.0'} - '@codemirror/autocomplete@6.18.4': - resolution: {integrity: sha512-sFAphGQIqyQZfP2ZBsSHV7xQvo9Py0rV0dW7W3IMRdS+zDuNb2l3no78CvUaWKGfzFjI4FTrLdUSj86IGb2hRA==} + '@cloudflare/workers-types@4.20241127.0': + resolution: {integrity: sha512-UqlvtqV8eI0CdPR7nxlbVlE52+lcjHvGdbYXEPwisy23+39RsFV7OOy0da0moJAhqnL2OhDmWTOaKdsVcPHiJQ==} - '@codemirror/commands@6.8.0': - resolution: {integrity: sha512-q8VPEFaEP4ikSlt6ZxjB3zW72+7osfAYW9i8Zu943uqbKuz6utc1+F170hyLUCUltXORjQXRyYQNfkckzA/bPQ==} + '@codemirror/autocomplete@6.18.3': + resolution: {integrity: sha512-1dNIOmiM0z4BIBwxmxEfA1yoxh1MF/6KPBbh20a5vphGV0ictKlgQsbJs6D6SkR6iJpGbpwRsa6PFMNlg9T9pQ==} + peerDependencies: + '@codemirror/language': ^6.0.0 + '@codemirror/state': ^6.0.0 + '@codemirror/view': ^6.0.0 + '@lezer/common': ^1.0.0 + + '@codemirror/commands@6.7.1': + resolution: {integrity: sha512-llTrboQYw5H4THfhN4U3qCnSZ1SOJ60ohhz+SzU0ADGtwlc533DtklQP0vSFaQuCPDn3BPpOd1GbbnUtwNjsrw==} '@codemirror/lang-cpp@6.0.2': resolution: {integrity: sha512-6oYEYUKHvrnacXxWxYa6t4puTlbN3dgV662BDfSH8+MfjQjVmP697/KYTDOqpxgerkvoNm7q5wlFMBeX8ZMocg==} @@ -882,11 +959,11 @@ packages: '@codemirror/lang-json@6.0.1': resolution: {integrity: sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==} - '@codemirror/lang-markdown@6.3.2': - resolution: {integrity: sha512-c/5MYinGbFxYl4itE9q/rgN/sMTjOr8XL5OWnC+EaRMLfCbVUmmubTJfdgpfcSS2SCaT7b+Q+xi3l6CgoE+BsA==} + '@codemirror/lang-markdown@6.3.1': + resolution: {integrity: sha512-y3sSPuQjBKZQbQwe3ZJKrSW6Silyl9PnrU/Mf0m2OQgIlPoSYTtOvEL7xs94SVMkb8f4x+SQFnzXPdX4Wk2lsg==} - '@codemirror/lang-python@6.1.7': - resolution: {integrity: sha512-mZnFTsL4lW5p9ch8uKNKeRU3xGGxr1QpESLilfON2E3fQzOa/OygEMkaDvERvXDJWJA9U9oN/D4w0ZuUzNO4+g==} + '@codemirror/lang-python@6.1.6': + resolution: {integrity: sha512-ai+01WfZhWqM92UqjnvorkxosZ2aq2u28kHvr+N3gu012XqY2CThD67JPMHnGceRfXPDBmn1HnyqowdpF57bNg==} '@codemirror/lang-sass@6.0.2': resolution: {integrity: sha512-l/bdzIABvnTo1nzdY6U+kPAC51czYQcOErfzQ9zSm9D8GmNPD0WTW8st/CJwBTPLO8jlrbyvlSEcN20dc4iL0Q==} @@ -897,8 +974,8 @@ packages: '@codemirror/lang-wast@6.0.2': resolution: {integrity: sha512-Imi2KTpVGm7TKuUkqyJ5NRmeFWF7aMpNiwHnLQe0x9kmrxElndyH0K6H/gXtWwY6UshMRAhpENsgfpSwsgmC6Q==} - '@codemirror/language@6.10.8': - resolution: {integrity: sha512-wcP8XPPhDH2vTqf181U8MbZnW+tDyPYy0UzVOa+oHORjyT+mhhom9vBd7dApJwoDz9Nb/a8kHjJIsuA/t8vNFw==} + '@codemirror/language@6.10.6': + resolution: {integrity: sha512-KrsbdCnxEztLVbB5PycWXFxas4EOyk/fPAfruSOnDDppevQgid2XZ+KbJ9u+fDikP/e7MW7HPBTvTb8JlZK9vA==} '@codemirror/lint@6.8.4': resolution: {integrity: sha512-u4q7PnZlJUojeRe8FJa/njJcMctISGgPQ4PnWsd9268R4ZTtU+tfFYmwkBvgcrK2+QQ8tYFVALVb5fVJykKc5A==} @@ -906,11 +983,11 @@ packages: '@codemirror/search@6.5.8': resolution: {integrity: sha512-PoWtZvo7c1XFeZWmmyaOp2G0XVbOnm+fJzvghqGAktBW3cufwJUWvSCcNG0ppXiBEM05mZu6RhMtXPv2hpllig==} - '@codemirror/state@6.5.2': - resolution: {integrity: sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==} + '@codemirror/state@6.4.1': + resolution: {integrity: sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==} - '@codemirror/view@6.36.2': - resolution: {integrity: sha512-DZ6ONbs8qdJK0fdN7AB82CgI6tYXf4HWk1wSVa0+9bhVznCuuvhQtX8bFBoy3dv8rZSQqUd8GvhVAcielcidrA==} + '@codemirror/view@6.35.0': + resolution: {integrity: sha512-I0tYy63q5XkaWsJ8QRv5h6ves7kvtrBWjBcnf/bzohFJQc5c14a1AQRdE8QpPF9eMp5Mq2FMm59TCj1gDfE7kw==} '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} @@ -944,8 +1021,36 @@ packages: resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==} engines: {node: '>=18'} - '@emnapi/runtime@1.3.1': - resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + '@develar/schema-utils@2.6.5': + resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==} + engines: {node: '>= 8.9.0'} + + '@electron/asar@3.2.18': + resolution: {integrity: sha512-2XyvMe3N3Nrs8cV39IKELRHTYUWFKrmqqSY1U+GMlc0jvqjIVnoxhNd2H4JolWQncbJi1DCvb5TNxZuI2fEjWg==} + engines: {node: '>=10.12.0'} + hasBin: true + + '@electron/get@2.0.3': + resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} + engines: {node: '>=12'} + + '@electron/notarize@2.5.0': + resolution: {integrity: sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==} + engines: {node: '>= 10.0.0'} + + '@electron/osx-sign@1.3.1': + resolution: {integrity: sha512-BAfviURMHpmb1Yb50YbCxnOY0wfwaLXH5KJ4+80zS0gUkzDX3ec23naTlEqKsN+PwYn+a1cCzM7BJ4Wcd3sGzw==} + engines: {node: '>=12.0.0'} + hasBin: true + + '@electron/rebuild@3.6.1': + resolution: {integrity: sha512-f6596ZHpEq/YskUd8emYvOUne89ij8mQgjYFA5ru25QwbrRO+t1SImofdDv7kKOuWCmVOuU5tvfkbgGxIl3E/w==} + engines: {node: '>=12.13.0'} + hasBin: true + + '@electron/universal@2.0.1': + resolution: {integrity: sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA==} + engines: {node: '>=16.4'} '@emotion/hash@0.9.2': resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} @@ -1516,43 +1621,39 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.19.2': - resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} + '@eslint/config-array@0.19.0': + resolution: {integrity: sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.10.0': - resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.11.0': - resolution: {integrity: sha512-DWUB2pksgNEb6Bz2fggIy1wh6fGgZP4Xyy/Mt0QZPiloKKXerbqq9D3SBQTlCRYOrcRPu4vuz+CGjwdfqxnoWA==} + '@eslint/core@0.9.0': + resolution: {integrity: sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.2.0': resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.20.0': - resolution: {integrity: sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==} + '@eslint/js@9.16.0': + resolution: {integrity: sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/object-schema@2.1.6': - resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + '@eslint/object-schema@2.1.4': + resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.2.5': - resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==} + '@eslint/plugin-kit@0.2.3': + resolution: {integrity: sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@fastify/busboy@2.1.1': resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} - '@floating-ui/core@1.6.9': - resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} + '@floating-ui/core@1.6.8': + resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} - '@floating-ui/dom@1.6.13': - resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} + '@floating-ui/dom@1.6.12': + resolution: {integrity: sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==} '@floating-ui/react-dom@2.1.2': resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} @@ -1566,8 +1667,11 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' - '@floating-ui/utils@0.2.9': - resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} + '@floating-ui/utils@0.2.8': + resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} + + '@gar/promisify@1.1.3': + resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} '@headlessui/react@2.2.0': resolution: {integrity: sha512-RzCEg+LXsuI7mHiSomsu/gBJSjpupm6A1qIZ5sWjd7JhARNlMiSA4kKfJpCKwU9tE+zMRterhhrP74PvfJrpXQ==} @@ -1596,129 +1700,24 @@ packages: resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} engines: {node: '>=18.18'} - '@iconify-json/ph@1.2.2': - resolution: {integrity: sha512-PgkEZNtqa8hBGjHXQa4pMwZa93hmfu8FUSjs/nv4oUU6yLsgv+gh9nu28Kqi8Fz9CCVu4hj1MZs9/60J57IzFw==} + '@iconify-json/ph@1.2.1': + resolution: {integrity: sha512-x0DNfwWrS18dbsBYOq3XGiZnGz4CgRyC+YSl/TZvMQiKhIUl1woWqUbMYqqfMNUBzjyk7ulvaRovpRsIlqIf8g==} - '@iconify-json/svg-spinners@1.2.2': - resolution: {integrity: sha512-DIErwfBWWzLfmAG2oQnbUOSqZhDxlXvr8941itMCrxQoMB0Hiv8Ww6Bln/zIgxwjDvSem2dKJtap+yKKwsB/2A==} + '@iconify-json/svg-spinners@1.2.1': + resolution: {integrity: sha512-QZNA4YzFD2zqdC6nIBJM6WlAGakUCjvMt92Ks1R4XFxkd76Ps3rdiauYWESDRZvNYURAByp2b9cwZarFula65g==} '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - '@iconify/utils@2.3.0': - resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==} - - '@img/sharp-darwin-arm64@0.33.5': - resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [darwin] - - '@img/sharp-darwin-x64@0.33.5': - resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-darwin-arm64@1.0.4': - resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} - cpu: [arm64] - os: [darwin] - - '@img/sharp-libvips-darwin-x64@1.0.4': - resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-linux-arm64@1.0.4': - resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} - cpu: [arm64] - os: [linux] - - '@img/sharp-libvips-linux-arm@1.0.5': - resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} - cpu: [arm] - os: [linux] - - '@img/sharp-libvips-linux-s390x@1.0.4': - resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} - cpu: [s390x] - os: [linux] - - '@img/sharp-libvips-linux-x64@1.0.4': - resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} - cpu: [x64] - os: [linux] - - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} - cpu: [arm64] - os: [linux] - - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} - cpu: [x64] - os: [linux] - - '@img/sharp-linux-arm64@0.33.5': - resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - - '@img/sharp-linux-arm@0.33.5': - resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm] - os: [linux] - - '@img/sharp-linux-s390x@0.33.5': - resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [s390x] - os: [linux] - - '@img/sharp-linux-x64@0.33.5': - resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - - '@img/sharp-linuxmusl-arm64@0.33.5': - resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - - '@img/sharp-linuxmusl-x64@0.33.5': - resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - - '@img/sharp-wasm32@0.33.5': - resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [wasm32] - - '@img/sharp-win32-ia32@0.33.5': - resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ia32] - os: [win32] - - '@img/sharp-win32-x64@0.33.5': - resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [win32] + '@iconify/utils@2.1.33': + resolution: {integrity: sha512-jP9h6v/g0BIZx0p7XGJJVtkVnydtbgTgt9mVNcGDYwaa7UhdHdI9dvoq+gKj9sijMSJKxUPEG2JyjsgXjxL7Kw==} '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} '@jridgewell/resolve-uri@3.1.2': @@ -1750,8 +1749,8 @@ packages: '@lezer/cpp@1.1.2': resolution: {integrity: sha512-macwKtyeUO0EW86r3xWQCzOV9/CF8imJLpJlPv3sDY57cPGeUZ8gXWOWNlJr52TVByMV3PayFQCA5SHEERDmVQ==} - '@lezer/css@1.1.10': - resolution: {integrity: sha512-V5/89eDapjeAkWPBpWEfQjZ1Hag3aYUUJOL8213X0dFRuXJ4BXa5NKl9USzOnaLod4AOpmVCkduir2oKwZYZtg==} + '@lezer/css@1.1.9': + resolution: {integrity: sha512-TYwgljcDv+YrV0MZFFvYFQHCfGgbPMR6nuqLabBdmZoFH3EP1gvw8t0vae326Ne3PszQkbXfVBjCnf3ZVCr0bA==} '@lezer/highlight@1.2.1': resolution: {integrity: sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==} @@ -1759,29 +1758,31 @@ packages: '@lezer/html@1.3.10': resolution: {integrity: sha512-dqpT8nISx/p9Do3AchvYGV3qYc4/rKr3IBZxlHmpIKam56P47RSHkSF5f13Vu9hebS1jM0HmtJIwLbWz1VIY6w==} - '@lezer/javascript@1.4.21': - resolution: {integrity: sha512-lL+1fcuxWYPURMM/oFZLEDm0XuLN128QPV+VuGtKpeaOGdcl9F2LYC3nh1S9LkPqx9M0mndZFdXCipNAZpzIkQ==} + '@lezer/javascript@1.4.20': + resolution: {integrity: sha512-Qhl3x+hVPnZkylv+BS//zx77KR4GLxM4PiL02r/D1Zoa4WLQI1A0cHuOr6k0FOTTSCPNNfeNANax0I5DWcXBYw==} - '@lezer/json@1.0.3': - resolution: {integrity: sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==} + '@lezer/json@1.0.2': + resolution: {integrity: sha512-xHT2P4S5eeCYECyKNPhr4cbEL9tc8w83SPwRC373o9uEdrvGKTZoJVAGxpOsZckMlEh9W23Pc72ew918RWQOBQ==} '@lezer/lr@1.4.2': resolution: {integrity: sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==} - '@lezer/markdown@1.4.1': - resolution: {integrity: sha512-Za5okfyWoNaX6sSZ2dm94XegaFXbkQ9UjKJ8hAoZX88XDpbu6DoR63IuSl+dqj1VkVQBQGsdr0JnTcMsogQDdw==} + '@lezer/markdown@1.3.2': + resolution: {integrity: sha512-Wu7B6VnrKTbBEohqa63h5vxXjiC4pO5ZQJ/TDbhJxPQaaIoRD/6UVDhSDtVsCwVZV12vvN9KxuLL3ATMnlG0oQ==} - '@lezer/python@1.1.15': - resolution: {integrity: sha512-aVQ43m2zk4FZYedCqL0KHPEUsqZOrmAvRhkhHlVPnDD1HODDyyQv5BRIuod4DadkgBEZd53vQOtXTonNbEgjrQ==} + '@lezer/python@1.1.14': + resolution: {integrity: sha512-ykDOb2Ti24n76PJsSa4ZoDF0zH12BSw1LGfQXCYJhJyOGiFTfGaX0Du66Ze72R+u/P35U+O6I9m8TFXov1JzsA==} '@lezer/sass@1.0.7': resolution: {integrity: sha512-8HLlOkuX/SMHOggI2DAsXUw38TuURe+3eQ5hiuk9QmYOUyC55B1dYEIMkav5A4IELVaW4e1T4P9WRiI5ka4mdw==} - '@marijn/buildtool@0.1.6': - resolution: {integrity: sha512-rcA2wljsM24MFAwx2U5vSBrt7IdIaPh4WPRfJPS8PuCUlbuQ8Pmky4c/ec00v3YFu90rZSbkVLnPuCeb/mUEng==} + '@malept/cross-spawn-promise@2.0.0': + resolution: {integrity: sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==} + engines: {node: '>= 12.13.0'} - '@marijn/find-cluster-break@1.0.2': - resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==} + '@malept/flatpak-bundler@0.4.0': + resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} + engines: {node: '>= 10.0.0'} '@mdx-js/mdx@2.3.0': resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} @@ -1805,6 +1806,10 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@npmcli/fs@2.1.2': + resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + '@npmcli/fs@3.1.1': resolution: {integrity: sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -1813,6 +1818,11 @@ packages: resolution: {integrity: sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@npmcli/move-file@2.0.1': + resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This functionality has been moved to @npmcli/fs + '@npmcli/package-json@4.0.1': resolution: {integrity: sha512-lRCEGdHZomFsURroh522YvA/2cVb9oPIJrjHanCJZkiasz1BzcnLr3tBJhlV7S86MBJBuAQ33is2D60YitZL2Q==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -1821,27 +1831,27 @@ packages: resolution: {integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - '@octokit/auth-token@5.1.2': - resolution: {integrity: sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==} + '@octokit/auth-token@5.1.1': + resolution: {integrity: sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==} engines: {node: '>= 18'} - '@octokit/core@6.1.3': - resolution: {integrity: sha512-z+j7DixNnfpdToYsOutStDgeRzJSMnbj8T1C/oQjB6Aa+kRfNjs/Fn7W6c8bmlt6mfy3FkgeKBRnDjxQow5dow==} + '@octokit/core@6.1.2': + resolution: {integrity: sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==} engines: {node: '>= 18'} - '@octokit/endpoint@10.1.2': - resolution: {integrity: sha512-XybpFv9Ms4hX5OCHMZqyODYqGTZ3H6K6Vva+M9LR7ib/xr1y1ZnlChYv9H680y77Vd/i/k+thXApeRASBQkzhA==} + '@octokit/endpoint@10.1.1': + resolution: {integrity: sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q==} engines: {node: '>= 18'} - '@octokit/graphql@8.2.0': - resolution: {integrity: sha512-gejfDywEml/45SqbWTWrhfwvLBrcGYhOn50sPOjIeVvH6i7D16/9xcFA8dAJNp2HMcd+g4vru41g4E2RBiZvfQ==} + '@octokit/graphql@8.1.1': + resolution: {integrity: sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==} engines: {node: '>= 18'} - '@octokit/openapi-types@23.0.1': - resolution: {integrity: sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==} + '@octokit/openapi-types@22.2.0': + resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==} - '@octokit/plugin-paginate-rest@11.4.0': - resolution: {integrity: sha512-ttpGck5AYWkwMkMazNCZMqxKqIq1fJBNxBfsFwwfyYKTf914jKkLF0POMS3YkPBwp5g1c2Y4L79gDz01GhSr1g==} + '@octokit/plugin-paginate-rest@11.3.6': + resolution: {integrity: sha512-zcvqqf/+TicbTCa/Z+3w4eBJcAxCFymtc0UAIsR3dEVoNilWld4oXdscQ3laXamTszUZdusw97K8+DrbFiOwjw==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': '>=6' @@ -1852,26 +1862,26 @@ packages: peerDependencies: '@octokit/core': '>=6' - '@octokit/plugin-rest-endpoint-methods@13.3.1': - resolution: {integrity: sha512-o8uOBdsyR+WR8MK9Cco8dCgvG13H1RlM1nWnK/W7TEACQBFux/vPREgKucxUfuDQ5yi1T3hGf4C5ZmZXAERgwQ==} + '@octokit/plugin-rest-endpoint-methods@13.2.6': + resolution: {integrity: sha512-wMsdyHMjSfKjGINkdGKki06VEkgdEldIGstIEyGX0wbYHGByOwN/KiM+hAAlUwAtPkP3gvXtVQA9L3ITdV2tVw==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': '>=6' - '@octokit/request-error@6.1.6': - resolution: {integrity: sha512-pqnVKYo/at0NuOjinrgcQYpEbv4snvP3bKMRqHaD9kIsk9u1LCpb2smHZi8/qJfgeNqLo5hNW4Z7FezNdEo0xg==} + '@octokit/request-error@6.1.5': + resolution: {integrity: sha512-IlBTfGX8Yn/oFPMwSfvugfncK2EwRLjzbrpifNaMY8o/HTEAFqCA1FZxjD9cWvSKBHgrIhc4CSBIzMxiLsbzFQ==} engines: {node: '>= 18'} - '@octokit/request@9.2.0': - resolution: {integrity: sha512-kXLfcxhC4ozCnAXy2ff+cSxpcF0A1UqxjvYMqNuPIeOAzJbVWQ+dy5G2fTylofB/gTbObT8O6JORab+5XtA1Kw==} + '@octokit/request@9.1.3': + resolution: {integrity: sha512-V+TFhu5fdF3K58rs1pGUJIDH5RZLbZm5BI+MNF+6o/ssFNT4vWlCh/tVpF3NxGtP15HUxTTMUbsG5llAuU2CZA==} engines: {node: '>= 18'} - '@octokit/rest@21.1.0': - resolution: {integrity: sha512-93iLxcKDJboUpmnUyeJ6cRIi7z7cqTZT1K7kRK4LobGxwTwpsa+2tQQbRQNGy7IFDEAmrtkf4F4wBj3D5rVlJQ==} + '@octokit/rest@21.0.2': + resolution: {integrity: sha512-+CiLisCoyWmYicH25y1cDfCrv41kRSvTq6pPWtRroRJzhsCZWZyCqGyI8foJT5LmScADSwRAnr/xo+eewL04wQ==} engines: {node: '>= 18'} - '@octokit/types@13.8.0': - resolution: {integrity: sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==} + '@octokit/types@13.6.2': + resolution: {integrity: sha512-WpbZfZUcZU77DrSW4wbsSgTPfKcp286q3ItaIgvSbBpZJlu6mnYXAkjZz6LVZPXkEvLIM8McanyZejKTYUHipA==} '@openrouter/ai-sdk-provider@0.0.5': resolution: {integrity: sha512-AfxXQhISpxQSeUjU/4jo9waM5GRNX6eIkfTFS9l7vHkD1TKDP81Y/dXrE0ttJeN/Kap3tPF3Jwh49me0gWwjSw==} @@ -1904,9 +1914,25 @@ packages: '@radix-ui/number@1.1.0': resolution: {integrity: sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==} + '@radix-ui/primitive@1.1.0': + resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==} + '@radix-ui/primitive@1.1.1': resolution: {integrity: sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==} + '@radix-ui/react-arrow@1.1.0': + resolution: {integrity: sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-arrow@1.1.2': resolution: {integrity: sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg==} peerDependencies: @@ -1933,6 +1959,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-collection@1.1.0': + resolution: {integrity: sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-collection@1.1.2': resolution: {integrity: sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw==} peerDependencies: @@ -1946,6 +1985,15 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-compose-refs@1.1.0': + resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-compose-refs@1.1.1': resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==} peerDependencies: @@ -1955,8 +2003,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-context-menu@2.2.6': - resolution: {integrity: sha512-aUP99QZ3VU84NPsHeaFt4cQUNgJqFsLLOt/RbbWXszZ6MP0DpDyjkFZORr4RpAEx3sUBk+Kc8h13yGtC5Qw8dg==} + '@radix-ui/react-context-menu@2.2.2': + resolution: {integrity: sha512-99EatSTpW+hRYHt7m8wdDlLtkmTovEe8Z/hnxUPV+SKuuNL5HWNhQI4QSdjZqNSgXHay2z4M3Dym73j9p2Gx5Q==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1968,6 +2016,15 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-context@1.1.0': + resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-context@1.1.1': resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==} peerDependencies: @@ -1999,6 +2056,19 @@ packages: '@types/react': optional: true + '@radix-ui/react-dismissable-layer@1.1.1': + resolution: {integrity: sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-dismissable-layer@1.1.5': resolution: {integrity: sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==} peerDependencies: @@ -2034,6 +2104,19 @@ packages: '@types/react': optional: true + '@radix-ui/react-focus-scope@1.1.0': + resolution: {integrity: sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-focus-scope@1.1.2': resolution: {integrity: sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA==} peerDependencies: @@ -2069,6 +2152,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-menu@2.1.2': + resolution: {integrity: sha512-lZ0R4qR2Al6fZ4yCCZzu/ReTFrylHFxIqy7OezIpWF4bL0o9biKo0pFIvkaew3TyZ9Fy5gYVrR5zCGZBVbO1zg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-menu@2.1.6': resolution: {integrity: sha512-tBBb5CXDJW3t2mo9WlO7r6GTmWV0F0uzHZVFmlRmYpiSK1CDU5IKojP1pm7oknpBOrFZx/YgBRW9oorPO2S/Lg==} peerDependencies: @@ -2095,6 +2191,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-popper@1.2.0': + resolution: {integrity: sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-popper@1.2.2': resolution: {integrity: sha512-Rvqc3nOpwseCyj/rgjlJDYAgyfw7OC1tTkKn2ivhaMGcYt8FSBlahHOZak2i3QwkRXUXgGgzeEe2RuqeEHuHgA==} peerDependencies: @@ -2108,6 +2217,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-portal@1.1.2': + resolution: {integrity: sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-portal@1.1.4': resolution: {integrity: sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==} peerDependencies: @@ -2121,6 +2243,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-presence@1.1.1': + resolution: {integrity: sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-presence@1.1.2': resolution: {integrity: sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==} peerDependencies: @@ -2134,6 +2269,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-primitive@2.0.0': + resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-primitive@2.0.2': resolution: {integrity: sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==} peerDependencies: @@ -2160,6 +2308,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-roving-focus@1.1.0': + resolution: {integrity: sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-roving-focus@1.1.2': resolution: {integrity: sha512-zgMQWkNO169GtGqRvYrzb0Zf8NhMHS2DuEB/TiEmVnpr5OqPU3i8lfbxaAmC2J/KYuIQxyoQQ6DxepyXp61/xw==} peerDependencies: @@ -2186,8 +2347,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-separator@1.1.2': - resolution: {integrity: sha512-oZfHcaAp2Y6KFBX6I5P1u7CQoy4lheCGiYj+pGFrHy8E/VNRb5E39TkTr3JrV520csPBTZjkuKFdEsjS5EUNKQ==} + '@radix-ui/react-separator@1.1.0': + resolution: {integrity: sha512-3uBAs+egzvJBDZAzvb/n4NxxOYpnspmWxO2u5NbZ8Y6FM/NdrGSF9bop3Cf6F6C71z1rTSn8KV0Fo2ZVd79lGA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2199,6 +2360,15 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-slot@1.1.0': + resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-slot@1.1.2': resolution: {integrity: sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==} peerDependencies: @@ -2208,8 +2378,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-switch@1.1.3': - resolution: {integrity: sha512-1nc+vjEOQkJVsJtWPSiISGT6OKm4SiOdjMo+/icLxo2G4vxz1GntC5MzfL4v8ey9OEfw787QCD1y3mUv0NiFEQ==} + '@radix-ui/react-switch@1.1.1': + resolution: {integrity: sha512-diPqDDoBcZPSicYoMWdWx+bCPuTRH4QSp9J+65IvtdS0Kuzt67bI6n32vCj8q6NZmYW/ah+2orOtMwcX5eQwIg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2234,8 +2404,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-tooltip@1.1.8': - resolution: {integrity: sha512-YAA2cu48EkJZdAMHC0dqo9kialOcRStbtiY4nJPaht7Ptrhcvpo+eDChaM6BIs8kL6a8Z5l5poiqLnXcNduOkA==} + '@radix-ui/react-tooltip@1.1.4': + resolution: {integrity: sha512-QpObUH/ZlpaO4YgHSaYzrLO2VuO+ZBFFgGzjMUPwtiYnAzzNNDPJeEGRrT7qNOrWm/Jr08M1vlp+vTHtnSQ0Uw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2310,8 +2480,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-visually-hidden@1.1.2': - resolution: {integrity: sha512-1SzA4ns2M1aRlvxErqhLHsBHoS5eI5UUcI2awAMgGUp4LoaoWOKYmvqDY2s/tltuPkh3Yk77YF/r3IRj+Amx4Q==} + '@radix-ui/react-visually-hidden@1.1.0': + resolution: {integrity: sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2326,14 +2496,14 @@ packages: '@radix-ui/rect@1.1.0': resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} - '@react-aria/focus@3.19.1': - resolution: {integrity: sha512-bix9Bu1Ue7RPcYmjwcjhB14BMu2qzfJ3tMQLqDc9pweJA66nOw8DThy3IfVr8Z7j2PHktOLf9kcbiZpydKHqzg==} + '@react-aria/focus@3.20.0': + resolution: {integrity: sha512-KXZCwWzwnmtUo6xhnyV26ptxlxmqd0Reez7axduqqqeDDgDZOVscoo/5gFg71fdPZmnDC8MyUK1vxSbMhOTrGg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/interactions@3.23.0': - resolution: {integrity: sha512-0qR1atBIWrb7FzQ+Tmr3s8uH5mQdyRH78n0krYaG8tng9+u1JlSi8DGRSaC9ezKyNB84m7vHT207xnHXGeJ3Fg==} + '@react-aria/interactions@3.24.0': + resolution: {integrity: sha512-6Zdhp1pswyPgbwEWzvXARdKAWPjP7mACczoIUvlEQiMsX04fuizBiBLAA+W/5mPe17pbJYHA/rxZF5Y5m+M0Ng==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -2344,8 +2514,8 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/utils@3.27.0': - resolution: {integrity: sha512-p681OtApnKOdbeN8ITfnnYqfdHS0z7GE+4l8EXlfLnr70Rp/9xicBO6d2rU+V/B3JujDw2gPWxYKEnEeh0CGCw==} + '@react-aria/utils@3.28.0': + resolution: {integrity: sha512-FfpvpADk61OvEnFe37k6jF1zr5gtafIPN9ccJRnPCTqrzuExag01mGi+wX/hWyFK0zAe1OjWf1zFOX3FsFvikg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -2359,18 +2529,21 @@ packages: '@react-dnd/shallowequal@4.0.2': resolution: {integrity: sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==} + '@react-stately/flags@3.1.0': + resolution: {integrity: sha512-KSHOCxTFpBtxhIRcKwsD1YDTaNxFtCYuAUb0KEihc16QwqZViq4hasgPBs2gYm7fHRbw7WYzWKf6ZSo/+YsFlg==} + '@react-stately/utils@3.10.5': resolution: {integrity: sha512-iMQSGcpaecghDIh3mZEpZfoFH3ExBwTtuBEcvZ2XnGzCgQjeYXcMdIUwAfVQLXFTdHUHGF6Gu6/dFrYsCzySBQ==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-types/shared@3.27.0': - resolution: {integrity: sha512-gvznmLhi6JPEf0bsq7SwRYTHAKKq/wcmKqFez9sRdbED+SPMUmK5omfZ6w3EwUFQHbYUa4zPBYedQ7Knv70RMw==} + '@react-types/shared@3.28.0': + resolution: {integrity: sha512-9oMEYIDc3sk0G5rysnYvdNrkSg7B04yTKl50HHSZVbokeHpnU0yRmsDaWb9B/5RprcKj8XszEk5guBO8Sa/Q+Q==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@remix-run/cloudflare-pages@2.15.3': - resolution: {integrity: sha512-fnkv/AbYY7j+vc1pSd2ycwq2hoPvblZGX8f4s41R5yP/0guFqKt+Ofzhk9fvNh6QErrFvoI5sOEhq/jldDZWzw==} + '@remix-run/cloudflare-pages@2.16.0': + resolution: {integrity: sha512-Il/4JWkIFhkGPqE9MtaWCG431wNvAo+JsGClwVnOQgQYOJKV7wcvjZ4fQmkzc+GYBGMlOxx1OxD/S76XqnVzFQ==} engines: {node: '>=18.0.0'} peerDependencies: '@cloudflare/workers-types': ^4.0.0 @@ -2379,8 +2552,8 @@ packages: typescript: optional: true - '@remix-run/cloudflare@2.15.3': - resolution: {integrity: sha512-L5O+ejspTcAffp979BwE2tDR1KkMblYiCjV87hfjYu1ktjWCLXcizeiOl65msljOE8yrMcF+cGzl75QQGw753w==} + '@remix-run/cloudflare@2.16.0': + resolution: {integrity: sha512-Z9kN6tChe36S175z4AVm8c79kUUBS4k16IBIpNods3z3oyo103EDawHdpiYcaEdz2OfdTCvNwsA7zLvRBW7yNA==} engines: {node: '>=18.0.0'} peerDependencies: '@cloudflare/workers-types': ^4.0.0 @@ -2389,15 +2562,15 @@ packages: typescript: optional: true - '@remix-run/dev@2.15.3': - resolution: {integrity: sha512-agndQJHs7qISPXXH/Zet0VHWvcwtQGoEOXxltjerNQ2zWcAJQBm9i06tS6n6v/ZP0sHIVdo/IsvgAA4wetqmNw==} + '@remix-run/dev@2.16.0': + resolution: {integrity: sha512-zfb93zJatWRMmBU4dQFM9pTgYfkZi1orDYtd18f9YNZM6pbshmhqlsiGZmrMAhAuYLGB983aqkXY3pxtZhoDkQ==} engines: {node: '>=18.0.0'} hasBin: true peerDependencies: - '@remix-run/react': ^2.15.3 - '@remix-run/serve': ^2.15.3 + '@remix-run/react': ^2.16.0 + '@remix-run/serve': ^2.16.0 typescript: ^5.1.0 - vite: ^5.1.0 + vite: ^5.1.0 || ^6.0.0 wrangler: ^3.28.2 peerDependenciesMeta: '@remix-run/serve': @@ -2409,6 +2582,16 @@ packages: wrangler: optional: true + '@remix-run/express@2.16.0': + resolution: {integrity: sha512-JuN+HjwJqlJqvMIWxWEw6Oj6u/TfwW4itHJg2hGAvQftBCwSD49kkAMUwBzdZr2BOepdwjuS/UKJpannp4PWKQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + express: ^4.20.0 + typescript: ^5.1.0 + peerDependenciesMeta: + typescript: + optional: true + '@remix-run/node@2.15.3': resolution: {integrity: sha512-TYfS6BPhbABBpSRZ6WBA4qIWSwWvJhRVQGXCHUtgOwkuW863rcFmjh9g2Xj/IHyTmbOYPdcjHsIgZ9el4CHOKQ==} engines: {node: '>=18.0.0'} @@ -2418,8 +2601,17 @@ packages: typescript: optional: true - '@remix-run/react@2.15.3': - resolution: {integrity: sha512-AynCltIk8KLlxV9a+4dORtEMNtF5wJAzBNBZLJMdw3FCJNQZRYQSen8rDnIovOOiz9UNZ2SmBTFERiFMKS16jw==} + '@remix-run/node@2.16.0': + resolution: {integrity: sha512-9yYBYCHYO1+bIScGAtOy5/r4BoTS8E5lpQmjWP99UxSCSiKHPEO76V9Z8mmmarTNis/FPN+sUwfmbQWNHLA2vw==} + engines: {node: '>=18.0.0'} + peerDependencies: + typescript: ^5.1.0 + peerDependenciesMeta: + typescript: + optional: true + + '@remix-run/react@2.16.0': + resolution: {integrity: sha512-eTi60/7AO8vnIL+IT33ZixT0tLjUrilgKhimdZtddBc/XIawUeslC01mNUHIlLXS+zUDM05iBmY2aLTKkqyy6Q==} engines: {node: '>=18.0.0'} peerDependencies: react: ^18.0.0 @@ -2433,6 +2625,15 @@ packages: resolution: {integrity: sha512-MBOl8MeOzpK0HQQQshKB7pABXbmyHizdTpqnrIseTbsv0nAepwC2ENZa1aaBExNQcpLoXmWthhak8SABLzvGPw==} engines: {node: '>=14.0.0'} + '@remix-run/router@1.23.0': + resolution: {integrity: sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==} + engines: {node: '>=14.0.0'} + + '@remix-run/serve@2.16.0': + resolution: {integrity: sha512-KF3ofzLcXf2lY1jFa8o7iDbRblSDIlzpUaxhcvPWPatrJwfB6ww/aVEesERKD+AUUonx6kB4KkEj5eAn0U86MA==} + engines: {node: '>=18.0.0'} + hasBin: true + '@remix-run/server-runtime@2.15.3': resolution: {integrity: sha512-taHBe1DEqxZNjjj6OfkSYbup+sZPjbTgUhykaI+nHqrC2NDQuTiisBXhLwtx60GctONR/x0lWhF7R9ZGC5WsHw==} engines: {node: '>=18.0.0'} @@ -2442,6 +2643,15 @@ packages: typescript: optional: true + '@remix-run/server-runtime@2.16.0': + resolution: {integrity: sha512-gbuc4slxPi+pT47MrUYprX/wCuDlYL6H3LHZSvimWO1kDCBt8oefHzdHDPjLi4B1xzqXZomswTbuJzpZ7xRRTg==} + engines: {node: '>=18.0.0'} + peerDependencies: + typescript: ^5.1.0 + peerDependenciesMeta: + typescript: + optional: true + '@remix-run/web-blob@3.1.0': resolution: {integrity: sha512-owGzFLbqPH9PlKb8KvpNJ0NO74HWE2euAn61eEiyCXX/oteoVzTVSN8mpLgDjaxBf2btj5/nUllSUgpyd6IH6g==} @@ -2467,8 +2677,8 @@ packages: rollup: optional: true - '@rollup/pluginutils@5.1.4': - resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} + '@rollup/pluginutils@5.1.3': + resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -2476,312 +2686,300 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.34.6': - resolution: {integrity: sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==} + '@rollup/rollup-android-arm-eabi@4.28.0': + resolution: {integrity: sha512-wLJuPLT6grGZsy34g4N1yRfYeouklTgPhH1gWXCYspenKYD0s3cR99ZevOGw5BexMNywkbV3UkjADisozBmpPQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.34.6': - resolution: {integrity: sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==} + '@rollup/rollup-android-arm64@4.28.0': + resolution: {integrity: sha512-eiNkznlo0dLmVG/6wf+Ifi/v78G4d4QxRhuUl+s8EWZpDewgk7PX3ZyECUXU0Zq/Ca+8nU8cQpNC4Xgn2gFNDA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.34.6': - resolution: {integrity: sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==} + '@rollup/rollup-darwin-arm64@4.28.0': + resolution: {integrity: sha512-lmKx9yHsppblnLQZOGxdO66gT77bvdBtr/0P+TPOseowE7D9AJoBw8ZDULRasXRWf1Z86/gcOdpBrV6VDUY36Q==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.34.6': - resolution: {integrity: sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==} + '@rollup/rollup-darwin-x64@4.28.0': + resolution: {integrity: sha512-8hxgfReVs7k9Js1uAIhS6zq3I+wKQETInnWQtgzt8JfGx51R1N6DRVy3F4o0lQwumbErRz52YqwjfvuwRxGv1w==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.34.6': - resolution: {integrity: sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==} + '@rollup/rollup-freebsd-arm64@4.28.0': + resolution: {integrity: sha512-lA1zZB3bFx5oxu9fYud4+g1mt+lYXCoch0M0V/xhqLoGatbzVse0wlSQ1UYOWKpuSu3gyN4qEc0Dxf/DII1bhQ==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.34.6': - resolution: {integrity: sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==} + '@rollup/rollup-freebsd-x64@4.28.0': + resolution: {integrity: sha512-aI2plavbUDjCQB/sRbeUZWX9qp12GfYkYSJOrdYTL/C5D53bsE2/nBPuoiJKoWp5SN78v2Vr8ZPnB+/VbQ2pFA==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.34.6': - resolution: {integrity: sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==} + '@rollup/rollup-linux-arm-gnueabihf@4.28.0': + resolution: {integrity: sha512-WXveUPKtfqtaNvpf0iOb0M6xC64GzUX/OowbqfiCSXTdi/jLlOmH0Ba94/OkiY2yTGTwteo4/dsHRfh5bDCZ+w==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.34.6': - resolution: {integrity: sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==} + '@rollup/rollup-linux-arm-musleabihf@4.28.0': + resolution: {integrity: sha512-yLc3O2NtOQR67lI79zsSc7lk31xjwcaocvdD1twL64PK1yNaIqCeWI9L5B4MFPAVGEVjH5k1oWSGuYX1Wutxpg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.34.6': - resolution: {integrity: sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==} + '@rollup/rollup-linux-arm64-gnu@4.28.0': + resolution: {integrity: sha512-+P9G9hjEpHucHRXqesY+3X9hD2wh0iNnJXX/QhS/J5vTdG6VhNYMxJ2rJkQOxRUd17u5mbMLHM7yWGZdAASfcg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.34.6': - resolution: {integrity: sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==} + '@rollup/rollup-linux-arm64-musl@4.28.0': + resolution: {integrity: sha512-1xsm2rCKSTpKzi5/ypT5wfc+4bOGa/9yI/eaOLW0oMs7qpC542APWhl4A37AENGZ6St6GBMWhCCMM6tXgTIplw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.34.6': - resolution: {integrity: sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': - resolution: {integrity: sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==} + '@rollup/rollup-linux-powerpc64le-gnu@4.28.0': + resolution: {integrity: sha512-zgWxMq8neVQeXL+ouSf6S7DoNeo6EPgi1eeqHXVKQxqPy1B2NvTbaOUWPn/7CfMKL7xvhV0/+fq/Z/J69g1WAQ==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.34.6': - resolution: {integrity: sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==} + '@rollup/rollup-linux-riscv64-gnu@4.28.0': + resolution: {integrity: sha512-VEdVYacLniRxbRJLNtzwGt5vwS0ycYshofI7cWAfj7Vg5asqj+pt+Q6x4n+AONSZW/kVm+5nklde0qs2EUwU2g==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.34.6': - resolution: {integrity: sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==} + '@rollup/rollup-linux-s390x-gnu@4.28.0': + resolution: {integrity: sha512-LQlP5t2hcDJh8HV8RELD9/xlYtEzJkm/aWGsauvdO2ulfl3QYRjqrKW+mGAIWP5kdNCBheqqqYIGElSRCaXfpw==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.34.6': - resolution: {integrity: sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==} + '@rollup/rollup-linux-x64-gnu@4.28.0': + resolution: {integrity: sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.34.6': - resolution: {integrity: sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==} + '@rollup/rollup-linux-x64-musl@4.28.0': + resolution: {integrity: sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.34.6': - resolution: {integrity: sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==} + '@rollup/rollup-win32-arm64-msvc@4.28.0': + resolution: {integrity: sha512-Vi+WR62xWGsE/Oj+mD0FNAPY2MEox3cfyG0zLpotZdehPFXwz6lypkGs5y38Jd/NVSbOD02aVad6q6QYF7i8Bg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.34.6': - resolution: {integrity: sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==} + '@rollup/rollup-win32-ia32-msvc@4.28.0': + resolution: {integrity: sha512-kN/Vpip8emMLn/eOza+4JwqDZBL6MPNpkdaEsgUtW1NYN3DZvZqSQrbKzJcTL6hd8YNmFTn7XGWMwccOcJBL0A==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.34.6': - resolution: {integrity: sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==} + '@rollup/rollup-win32-x64-msvc@4.28.0': + resolution: {integrity: sha512-Bvno2/aZT6usSa7lRDL2+hMjVAGjuqaymF1ApZm31JXzniR/hvr14jpU+/z4X6Gt5BPlzosscyJZGUvguXIqeQ==} cpu: [x64] os: [win32] - '@shikijs/core@1.29.2': - resolution: {integrity: sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==} + '@shikijs/core@1.24.0': + resolution: {integrity: sha512-6pvdH0KoahMzr6689yh0QJ3rCgF4j1XsXRHNEeEN6M4xJTfQ6QPWrmHzIddotg+xPJUPEPzYzYCKzpYyhTI6Gw==} - '@shikijs/engine-javascript@1.29.2': - resolution: {integrity: sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==} + '@shikijs/engine-javascript@1.24.0': + resolution: {integrity: sha512-ZA6sCeSsF3Mnlxxr+4wGEJ9Tto4RHmfIS7ox8KIAbH0MTVUkw3roHPHZN+LlJMOHJJOVupe6tvuAzRpN8qK1vA==} - '@shikijs/engine-oniguruma@1.29.2': - resolution: {integrity: sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==} + '@shikijs/engine-oniguruma@1.24.0': + resolution: {integrity: sha512-Eua0qNOL73Y82lGA4GF5P+G2+VXX9XnuUxkiUuwcxQPH4wom+tE39kZpBFXfUuwNYxHSkrSxpB1p4kyRW0moSg==} - '@shikijs/langs@1.29.2': - resolution: {integrity: sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==} + '@shikijs/types@1.24.0': + resolution: {integrity: sha512-aptbEuq1Pk88DMlCe+FzXNnBZ17LCiLIGWAeCWhoFDzia5Q5Krx3DgnULLiouSdd6+LUM39XwXGppqYE0Ghtug==} - '@shikijs/themes@1.29.2': - resolution: {integrity: sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==} + '@shikijs/vscode-textmate@9.3.0': + resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==} - '@shikijs/types@1.29.2': - resolution: {integrity: sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==} + '@sindresorhus/is@4.6.0': + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} - '@shikijs/vscode-textmate@10.0.1': - resolution: {integrity: sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==} + '@smithy/abort-controller@3.1.9': + resolution: {integrity: sha512-yiW0WI30zj8ZKoSYNx90no7ugVn3khlyH/z5W8qtKBtVE6awRALbhSG+2SAHA1r6bO/6M9utxYKVZ3PCJ1rWxw==} + engines: {node: '>=16.0.0'} - '@smithy/abort-controller@4.0.1': - resolution: {integrity: sha512-fiUIYgIgRjMWznk6iLJz35K2YxSLHzLBA/RC6lBrKfQ8fHbPfvk7Pk9UvpKoHgJjI18MnbPuEju53zcVy6KF1g==} - engines: {node: '>=18.0.0'} + '@smithy/config-resolver@3.0.13': + resolution: {integrity: sha512-Gr/qwzyPaTL1tZcq8WQyHhTZREER5R1Wytmz4WnVGL4onA3dNk6Btll55c8Vr58pLdvWZmtG8oZxJTw3t3q7Jg==} + engines: {node: '>=16.0.0'} - '@smithy/config-resolver@4.0.1': - resolution: {integrity: sha512-Igfg8lKu3dRVkTSEm98QpZUvKEOa71jDX4vKRcvJVyRc3UgN3j7vFMf0s7xLQhYmKa8kyJGQgUJDOV5V3neVlQ==} - engines: {node: '>=18.0.0'} + '@smithy/core@2.5.6': + resolution: {integrity: sha512-w494xO+CPwG/5B/N2l0obHv2Fi9U4DAY+sTi1GWT3BVvGpZetJjJXAynIO9IHp4zS1PinGhXtRSZydUXbJO4ag==} + engines: {node: '>=16.0.0'} - '@smithy/core@3.1.2': - resolution: {integrity: sha512-htwQXkbdF13uwwDevz9BEzL5ABK+1sJpVQXywwGSH973AVOvisHNfpcB8A8761G6XgHoS2kHPqc9DqHJ2gp+/Q==} - engines: {node: '>=18.0.0'} + '@smithy/credential-provider-imds@3.2.8': + resolution: {integrity: sha512-ZCY2yD0BY+K9iMXkkbnjo+08T2h8/34oHd0Jmh6BZUSZwaaGlGCyBT/3wnS7u7Xl33/EEfN4B6nQr3Gx5bYxgw==} + engines: {node: '>=16.0.0'} - '@smithy/credential-provider-imds@4.0.1': - resolution: {integrity: sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg==} - engines: {node: '>=18.0.0'} + '@smithy/eventstream-codec@3.1.10': + resolution: {integrity: sha512-323B8YckSbUH0nMIpXn7HZsAVKHYHFUODa8gG9cHo0ySvA1fr5iWaNT+iIL0UCqUzG6QPHA3BSsBtRQou4mMqQ==} - '@smithy/eventstream-codec@4.0.1': - resolution: {integrity: sha512-Q2bCAAR6zXNVtJgifsU16ZjKGqdw/DyecKNgIgi7dlqw04fqDu0mnq+JmGphqheypVc64CYq3azSuCpAdFk2+A==} - engines: {node: '>=18.0.0'} + '@smithy/eventstream-serde-browser@3.0.14': + resolution: {integrity: sha512-kbrt0vjOIihW3V7Cqj1SXQvAI5BR8SnyQYsandva0AOR307cXAc+IhPngxIPslxTLfxwDpNu0HzCAq6g42kCPg==} + engines: {node: '>=16.0.0'} - '@smithy/eventstream-serde-browser@4.0.1': - resolution: {integrity: sha512-HbIybmz5rhNg+zxKiyVAnvdM3vkzjE6ccrJ620iPL8IXcJEntd3hnBl+ktMwIy12Te/kyrSbUb8UCdnUT4QEdA==} - engines: {node: '>=18.0.0'} + '@smithy/eventstream-serde-config-resolver@3.0.11': + resolution: {integrity: sha512-P2pnEp4n75O+QHjyO7cbw/vsw5l93K/8EWyjNCAAybYwUmj3M+hjSQZ9P5TVdUgEG08ueMAP5R4FkuSkElZ5tQ==} + engines: {node: '>=16.0.0'} - '@smithy/eventstream-serde-config-resolver@4.0.1': - resolution: {integrity: sha512-lSipaiq3rmHguHa3QFF4YcCM3VJOrY9oq2sow3qlhFY+nBSTF/nrO82MUQRPrxHQXA58J5G1UnU2WuJfi465BA==} - engines: {node: '>=18.0.0'} + '@smithy/eventstream-serde-node@3.0.13': + resolution: {integrity: sha512-zqy/9iwbj8Wysmvi7Lq7XFLeDgjRpTbCfwBhJa8WbrylTAHiAu6oQTwdY7iu2lxigbc9YYr9vPv5SzYny5tCXQ==} + engines: {node: '>=16.0.0'} - '@smithy/eventstream-serde-node@4.0.1': - resolution: {integrity: sha512-o4CoOI6oYGYJ4zXo34U8X9szDe3oGjmHgsMGiZM0j4vtNoT+h80TLnkUcrLZR3+E6HIxqW+G+9WHAVfl0GXK0Q==} - engines: {node: '>=18.0.0'} + '@smithy/eventstream-serde-universal@3.0.13': + resolution: {integrity: sha512-L1Ib66+gg9uTnqp/18Gz4MDpJPKRE44geOjOQ2SVc0eiaO5l255ADziATZgjQjqumC7yPtp1XnjHlF1srcwjKw==} + engines: {node: '>=16.0.0'} - '@smithy/eventstream-serde-universal@4.0.1': - resolution: {integrity: sha512-Z94uZp0tGJuxds3iEAZBqGU2QiaBHP4YytLUjwZWx+oUeohCsLyUm33yp4MMBmhkuPqSbQCXq5hDet6JGUgHWA==} - engines: {node: '>=18.0.0'} + '@smithy/fetch-http-handler@4.1.2': + resolution: {integrity: sha512-R7rU7Ae3ItU4rC0c5mB2sP5mJNbCfoDc8I5XlYjIZnquyUwec7fEo78F6DA3SmgJgkU1qTMcZJuGblxZsl10ZA==} - '@smithy/fetch-http-handler@5.0.1': - resolution: {integrity: sha512-3aS+fP28urrMW2KTjb6z9iFow6jO8n3MFfineGbndvzGZit3taZhKWtTorf+Gp5RpFDDafeHlhfsGlDCXvUnJA==} - engines: {node: '>=18.0.0'} + '@smithy/hash-node@3.0.11': + resolution: {integrity: sha512-emP23rwYyZhQBvklqTtwetkQlqbNYirDiEEwXl2v0GYWMnCzxst7ZaRAnWuy28njp5kAH54lvkdG37MblZzaHA==} + engines: {node: '>=16.0.0'} - '@smithy/hash-node@4.0.1': - resolution: {integrity: sha512-TJ6oZS+3r2Xu4emVse1YPB3Dq3d8RkZDKcPr71Nj/lJsdAP1c7oFzYqEn1IBc915TsgLl2xIJNuxCz+gLbLE0w==} - engines: {node: '>=18.0.0'} - - '@smithy/invalid-dependency@4.0.1': - resolution: {integrity: sha512-gdudFPf4QRQ5pzj7HEnu6FhKRi61BfH/Gk5Yf6O0KiSbr1LlVhgjThcvjdu658VE6Nve8vaIWB8/fodmS1rBPQ==} - engines: {node: '>=18.0.0'} + '@smithy/invalid-dependency@3.0.11': + resolution: {integrity: sha512-NuQmVPEJjUX6c+UELyVz8kUx8Q539EDeNwbRyu4IIF8MeV7hUtq1FB3SHVyki2u++5XLMFqngeMKk7ccspnNyQ==} '@smithy/is-array-buffer@2.2.0': resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} engines: {node: '>=14.0.0'} - '@smithy/is-array-buffer@4.0.0': - resolution: {integrity: sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==} - engines: {node: '>=18.0.0'} + '@smithy/is-array-buffer@3.0.0': + resolution: {integrity: sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==} + engines: {node: '>=16.0.0'} - '@smithy/middleware-content-length@4.0.1': - resolution: {integrity: sha512-OGXo7w5EkB5pPiac7KNzVtfCW2vKBTZNuCctn++TTSOMpe6RZO/n6WEC1AxJINn3+vWLKW49uad3lo/u0WJ9oQ==} - engines: {node: '>=18.0.0'} + '@smithy/middleware-content-length@3.0.13': + resolution: {integrity: sha512-zfMhzojhFpIX3P5ug7jxTjfUcIPcGjcQYzB9t+rv0g1TX7B0QdwONW+ATouaLoD7h7LOw/ZlXfkq4xJ/g2TrIw==} + engines: {node: '>=16.0.0'} - '@smithy/middleware-endpoint@4.0.3': - resolution: {integrity: sha512-YdbmWhQF5kIxZjWqPIgboVfi8i5XgiYMM7GGKFMTvBei4XjNQfNv8sukT50ITvgnWKKKpOtp0C0h7qixLgb77Q==} - engines: {node: '>=18.0.0'} + '@smithy/middleware-endpoint@3.2.7': + resolution: {integrity: sha512-GTxSKf280aJBANGN97MomUQhW1VNxZ6w7HAj/pvZM5MUHbMPOGnWOp1PRYKi4czMaHNj9bdiA+ZarmT3Wkdqiw==} + engines: {node: '>=16.0.0'} - '@smithy/middleware-retry@4.0.4': - resolution: {integrity: sha512-wmxyUBGHaYUqul0wZiset4M39SMtDBOtUr2KpDuftKNN74Do9Y36Go6Eqzj9tL0mIPpr31ulB5UUtxcsCeGXsQ==} - engines: {node: '>=18.0.0'} + '@smithy/middleware-retry@3.0.32': + resolution: {integrity: sha512-v8gVA9HqibuZkFuFpfkC/EcHE8no/3Mv3JvRUGly63Axt4yyas1WDVOasFSdiqm2hZVpY7/k8mRT1Wd5k7r3Yw==} + engines: {node: '>=16.0.0'} - '@smithy/middleware-serde@4.0.2': - resolution: {integrity: sha512-Sdr5lOagCn5tt+zKsaW+U2/iwr6bI9p08wOkCp6/eL6iMbgdtc2R5Ety66rf87PeohR0ExI84Txz9GYv5ou3iQ==} - engines: {node: '>=18.0.0'} + '@smithy/middleware-serde@3.0.11': + resolution: {integrity: sha512-KzPAeySp/fOoQA82TpnwItvX8BBURecpx6ZMu75EZDkAcnPtO6vf7q4aH5QHs/F1s3/snQaSFbbUMcFFZ086Mw==} + engines: {node: '>=16.0.0'} - '@smithy/middleware-stack@4.0.1': - resolution: {integrity: sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA==} - engines: {node: '>=18.0.0'} + '@smithy/middleware-stack@3.0.11': + resolution: {integrity: sha512-1HGo9a6/ikgOMrTrWL/WiN9N8GSVYpuRQO5kjstAq4CvV59bjqnh7TbdXGQ4vxLD3xlSjfBjq5t1SOELePsLnA==} + engines: {node: '>=16.0.0'} - '@smithy/node-config-provider@4.0.1': - resolution: {integrity: sha512-8mRTjvCtVET8+rxvmzRNRR0hH2JjV0DFOmwXPrISmTIJEfnCBugpYYGAsCj8t41qd+RB5gbheSQ/6aKZCQvFLQ==} - engines: {node: '>=18.0.0'} + '@smithy/node-config-provider@3.1.12': + resolution: {integrity: sha512-O9LVEu5J/u/FuNlZs+L7Ikn3lz7VB9hb0GtPT9MQeiBmtK8RSY3ULmsZgXhe6VAlgTw0YO+paQx4p8xdbs43vQ==} + engines: {node: '>=16.0.0'} - '@smithy/node-http-handler@4.0.2': - resolution: {integrity: sha512-X66H9aah9hisLLSnGuzRYba6vckuFtGE+a5DcHLliI/YlqKrGoxhisD5XbX44KyoeRzoNlGr94eTsMVHFAzPOw==} - engines: {node: '>=18.0.0'} + '@smithy/node-http-handler@3.3.3': + resolution: {integrity: sha512-BrpZOaZ4RCbcJ2igiSNG16S+kgAc65l/2hmxWdmhyoGWHTLlzQzr06PXavJp9OBlPEG/sHlqdxjWmjzV66+BSQ==} + engines: {node: '>=16.0.0'} - '@smithy/property-provider@4.0.1': - resolution: {integrity: sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ==} - engines: {node: '>=18.0.0'} + '@smithy/property-provider@3.1.11': + resolution: {integrity: sha512-I/+TMc4XTQ3QAjXfOcUWbSS073oOEAxgx4aZy8jHaf8JQnRkq2SZWw8+PfDtBvLUjcGMdxl+YwtzWe6i5uhL/A==} + engines: {node: '>=16.0.0'} - '@smithy/protocol-http@5.0.1': - resolution: {integrity: sha512-TE4cpj49jJNB/oHyh/cRVEgNZaoPaxd4vteJNB0yGidOCVR0jCw/hjPVsT8Q8FRmj8Bd3bFZt8Dh7xGCT+xMBQ==} - engines: {node: '>=18.0.0'} + '@smithy/protocol-http@4.1.8': + resolution: {integrity: sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw==} + engines: {node: '>=16.0.0'} - '@smithy/querystring-builder@4.0.1': - resolution: {integrity: sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg==} - engines: {node: '>=18.0.0'} + '@smithy/querystring-builder@3.0.11': + resolution: {integrity: sha512-u+5HV/9uJaeLj5XTb6+IEF/dokWWkEqJ0XiaRRogyREmKGUgZnNecLucADLdauWFKUNbQfulHFEZEdjwEBjXRg==} + engines: {node: '>=16.0.0'} - '@smithy/querystring-parser@4.0.1': - resolution: {integrity: sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw==} - engines: {node: '>=18.0.0'} + '@smithy/querystring-parser@3.0.11': + resolution: {integrity: sha512-Je3kFvCsFMnso1ilPwA7GtlbPaTixa3WwC+K21kmMZHsBEOZYQaqxcMqeFFoU7/slFjKDIpiiPydvdJm8Q/MCw==} + engines: {node: '>=16.0.0'} - '@smithy/service-error-classification@4.0.1': - resolution: {integrity: sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA==} - engines: {node: '>=18.0.0'} + '@smithy/service-error-classification@3.0.11': + resolution: {integrity: sha512-QnYDPkyewrJzCyaeI2Rmp7pDwbUETe+hU8ADkXmgNusO1bgHBH7ovXJiYmba8t0fNfJx75fE8dlM6SEmZxheog==} + engines: {node: '>=16.0.0'} - '@smithy/shared-ini-file-loader@4.0.1': - resolution: {integrity: sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw==} - engines: {node: '>=18.0.0'} + '@smithy/shared-ini-file-loader@3.1.12': + resolution: {integrity: sha512-1xKSGI+U9KKdbG2qDvIR9dGrw3CNx+baqJfyr0igKEpjbHL5stsqAesYBzHChYHlelWtb87VnLWlhvfCz13H8Q==} + engines: {node: '>=16.0.0'} - '@smithy/signature-v4@5.0.1': - resolution: {integrity: sha512-nCe6fQ+ppm1bQuw5iKoeJ0MJfz2os7Ic3GBjOkLOPtavbD1ONoyE3ygjBfz2ythFWm4YnRm6OxW+8p/m9uCoIA==} - engines: {node: '>=18.0.0'} + '@smithy/signature-v4@4.2.4': + resolution: {integrity: sha512-5JWeMQYg81TgU4cG+OexAWdvDTs5JDdbEZx+Qr1iPbvo91QFGzjy0IkXAKaXUHqmKUJgSHK0ZxnCkgZpzkeNTA==} + engines: {node: '>=16.0.0'} - '@smithy/smithy-client@4.1.3': - resolution: {integrity: sha512-A2Hz85pu8BJJaYFdX8yb1yocqigyqBzn+OVaVgm+Kwi/DkN8vhN2kbDVEfADo6jXf5hPKquMLGA3UINA64UZ7A==} - engines: {node: '>=18.0.0'} + '@smithy/smithy-client@3.5.2': + resolution: {integrity: sha512-h7xn+1wlpbXyLrtvo/teHR1SFGIIrQ3imzG0nz43zVLAJgvfC1Mtdwa1pFhoIOYrt/TiNjt4pD0gSYQEdZSBtg==} + engines: {node: '>=16.0.0'} - '@smithy/types@4.1.0': - resolution: {integrity: sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==} - engines: {node: '>=18.0.0'} + '@smithy/types@3.7.2': + resolution: {integrity: sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==} + engines: {node: '>=16.0.0'} - '@smithy/url-parser@4.0.1': - resolution: {integrity: sha512-gPXcIEUtw7VlK8f/QcruNXm7q+T5hhvGu9tl63LsJPZ27exB6dtNwvh2HIi0v7JcXJ5emBxB+CJxwaLEdJfA+g==} - engines: {node: '>=18.0.0'} + '@smithy/url-parser@3.0.11': + resolution: {integrity: sha512-TmlqXkSk8ZPhfc+SQutjmFr5FjC0av3GZP4B/10caK1SbRwe/v+Wzu/R6xEKxoNqL+8nY18s1byiy6HqPG37Aw==} - '@smithy/util-base64@4.0.0': - resolution: {integrity: sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==} - engines: {node: '>=18.0.0'} + '@smithy/util-base64@3.0.0': + resolution: {integrity: sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==} + engines: {node: '>=16.0.0'} - '@smithy/util-body-length-browser@4.0.0': - resolution: {integrity: sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==} - engines: {node: '>=18.0.0'} + '@smithy/util-body-length-browser@3.0.0': + resolution: {integrity: sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==} - '@smithy/util-body-length-node@4.0.0': - resolution: {integrity: sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==} - engines: {node: '>=18.0.0'} + '@smithy/util-body-length-node@3.0.0': + resolution: {integrity: sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==} + engines: {node: '>=16.0.0'} '@smithy/util-buffer-from@2.2.0': resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} engines: {node: '>=14.0.0'} - '@smithy/util-buffer-from@4.0.0': - resolution: {integrity: sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==} - engines: {node: '>=18.0.0'} + '@smithy/util-buffer-from@3.0.0': + resolution: {integrity: sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==} + engines: {node: '>=16.0.0'} - '@smithy/util-config-provider@4.0.0': - resolution: {integrity: sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==} - engines: {node: '>=18.0.0'} + '@smithy/util-config-provider@3.0.0': + resolution: {integrity: sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==} + engines: {node: '>=16.0.0'} - '@smithy/util-defaults-mode-browser@4.0.4': - resolution: {integrity: sha512-Ej1bV5sbrIfH++KnWxjjzFNq9nyP3RIUq2c9Iqq7SmMO/idUR24sqvKH2LUQFTSPy/K7G4sB2m8n7YYlEAfZaw==} - engines: {node: '>=18.0.0'} + '@smithy/util-defaults-mode-browser@3.0.32': + resolution: {integrity: sha512-FAGsnm/xJ19SZeoqGyo9CosqjUlm+XJTmygDMktebvDKw3bKiIiZ40O1MA6Z52KLmekYU2GO7BEK7u6e7ZORKw==} + engines: {node: '>= 10.0.0'} - '@smithy/util-defaults-mode-node@4.0.4': - resolution: {integrity: sha512-HE1I7gxa6yP7ZgXPCFfZSDmVmMtY7SHqzFF55gM/GPegzZKaQWZZ+nYn9C2Cc3JltCMyWe63VPR3tSFDEvuGjw==} - engines: {node: '>=18.0.0'} + '@smithy/util-defaults-mode-node@3.0.32': + resolution: {integrity: sha512-2CzKhkPFCVdd15f3+0D1rldNlvJME8pVRBtVVsea2hy7lcOn0bGB0dTVUwzgfM4LW/aU4IOg3jWf25ZWaxbOiw==} + engines: {node: '>= 10.0.0'} - '@smithy/util-endpoints@3.0.1': - resolution: {integrity: sha512-zVdUENQpdtn9jbpD9SCFK4+aSiavRb9BxEtw9ZGUR1TYo6bBHbIoi7VkrFQ0/RwZlzx0wRBaRmPclj8iAoJCLA==} - engines: {node: '>=18.0.0'} + '@smithy/util-endpoints@2.1.7': + resolution: {integrity: sha512-tSfcqKcN/Oo2STEYCABVuKgJ76nyyr6skGl9t15hs+YaiU06sgMkN7QYjo0BbVw+KT26zok3IzbdSOksQ4YzVw==} + engines: {node: '>=16.0.0'} - '@smithy/util-hex-encoding@4.0.0': - resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==} - engines: {node: '>=18.0.0'} + '@smithy/util-hex-encoding@3.0.0': + resolution: {integrity: sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==} + engines: {node: '>=16.0.0'} - '@smithy/util-middleware@4.0.1': - resolution: {integrity: sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA==} - engines: {node: '>=18.0.0'} + '@smithy/util-middleware@3.0.11': + resolution: {integrity: sha512-dWpyc1e1R6VoXrwLoLDd57U1z6CwNSdkM69Ie4+6uYh2GC7Vg51Qtan7ITzczuVpqezdDTKJGJB95fFvvjU/ow==} + engines: {node: '>=16.0.0'} - '@smithy/util-retry@4.0.1': - resolution: {integrity: sha512-WmRHqNVwn3kI3rKk1LsKcVgPBG6iLTBGC1iYOV3GQegwJ3E8yjzHytPt26VNzOWr1qu0xE03nK0Ug8S7T7oufw==} - engines: {node: '>=18.0.0'} + '@smithy/util-retry@3.0.11': + resolution: {integrity: sha512-hJUC6W7A3DQgaee3Hp9ZFcOxVDZzmBIRBPlUAk8/fSOEl7pE/aX7Dci0JycNOnm9Mfr0KV2XjIlUOcGWXQUdVQ==} + engines: {node: '>=16.0.0'} - '@smithy/util-stream@4.0.2': - resolution: {integrity: sha512-0eZ4G5fRzIoewtHtwaYyl8g2C+osYOT4KClXgfdNEDAgkbe2TYPqcnw4GAWabqkZCax2ihRGPe9LZnsPdIUIHA==} - engines: {node: '>=18.0.0'} + '@smithy/util-stream@3.3.3': + resolution: {integrity: sha512-bOm0YMMxRjbI3X6QkWwADPFkh2AH2xBMQIB1IQgCsCRqXXpSJatgjUR3oxHthpYwFkw3WPkOt8VgMpJxC0rFqg==} + engines: {node: '>=16.0.0'} - '@smithy/util-uri-escape@4.0.0': - resolution: {integrity: sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==} - engines: {node: '>=18.0.0'} + '@smithy/util-uri-escape@3.0.0': + resolution: {integrity: sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==} + engines: {node: '>=16.0.0'} '@smithy/util-utf8@2.3.0': resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} engines: {node: '>=14.0.0'} - '@smithy/util-utf8@4.0.0': - resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==} - engines: {node: '>=18.0.0'} + '@smithy/util-utf8@3.0.0': + resolution: {integrity: sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==} + engines: {node: '>=16.0.0'} - '@stylistic/eslint-plugin-ts@2.13.0': - resolution: {integrity: sha512-nooe1oTwz60T4wQhZ+5u0/GAu3ygkKF9vPPZeRn/meG71ntQ0EZXVOKEonluAYl/+CV2T+nN0dknHa4evAW13Q==} + '@stylistic/eslint-plugin-ts@2.11.0': + resolution: {integrity: sha512-ZBxnfSjzxUiwCibbVCeYCYwZw+P5xaQw+pNA8B8uR42fdMQIOhUstXjJuS2nTHoW5CF4+vGSxbL4gklI8WxhyA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.40.0' @@ -2789,14 +2987,18 @@ packages: '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - '@tanstack/react-virtual@3.13.0': - resolution: {integrity: sha512-CchF0NlLIowiM2GxtsoKBkXA4uqSnY2KvnXo+kyUFD4a4ll6+J0qzoRsUPMwXV/H26lRsxgJIr/YmjYum2oEjg==} + '@szmarczak/http-timer@4.0.6': + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} + + '@tanstack/react-virtual@3.13.2': + resolution: {integrity: sha512-LceSUgABBKF6HSsHK2ZqHzQ37IKV/jlaWbHm+NyTa3/WNb/JZVcThDuTainf+PixltOOcFCYXwxbLpOX9sCx+g==} 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 - '@tanstack/virtual-core@3.13.0': - resolution: {integrity: sha512-NBKJP3OIdmZY3COJdWkSonr50FMVIi+aj5ZJ7hI/DTpEKg2RMfo/KvP8A3B/zOSpMgIe52B5E2yn7rryULzA6g==} + '@tanstack/virtual-core@3.13.2': + resolution: {integrity: sha512-Qzz4EgzMbO5gKrmqUondCjiHcuu4B1ftHb0pjCut661lXZdGoHeze9f/M8iwsK1t5LGR6aNuNGU7mxkowaW6RQ==} '@testing-library/dom@10.4.0': resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} @@ -2821,6 +3023,10 @@ packages: '@types/react-dom': optional: true + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + '@types/acorn@4.0.6': resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} @@ -2839,6 +3045,9 @@ packages: '@types/babel__traverse@7.20.6': resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/cacheable-request@6.0.3': + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} @@ -2854,6 +3063,13 @@ packages: '@types/dom-speech-recognition@0.0.4': resolution: {integrity: sha512-zf2GwV/G6TdaLwpLDcGTIkHnXf8JEf/viMux+khqKQKDa8/8BAUtXXZS563GnvJ4Fg0PBLGAaFf2GekEVSZ6GQ==} + '@types/electron@1.6.12': + resolution: {integrity: sha512-NIJokDkGv9h+MStCL1IuiL1FOHYVkszoWeNxJtSI5dcEKRGbX83JcVYNAgk019qOQgJkHtz9WdP0CDXvrArrGg==} + deprecated: This is a stub types definition. electron provides its own type definitions, so you do not need this installed. + + '@types/eslint@8.56.10': + resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} + '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} @@ -2863,8 +3079,8 @@ packages: '@types/file-saver@2.0.7': resolution: {integrity: sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==} - '@types/gensync@1.0.4': - resolution: {integrity: sha512-C3YYeRQWp2fmq9OryX+FoDy8nXS6scQ7dPptD8LnFDAUNcKWJjXQKDNJD3HVm+kOUsXhTOkpi69vI4EuAr95bA==} + '@types/fs-extra@9.0.13': + resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} '@types/hast@2.3.10': resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} @@ -2875,12 +3091,18 @@ packages: '@types/hoist-non-react-statics@3.3.6': resolution: {integrity: sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==} + '@types/http-cache-semantics@4.0.4': + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + '@types/js-cookie@3.0.6': resolution: {integrity: sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==} '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/keyv@3.1.4': + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + '@types/mdast@3.0.15': resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} @@ -2890,20 +3112,26 @@ packages: '@types/mdx@2.0.13': resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} - '@types/mocha@9.1.1': - resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} + '@types/ms@0.7.34': + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/ms@2.1.0': - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/node-forge@1.3.11': + resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} - '@types/node@22.13.1': - resolution: {integrity: sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==} + '@types/node@20.17.16': + resolution: {integrity: sha512-vOTpLduLkZXePLxHiHsBLp98mHGnl8RptV4YAO3HfKO5UHjDvySGbxKtpYfy8Sx5+WKcgc45qNreJJRVM3L6mw==} + + '@types/node@22.10.1': + resolution: {integrity: sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==} '@types/path-browserify@1.0.3': resolution: {integrity: sha512-ZmHivEbNCBtAfcrFeBCiTjdIc2dey0l7oCGNGpSuRTy8jP6UVND7oUowlvDujBy8r2Hoa8bfFUOCiPWfmtkfxw==} - '@types/prop-types@15.7.14': - resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} + '@types/plist@3.0.5': + resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==} + + '@types/prop-types@15.7.13': + resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} '@types/raf@3.4.3': resolution: {integrity: sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==} @@ -2911,16 +3139,17 @@ packages: '@types/react-beautiful-dnd@13.1.8': resolution: {integrity: sha512-E3TyFsro9pQuK4r8S/OL6G99eq7p8v29sX0PM7oT8Z+PJfZvSQTx4zTQbUJ+QZXioAF0e7TGBEcA1XhYhCweyQ==} - '@types/react-dom@18.3.5': - resolution: {integrity: sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==} - peerDependencies: - '@types/react': ^18.0.0 + '@types/react-dom@18.3.1': + resolution: {integrity: sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==} '@types/react-redux@7.1.34': resolution: {integrity: sha512-GdFaVjEbYv4Fthm2ZLvj1VSCedV7TqE5y1kNwnjSdBOTXuRSgowux6J8TAct15T3CKBr63UMk+2CO7ilRhyrAQ==} - '@types/react@18.3.18': - resolution: {integrity: sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==} + '@types/react@18.3.12': + resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} + + '@types/responselike@1.0.3': + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} @@ -2931,65 +3160,86 @@ packages: '@types/uuid@9.0.8': resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - '@typescript-eslint/eslint-plugin@8.24.0': - resolution: {integrity: sha512-aFcXEJJCI4gUdXgoo/j9udUYIHgF23MFkg09LFz2dzEmU0+1Plk4rQWv/IYKvPHAtlkkGoB3m5e6oUp+JPsNaQ==} + '@types/verror@1.10.10': + resolution: {integrity: sha512-l4MM0Jppn18hb9xmM6wwD1uTdShpf9Pn80aXTStnK1C94gtPvJcV2FrDmbOQUAQfJ1cKZHktkQUDwEqaAKXMMg==} + + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + + '@typescript-eslint/eslint-plugin@8.17.0': + resolution: {integrity: sha512-HU1KAdW3Tt8zQkdvNoIijfWDMvdSweFYm4hWh+KwhPstv+sCmWb89hCIP8msFm9N1R/ooh9honpSuvqKWlYy3w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - '@typescript-eslint/parser@8.24.0': - resolution: {integrity: sha512-MFDaO9CYiard9j9VepMNa9MTcqVvSny2N4hkY6roquzj8pdCBRENhErrteaQuu7Yjn1ppk0v1/ZF9CG3KIlrTA==} + '@typescript-eslint/parser@8.17.0': + resolution: {integrity: sha512-Drp39TXuUlD49F7ilHHCG7TTg8IkA+hxCuULdmzWYICxGXvDXmDmWEjJYZQYgf6l/TFfYNE167m7isnc3xlIEg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - '@typescript-eslint/scope-manager@8.24.0': - resolution: {integrity: sha512-HZIX0UByphEtdVBKaQBgTDdn9z16l4aTUz8e8zPQnyxwHBtf5vtl1L+OhH+m1FGV9DrRmoDuYKqzVrvWDcDozw==} + '@typescript-eslint/scope-manager@8.17.0': + resolution: {integrity: sha512-/ewp4XjvnxaREtqsZjF4Mfn078RD/9GmiEAtTeLQ7yFdKnqwTOgRMSvFz4et9U5RiJQ15WTGXPLj89zGusvxBg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.24.0': - resolution: {integrity: sha512-8fitJudrnY8aq0F1wMiPM1UUgiXQRJ5i8tFjq9kGfRajU+dbPyOuHbl0qRopLEidy0MwqgTHDt6CnSeXanNIwA==} + '@typescript-eslint/type-utils@8.17.0': + resolution: {integrity: sha512-q38llWJYPd63rRnJ6wY/ZQqIzPrBCkPdpIsaCfkR3Q4t3p6sb422zougfad4TFW9+ElIFLVDzWGiGAfbb/v2qw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - '@typescript-eslint/types@8.24.0': - resolution: {integrity: sha512-VacJCBTyje7HGAw7xp11q439A+zeGG0p0/p2zsZwpnMzjPB5WteaWqt4g2iysgGFafrqvyLWqq6ZPZAOCoefCw==} + '@typescript-eslint/types@8.17.0': + resolution: {integrity: sha512-gY2TVzeve3z6crqh2Ic7Cr+CAv6pfb0Egee7J5UAVWCpVvDI/F71wNfolIim4FE6hT15EbpZFVUj9j5i38jYXA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.24.0': - resolution: {integrity: sha512-ITjYcP0+8kbsvT9bysygfIfb+hBj6koDsu37JZG7xrCiy3fPJyNmfVtaGsgTUSEuTzcvME5YI5uyL5LD1EV5ZQ==} + '@typescript-eslint/typescript-estree@8.17.0': + resolution: {integrity: sha512-JqkOopc1nRKZpX+opvKqnM3XUlM7LpFMD0lYxTqOTKQfCWAmxw45e3qlOCsEqEB2yuacujivudOFpCnqkBDNMw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.8.0' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - '@typescript-eslint/utils@8.24.0': - resolution: {integrity: sha512-07rLuUBElvvEb1ICnafYWr4hk8/U7X9RDCOqd9JcAMtjh/9oRmcfN4yGzbPVirgMR0+HLVHehmu19CWeh7fsmQ==} + '@typescript-eslint/utils@8.17.0': + resolution: {integrity: sha512-bQC8BnEkxqG8HBGKwG9wXlZqg37RKSMY7v/X8VEWD8JG2JuTHuNK0VFvMPMUKQcbk6B+tf05k+4AShAEtCtJ/w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - '@typescript-eslint/visitor-keys@8.24.0': - resolution: {integrity: sha512-kArLq83QxGLbuHrTMoOEWO+l2MwsNS2TGISEdx8xgqpkbytB07XmlQyQdNDrCc1ecSqx0cnmhGvpX+VBwqqSkg==} + '@typescript-eslint/visitor-keys@8.17.0': + resolution: {integrity: sha512-1Hm7THLpO6ww5QU6H/Qp+AusUUl+z/CAm3cNZZ0jQvon9yicgO7Rwd+/WWRpMKLYV6p2UvdbR27c86rzCPpreg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@uiw/codemirror-theme-vscode@4.23.8': - resolution: {integrity: sha512-Gxa98stfYFWGgy3OW4KUUuLI13TSBEp7fY/SSxf6nYzIfwPSBdWP24mizrVgEucsbMw99IvqCP9Uja62Sn2jSw==} + '@uiw/codemirror-theme-vscode@4.23.6': + resolution: {integrity: sha512-xUo1ic+Kk5hnv5gy+cXU12GZVSnDjic8s8weKq8loPHF1dSR1e6gkKVIKZRnvoOZ302taKRk7phWpBUaWIuKQg==} - '@uiw/codemirror-themes@4.23.8': - resolution: {integrity: sha512-PZmJBZxWMuZ48p/2D5aRPl8zTlBq1d/+NeRqyyH6P6k6yWDF6h71m0Dt+fjslgPE7KmWXux2hbejXXXoRLZO9Q==} + '@uiw/codemirror-themes@4.23.6': + resolution: {integrity: sha512-0dpuLQW+V6zrKvfvor/eo71V3tpr2L2Hsu8QZAdtSzksjWABxTOzH3ShaBRxCEsrz6sU9sa9o7ShwBMMDz59bQ==} peerDependencies: '@codemirror/language': '>=6.0.0' '@codemirror/state': '>=6.0.0' '@codemirror/view': '>=6.0.0' - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} '@unocss/astro@0.61.9': resolution: {integrity: sha512-adOXz4itYHxqhvQgJHlEU58EHDTtY2qrcEPVmQVk4qI1W+ezQV6nQMQvti8mS/HbFw3MOJhIY1MlJoZK36/cyw==} @@ -3077,11 +3327,11 @@ packages: peerDependencies: vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 - '@vanilla-extract/babel-plugin-debug-ids@1.2.0': - resolution: {integrity: sha512-z5nx2QBnOhvmlmBKeRX5sPVLz437wV30u+GJL+Hzj1rGiJYVNvgIIlzUpRNjVQ0MgAgiQIqIUbqPnmMc6HmDlQ==} + '@vanilla-extract/babel-plugin-debug-ids@1.1.0': + resolution: {integrity: sha512-Zy9bKjaL2P5zsrFYQJ8IjWGlFODmZrpvFmjFE0Zv8om55Pz1JtpJtL6DvlxlWUxbVaP1HKCqsmEfFOZN8fX/ZQ==} - '@vanilla-extract/css@1.17.1': - resolution: {integrity: sha512-tOHQXHm10FrJeXKFeWE09JfDGN/tvV6mbjwoNB9k03u930Vg021vTnbrCwVLkECj9Zvh/SHLBHJ4r2flGqfovw==} + '@vanilla-extract/css@1.16.1': + resolution: {integrity: sha512-3jKxH5ty/ZjmGoLAx8liY7e87FRCIJfnuufX/K9fQklu0YHP3ClrNisU++LkZuD+GZleqMSAQMF0r8Otln+OPQ==} '@vanilla-extract/integration@6.5.0': resolution: {integrity: sha512-E2YcfO8vA+vs+ua+gpvy1HRqvgWbI+MTlUpxA8FvatOvybuNcWAY0CKwQ/Gpj7rswYKtC6C7+xw33emM6/ImdQ==} @@ -3095,11 +3345,11 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 - '@vitest/expect@2.1.9': - resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==} + '@vitest/expect@2.1.8': + resolution: {integrity: sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==} - '@vitest/mocker@2.1.9': - resolution: {integrity: sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==} + '@vitest/mocker@2.1.8': + resolution: {integrity: sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA==} peerDependencies: msw: ^2.4.9 vite: ^5.0.0 @@ -3109,20 +3359,20 @@ packages: vite: optional: true - '@vitest/pretty-format@2.1.9': - resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} + '@vitest/pretty-format@2.1.8': + resolution: {integrity: sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==} - '@vitest/runner@2.1.9': - resolution: {integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==} + '@vitest/runner@2.1.8': + resolution: {integrity: sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg==} - '@vitest/snapshot@2.1.9': - resolution: {integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==} + '@vitest/snapshot@2.1.8': + resolution: {integrity: sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg==} - '@vitest/spy@2.1.9': - resolution: {integrity: sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==} + '@vitest/spy@2.1.8': + resolution: {integrity: sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg==} - '@vitest/utils@2.1.9': - resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} + '@vitest/utils@2.1.8': + resolution: {integrity: sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==} '@web3-storage/multipart-parser@1.0.0': resolution: {integrity: sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==} @@ -3130,6 +3380,10 @@ packages: '@webcontainer/api@1.3.0-internal.10': resolution: {integrity: sha512-iuqjuDX2uADiJMYZok7+tJqVCJYZ+tU2NwVtxlvakRWSSmIFBGrJ38pD0C5igaOnBV8C9kGDjCE6B03SvLtN4Q==} + '@xmldom/xmldom@0.8.10': + resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} + engines: {node: '>=10.0.0'} + '@xterm/addon-fit@0.10.0': resolution: {integrity: sha512-UFYkDm4HUahf2lnEyHvio51TNGiLK66mqP2JoATy7hRZeXaGMRDr00JiSF7m63vR5WKATF605yEggJKsw0JpMQ==} peerDependencies: @@ -3146,6 +3400,9 @@ packages: '@zxing/text-encoding@0.9.0': resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==} + abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -3159,10 +3416,6 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} - engines: {node: '>=0.4.0'} - acorn-walk@8.3.4: resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} @@ -3172,16 +3425,24 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + agent-base@7.1.3: resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} - ai@4.1.34: - resolution: {integrity: sha512-9IB5duz6VbXvjibqNrvKz6++PwE8Ui5UfbOC9/CtcQN5Z9sudUQErss+maj7ptoPysD2NPjj99e0Hp183Cz5LQ==} + ai@4.1.2: + resolution: {integrity: sha512-11efhPorWFphIpeCgjW6r/jk4wB5RWUGjxayHblBXCq6YEc7o5ki7vlmSnESprsDkMEfmONBWb/xM8pWjR5O2g==} engines: {node: '>=18'} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc @@ -3192,9 +3453,25 @@ packages: zod: optional: true + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -3219,6 +3496,36 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + app-builder-bin@5.0.0-alpha.10: + resolution: {integrity: sha512-Ev4jj3D7Bo+O0GPD2NMvJl+PGiBAfS7pUGawntBNpCbxtpncfUixqFj9z9Jme7V7s3LBGqsWZZP54fxBX3JKJw==} + + app-builder-lib@25.1.8: + resolution: {integrity: sha512-pCqe7dfsQFBABC1jeKZXQWhGcCPF3rPCXDdfqVKjIeWBcXzyC1iOWZdfFhGl+S9MyE/k//DFmC6FzuGAUudNDg==} + engines: {node: '>=14.0.0'} + peerDependencies: + dmg-builder: 25.1.8 + electron-builder-squirrel-windows: 25.1.8 + + aproba@2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + + archiver-utils@2.1.0: + resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} + engines: {node: '>= 6'} + + archiver-utils@3.0.4: + resolution: {integrity: sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==} + engines: {node: '>= 10'} + + archiver@5.3.2: + resolution: {integrity: sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==} + engines: {node: '>= 10'} + + are-we-there-yet@3.0.1: + resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. + arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -3245,6 +3552,10 @@ packages: asn1.js@4.10.1: resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==} + assert-plus@1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + assert@2.1.0: resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} @@ -3252,21 +3563,39 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + astring@1.9.0: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true + async-exit-hook@2.0.1: + resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} + engines: {node: '>=0.12.0'} + async-lock@1.4.1: resolution: {integrity: sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==} + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + atob@2.1.2: resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} engines: {node: '>= 4.5.0'} hasBin: true + atomically@2.0.3: + resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==} + available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -3284,6 +3613,10 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + basic-auth@2.0.1: + resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} + engines: {node: '>= 0.8'} + before-after-hook@3.0.2: resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==} @@ -3301,6 +3634,12 @@ packages: blake3-wasm@2.1.5: resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} + bluebird-lst@1.0.9: + resolution: {integrity: sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==} + + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + bn.js@4.12.1: resolution: {integrity: sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==} @@ -3311,6 +3650,10 @@ packages: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + boolean@3.2.0: + resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + bowser@2.11.0: resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} @@ -3353,8 +3696,8 @@ packages: browserify-zlib@0.2.0: resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} - browserslist@4.24.4: - resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -3366,6 +3709,9 @@ packages: buffer-builder@0.2.0: resolution: {integrity: sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==} + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -3375,11 +3721,18 @@ packages: buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + builder-util-runtime@9.2.10: + resolution: {integrity: sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw==} + engines: {node: '>=12.0.0'} + + builder-util@25.1.7: + resolution: {integrity: sha512-7jPjzBwEGRbwNcep0gGNpLXG9P94VA3CPAZQCzxkFXiV2GMQKlziMbY//rXPI7WKfhsvGgFXjTcXdBEwgXw9ww==} + builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} - bundle-require@5.1.0: - resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} + bundle-require@5.0.0: + resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: esbuild: '>=0.18' @@ -3392,33 +3745,40 @@ packages: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} + cacache@16.1.3: + resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + cacache@17.1.4: resolution: {integrity: sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - call-bind-apply-helpers@1.0.1: - resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} - engines: {node: '>= 0.4'} + cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} + cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} - call-bound@1.0.3: - resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001699: - resolution: {integrity: sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==} + caniuse-lite@1.0.30001685: + resolution: {integrity: sha512-e/kJN1EMyHQzgcMEEgoo+YTCO1NGCmIYHk5Qk8jT6AazWemS5QFKJ5ShCJlH3GZrNIdZofcNCEwZqbMjjKzmnA==} canvg@3.0.10: resolution: {integrity: sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==} engines: {node: '>=10.0.0'} + capnp-ts@0.7.0: + resolution: {integrity: sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==} + ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -3450,8 +3810,8 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - chart.js@4.4.7: - resolution: {integrity: sha512-pwkcKfdzTMAU/+jNosKhNL2bHtJc/sSmYgVbuGTEDhzkrhmyihmP7vUc/5ZK9WopidMDHNe3Wm7jOd/WhuHWuw==} + chart.js@4.4.8: + resolution: {integrity: sha512-IkGZlVpXP+83QpMm4uxEiGqSI7jFizwVtF3+n5Pc3k7sMO+tkd0qxh2OzLhenM0K80xtmAONWGBn082EiBQSDA==} engines: {pnpm: '>=8'} check-error@2.1.1: @@ -3462,6 +3822,10 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} + chokidar@4.0.1: + resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} + engines: {node: '>= 14.16.0'} + chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} @@ -3469,6 +3833,9 @@ packages: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} + chromium-pickle-js@0.2.0: + resolution: {integrity: sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==} + ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} @@ -3495,6 +3862,20 @@ packages: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} + cli-truncate@2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} @@ -3510,12 +3891,9 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - - color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} + color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} @@ -3530,23 +3908,58 @@ packages: comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@5.1.0: + resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} + engines: {node: '>= 6'} + common-tags@1.8.2: resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} engines: {node: '>=4.0.0'} + compare-version@0.1.2: + resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==} + engines: {node: '>=0.10.0'} + + compress-commons@4.1.2: + resolution: {integrity: sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==} + engines: {node: '>= 10'} + + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.8.0: + resolution: {integrity: sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==} + engines: {node: '>= 0.8.0'} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + concurrently@8.2.2: + resolution: {integrity: sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==} + engines: {node: ^14.13.0 || >=16.0.0} + hasBin: true + + conf@13.1.0: + resolution: {integrity: sha512-Bi6v586cy1CoTFViVO4lGTtx780lfF96fUmS1lSX6wpZf6330NvHUu6fReVuDP1de8Mg0nkZb01c8tAQdz1o3w==} + engines: {node: '>=18'} + confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - consola@3.4.0: - resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==} + config-file-ts@0.2.8-rc1: + resolution: {integrity: sha512-GtNECbVI82bT4RiDIzBSVuTKoSHufnU7Ce7/42bkWZJZFLjmDF2WBpVsvRkhKCfKBnTBb3qZrBwPpFBU/Myvhg==} + + consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} engines: {node: ^14.18.0 || >=16.10.0} console-browserify@1.2.0: resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} + console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + constants-browserify@1.0.0: resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} @@ -3568,10 +3981,6 @@ packages: resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} engines: {node: '>=6.6.0'} - cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} - engines: {node: '>= 0.6'} - cookie@0.6.0: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} @@ -3580,8 +3989,15 @@ packages: resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} engines: {node: '>= 0.6'} - core-js@3.40.0: - resolution: {integrity: sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ==} + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + core-js@3.41.0: + resolution: {integrity: sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==} + + core-util-is@1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -3591,6 +4007,13 @@ packages: engines: {node: '>=0.8'} hasBin: true + crc32-stream@4.0.3: + resolution: {integrity: sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==} + engines: {node: '>= 10'} + + crc@3.8.0: + resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==} + create-ecdh@4.0.4: resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} @@ -3606,6 +4029,11 @@ packages: crelt@1.0.6: resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} + cross-env@7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -3658,9 +4086,20 @@ packages: resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} engines: {node: '>=18'} + date-fns@2.30.0: + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} + engines: {node: '>=0.11'} + date-fns@3.6.0: resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} + date-fns@4.1.0: + resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + + debounce-fn@6.0.0: + resolution: {integrity: sha512-rBMW+F2TXryBwB54Q0d8drNEI+TfoS9JpNTAoVpukbWEhjXQq4rySFYLaqXMFXwdv61Zb2OHtj5bviSoimqxRQ==} + engines: {node: '>=18'} + debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -3669,6 +4108,15 @@ packages: supports-color: optional: true + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@4.4.0: resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} @@ -3713,6 +4161,10 @@ packages: defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -3728,6 +4180,9 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -3753,6 +4208,9 @@ packages: detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} @@ -3769,6 +4227,18 @@ packages: diffie-hellman@5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} + dir-compare@4.2.0: + resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} + + dmg-builder@25.1.8: + resolution: {integrity: sha512-NoXo6Liy2heSklTI5OIZbCgXC1RzrDQsZkeEwXhdOro3FT1VBOvbubvscdPnjVuQ4AMwwv61oaH96AbiYg9EnQ==} + + dmg-license@1.0.11: + resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==} + engines: {node: '>=8'} + os: [darwin] + hasBin: true + dnd-core@16.0.1: resolution: {integrity: sha512-HK294sl7tbw6F6IeuK16YSBUoorvHpY8RHO+9yFfaJyCDVb6n7PRcezrOEOa2SBCqiYpemh5Jx20ZcjKdFAVng==} @@ -3785,14 +4255,18 @@ packages: dompurify@2.5.8: resolution: {integrity: sha512-o1vSNgrmYMQObbSSvF/1brBYEQPHhV1+gsmrusO7/GXtp1T9rCS8cXFqVxK/9crT1jA6Ccv+5MTSjBNqr7Sovw==} + dot-prop@9.0.0: + resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} + engines: {node: '>=18'} + + dotenv-expand@11.0.7: + resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==} + engines: {node: '>=12'} + dotenv@16.4.7: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} @@ -3809,8 +4283,40 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.97: - resolution: {integrity: sha512-HKLtaH02augM7ZOdYRuO19rWDeY+QSJ1VxnXFa/XDFLf07HvM90pALIJFgrO+UVaajI3+aJMMpojoUTLZyQ7JQ==} + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-builder-squirrel-windows@25.1.8: + resolution: {integrity: sha512-2ntkJ+9+0GFP6nAISiMabKt6eqBB0kX1QqHNWFWAXgi0VULKGisM46luRFpIBiU3u/TDmhZMM8tzvo2Abn3ayg==} + + electron-builder@25.1.8: + resolution: {integrity: sha512-poRgAtUHHOnlzZnc9PK4nzG53xh74wj2Jy7jkTrqZ0MWPoHGh1M2+C//hGeYdA+4K8w4yiVCNYoLXF7ySj2Wig==} + engines: {node: '>=14.0.0'} + hasBin: true + + electron-log@5.3.0: + resolution: {integrity: sha512-ILgbh2k9IKbSaN8NAbQriVteEhmkdLo/e4J1dg+JIBTFzXS/kO8zNRZBh/4YPwIT/zeyxF1jP6Xz8GLsPE2IBQ==} + engines: {node: '>= 14'} + + electron-publish@25.1.7: + resolution: {integrity: sha512-+jbTkR9m39eDBMP4gfbqglDd6UvBC7RLh5Y0MhFSsc6UkGHj9Vj9TWobxevHYMMqmoujL11ZLjfPpMX+Pt6YEg==} + + electron-store@10.0.1: + resolution: {integrity: sha512-Ok0bF13WWdTzZi9rCtPN8wUfwx+yDMmV6PAnCMqjNRKEXHmklW/rV+6DofV/Vf5qoAh+Bl9Bj7dQ+0W+IL2psg==} + engines: {node: '>=20'} + + electron-to-chromium@1.5.68: + resolution: {integrity: sha512-FgMdJlma0OzUYlbrtZ4AeXjKxKPk6KT8WOP8BjcqxWtlg8qyJQjRzPJzUtUn5GBg1oQ26hFs7HOOHJMYiJRnvQ==} + + electron-updater@6.3.9: + resolution: {integrity: sha512-2PJNONi+iBidkoC5D1nzT9XqsE8Q1X28Fn6xRQhO3YX8qRRyJ3mkV4F1aQsuRnYPqq6Hw+E51y27W75WgDoofw==} + + electron@33.3.2: + resolution: {integrity: sha512-2pWr0frM9UrZGX1d7eoFdMROw10h2vXIWJmXdjwlKnSWWUm18GCrEOUeDUr+IMgz5EjO7JM7FQDHDMApeMgHyg==} + engines: {node: '>= 12.20.55'} + hasBin: true elliptic@6.6.1: resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} @@ -3832,6 +4338,9 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} @@ -3839,27 +4348,30 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + env-paths@3.0.0: + resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + err-code@2.0.3: resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@1.6.0: - resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} + es6-error@4.1.1: + resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} esbuild-plugins-node-modules-polyfill@1.6.8: resolution: {integrity: sha512-bRB4qbgUDWrdY1eMk123KiaCSW9VzQ+QLZrmU7D//cCFkmksPd9mUMpmWoFK/rxjIeTfTSOpKCoGoimlvI+AWw==} @@ -3925,14 +4437,14 @@ packages: '@eslint/json': optional: true - eslint-plugin-jsonc@2.19.1: - resolution: {integrity: sha512-MmlAOaZK1+Lg7YoCZPGRjb88ZjT+ct/KTsvcsbZdBm+w8WMzGx+XEmexk0m40P1WV9G2rFV7X3klyRGRpFXEjA==} + eslint-plugin-jsonc@2.18.2: + resolution: {integrity: sha512-SDhJiSsWt3nItl/UuIv+ti4g3m4gpGkmnUJS9UWR3TrpyNsIcnJoBRD7Kof6cM4Rk3L0wrmY5Tm3z7ZPjR2uGg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' - eslint-plugin-prettier@5.2.3: - resolution: {integrity: sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==} + eslint-plugin-prettier@5.2.1: + resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' @@ -3957,8 +4469,8 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.20.1: - resolution: {integrity: sha512-m1mM33o6dBUjxl2qb6wv6nGNwCAsns1eKtaQ4l/NPHeTvhiUPbtdfMyktxN4B3fgHIgsYh1VT3V9txblpQHq+g==} + eslint@9.16.0: + resolution: {integrity: sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -4064,15 +4576,24 @@ packages: resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} engines: {node: '>=12.0.0'} - express@4.21.2: - resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + exponential-backoff@3.1.1: + resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} + + express@4.21.1: + resolution: {integrity: sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==} engines: {node: '>= 0.10.0'} extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - fast-content-type-parse@2.0.1: - resolution: {integrity: sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==} + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + + extsprintf@1.4.1: + resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==} + engines: {'0': node >=0.6.0} fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -4080,8 +4601,8 @@ packages: fast-diff@1.3.0: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} fast-json-stable-stringify@2.1.0: @@ -4090,16 +4611,22 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + fast-xml-parser@4.4.1: resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} hasBin: true - fastq@1.19.0: - resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} fault@2.0.1: resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} @@ -4114,6 +4641,9 @@ packages: file-saver@2.0.5: resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -4133,16 +4663,15 @@ packages: flatted@3.3.2: resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} foreground-child@3.3.0: resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} - form-data@4.0.2: - resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} engines: {node: '>= 6'} format@0.2.2: @@ -4157,12 +4686,12 @@ packages: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} - framer-motion@11.18.2: - resolution: {integrity: sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==} + framer-motion@11.12.0: + resolution: {integrity: sha512-gZaZeqFM6pX9kMVti60hYAa75jGpSsGYWAHbBfIkuHN7DkVHVkxSxeNYnrGmHuM0zPkWTzQx10ZT+fDjn7N4SA==} peerDependencies: '@emotion/is-prop-valid': '*' - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 + react: ^18.0.0 + react-dom: ^18.0.0 peerDependenciesMeta: '@emotion/is-prop-valid': optional: true @@ -4182,6 +4711,18 @@ packages: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} + fs-extra@11.3.0: + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + engines: {node: '>=14.14'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + fs-minipass@2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} @@ -4190,6 +4731,9 @@ packages: resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -4198,6 +4742,11 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + gauge@4.0.4: + resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. + generic-names@4.0.0: resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} @@ -4205,8 +4754,12 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} - get-intrinsic@1.2.7: - resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} get-nonce@1.0.1: @@ -4217,19 +4770,19 @@ packages: resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} engines: {node: '>=8'} - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - get-source@2.0.12: resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-tsconfig@4.10.0: - resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} + get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} @@ -4246,6 +4799,23 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported + + glob@9.3.5: + resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} + engines: {node: '>=16 || 14 >=14.17'} + + global-agent@3.0.0: + resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} + engines: {node: '>=10.0'} + globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -4254,17 +4824,25 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@15.14.0: - resolution: {integrity: sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==} + globals@15.13.0: + resolution: {integrity: sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==} engines: {node: '>=18'} + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + gopd@1.1.0: + resolution: {integrity: sha512-FQoVQnqcdk4hVM4JN1eromaun4iuS34oStkdlLENLdpULsuQcTyXj8w7ayhuUfPwEYZ1ZOooOTT6fdA9Vmx/RA==} engines: {node: '>= 0.4'} + got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -4286,6 +4864,10 @@ packages: has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + has-proto@1.1.0: + resolution: {integrity: sha512-QLdzI9IIO1Jg7f9GT1gXpPpXArAn6cS31R1eEZqz08Gc+uQ8/XiqHWt17Fiw+2p6oTTIq5GXEpQkAlA88YRl/Q==} + engines: {node: '>= 0.4'} + has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -4294,6 +4876,9 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} + has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + hash-base@3.0.5: resolution: {integrity: sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==} engines: {node: '>= 0.10'} @@ -4320,8 +4905,8 @@ packages: hast-util-to-estree@2.3.3: resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==} - hast-util-to-html@9.0.4: - resolution: {integrity: sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA==} + hast-util-to-html@9.0.3: + resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==} hast-util-to-jsx-runtime@2.3.2: resolution: {integrity: sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==} @@ -4344,6 +4929,10 @@ packages: hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + hosted-git-info@6.1.3: resolution: {integrity: sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -4362,17 +4951,32 @@ packages: resolution: {integrity: sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==} engines: {node: '>=8.0.0'} + http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} + http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} + http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} + https-browserify@1.0.0: resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} @@ -4381,11 +4985,19 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + husky@9.1.7: resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} engines: {node: '>=18'} hasBin: true + iconv-corefoundation@1.1.7: + resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} + engines: {node: ^8.11.2 || >=10} + os: [darwin] + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -4417,8 +5029,8 @@ packages: immutable@5.0.3: resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} importx@0.4.4: @@ -4432,6 +5044,13 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + infer-owner@1.0.4: + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -4441,6 +5060,13 @@ packages: inline-style-parser@0.2.4: resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} + invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} @@ -4451,13 +5077,10 @@ packages: is-alphanumerical@2.0.1: resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} - is-arguments@1.2.0: - resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} - is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -4474,8 +5097,8 @@ packages: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} hasBin: true - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} engines: {node: '>= 0.4'} is-decimal@2.0.1: @@ -4492,8 +5115,8 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-generator-function@1.1.0: - resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} is-glob@4.0.3: @@ -4511,6 +5134,9 @@ packages: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} + is-lambda@1.0.1: + resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} + is-nan@1.3.2: resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} engines: {node: '>= 0.4'} @@ -4533,16 +5159,12 @@ packages: is-reference@3.0.3: resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} - is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} is-unicode-supported@0.1.0: @@ -4552,6 +5174,14 @@ packages: isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + isbinaryfile@4.0.10: + resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} + engines: {node: '>= 8.0.0'} + + isbinaryfile@5.0.4: + resolution: {integrity: sha512-YKBKVkKhty7s8rxddb40oOkuP0NbaeXrQvLin6QMHL7Ypiy2RW9LwOVrVgZRyOrhQlayMd9t+D8yDy8MKFTSDQ==} + engines: {node: '>= 18.0.0'} + isbot@4.4.0: resolution: {integrity: sha512-8ZvOWUA68kyJO4hHJdWjyreq7TYNWTS9y15IzeqVdKxR9pPr3P/3r9AHcoIv9M0Rllkao5qWz2v1lmcyKIVCzQ==} engines: {node: '>=18'} @@ -4559,8 +5189,8 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - isomorphic-git@1.29.0: - resolution: {integrity: sha512-zWGqk8901cicvVEhVpN76AwKrS/TzHak2NQCtNXIAavpMIy/yqh+d/JtC9A8AUKZAauUdOyEWKI29tuCLAL+Zg==} + isomorphic-git@1.27.2: + resolution: {integrity: sha512-nCiz+ieOkWb5kDJSSckDTiMjTcgkxqH2xuiQmw1Y6O/spwx4d6TKYSfGCd4f71HGvUYcRSUGqJEI+3uN6UQlOw==} engines: {node: '>=12'} hasBin: true @@ -4572,14 +5202,22 @@ packages: resolution: {integrity: sha512-5mbUj3SiZXCuRf9fT3ibzbSSEWiy63gFfksmGfdOzujPjW3k+z8WvIBxcJHBoQNlaZaiyB25deviif2+osLmLw==} engines: {node: '>=4'} + itty-time@1.0.6: + resolution: {integrity: sha512-+P8IZaLLBtFv8hCkIjcymZOp4UJ+xW6bSlQsXGqrkmJh7vSiMFSlNne0mCYagEE0N7HDNR5jJBRxwN0oYv61Rw==} + jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + javascript-stringify@2.1.0: resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==} - jiti@1.21.7: - resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true jiti@2.0.0-beta.3: @@ -4600,6 +5238,9 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + jsdom@26.0.0: resolution: {integrity: sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==} engines: {node: '>=18'} @@ -4624,12 +5265,21 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-schema-typed@8.0.1: + resolution: {integrity: sha512-XQmWYj2Sm4kn4WeTYvmpKEbyPsL7nBsb647c7pMe6l02/yx2+Jfc4dT6UZkEXnIUb5LhD55r2HPsJ1milQ4rDg==} + json-schema@0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -4644,6 +5294,9 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -4663,6 +5316,13 @@ packages: kolorist@1.8.0: resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + lazy-val@1.0.5: + resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==} + + lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -4670,8 +5330,8 @@ packages: lie@3.3.0: resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + lilconfig@3.1.2: + resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} engines: {node: '>=14'} load-tsconfig@0.2.5: @@ -4686,10 +5346,6 @@ packages: resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} engines: {node: '>=14'} - local-pkg@1.0.0: - resolution: {integrity: sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==} - engines: {node: '>=14'} - locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -4700,9 +5356,31 @@ packages: lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + lodash.defaults@4.2.0: + resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} + + lodash.difference@4.5.0: + resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==} + + lodash.escaperegexp@4.1.2: + resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} + + lodash.flatten@4.4.0: + resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} + + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.union@4.6.0: + resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} + lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -4717,8 +5395,12 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@3.1.3: - resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + loupe@3.1.2: + resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} + + lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -4726,6 +5408,10 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + lru-cache@7.18.3: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} @@ -4737,8 +5423,12 @@ packages: magic-string@0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magic-string@0.30.14: + resolution: {integrity: sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==} + + make-fetch-happen@10.2.1: + resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} markdown-extensions@1.1.1: resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} @@ -4747,9 +5437,9 @@ packages: markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} + matcher@3.0.0: + resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} + engines: {node: '>=10'} md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} @@ -4757,8 +5447,8 @@ packages: mdast-util-definitions@5.1.2: resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} - mdast-util-find-and-replace@3.0.2: - resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + mdast-util-find-and-replace@3.0.1: + resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} mdast-util-from-markdown@1.3.1: resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} @@ -4772,8 +5462,8 @@ packages: mdast-util-gfm-autolink-literal@2.0.1: resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} - mdast-util-gfm-footnote@2.1.0: - resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + mdast-util-gfm-footnote@2.0.0: + resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==} mdast-util-gfm-strikethrough@2.0.0: resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} @@ -4784,8 +5474,8 @@ packages: mdast-util-gfm-task-list-item@2.0.0: resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} - mdast-util-gfm@3.1.0: - resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + mdast-util-gfm@3.0.0: + resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==} mdast-util-mdx-expression@1.3.2: resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} @@ -4796,8 +5486,8 @@ packages: mdast-util-mdx-jsx@2.1.4: resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} - mdast-util-mdx-jsx@3.2.0: - resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + mdast-util-mdx-jsx@3.1.3: + resolution: {integrity: sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==} mdast-util-mdx@2.0.1: resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==} @@ -4877,8 +5567,8 @@ packages: micromark-extension-gfm-strikethrough@2.1.0: resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} - micromark-extension-gfm-table@2.1.1: - resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + micromark-extension-gfm-table@2.1.0: + resolution: {integrity: sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==} micromark-extension-gfm-tagfilter@2.0.0: resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} @@ -5009,8 +5699,8 @@ packages: micromark-util-subtokenize@1.1.0: resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} - micromark-util-subtokenize@2.0.4: - resolution: {integrity: sha512-N6hXjrin2GTJDe3MVjf5FuXpm12PGm80BrUAeub9XFXca8JZbP+oIwY4LJSVwFUCL1IPm/WwSVUN7goFHmSGGQ==} + micromark-util-subtokenize@2.0.3: + resolution: {integrity: sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg==} micromark-util-symbol@1.1.0: resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} @@ -5061,10 +5751,23 @@ packages: engines: {node: '>=10.0.0'} hasBin: true + mime@4.0.6: + resolution: {integrity: sha512-4rGt7rvQHBbaSOF9POGkk1ocRP16Md1x36Xma8sz8h8/vfCUI2OtEIeCqe4Ofes853x4xDoPiFLIT47J5fI/7A==} + engines: {node: '>=16'} + hasBin: true + mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + mimic-response@3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} @@ -5073,8 +5776,8 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - miniflare@3.20250204.0: - resolution: {integrity: sha512-f7tezEkOvVRVHIVul2EbTyKvWJCXpTDRAOxTxtD4N92+YI8PC2P8AvO4Z30vlN61r5Pje33fTBG8G1fEwSZIqQ==} + miniflare@3.20241106.1: + resolution: {integrity: sha512-dM3RBlJE8rUFxnqlPCaFCq0E7qQqEQvKbYX7W/APGCK+rLcyLmEBzC4GQR/niXdNM/oV6gdg9AA50ghnn2ALuw==} engines: {node: '>=16.13'} hasBin: true @@ -5084,9 +5787,21 @@ packages: minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@8.0.4: + resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} + engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -5101,6 +5816,10 @@ packages: resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} engines: {node: '>= 8'} + minipass-fetch@2.1.2: + resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + minipass-flush@1.0.5: resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} engines: {node: '>= 8'} @@ -5109,10 +5828,18 @@ packages: resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} engines: {node: '>=8'} + minipass-sized@1.0.3: + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} + minipass@3.3.6: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} + minipass@4.2.8: + resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} + engines: {node: '>=8'} + minipass@5.0.0: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} @@ -5133,17 +5860,15 @@ packages: engines: {node: '>=10'} hasBin: true - mlly@1.7.4: - resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + mlly@1.7.3: + resolution: {integrity: sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==} modern-ahocorasick@1.1.0: resolution: {integrity: sha512-sEKPVl2rM+MNVkGQt3ChdmD8YsigmXdn5NifZn6jiwn9LRJpWm8F3guhaqrJT/JOat6pwpbXEk6kv+b9DMIjsQ==} - motion-dom@11.18.1: - resolution: {integrity: sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==} - - motion-utils@11.18.1: - resolution: {integrity: sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==} + morgan@1.10.0: + resolution: {integrity: sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==} + engines: {node: '>= 0.8.0'} mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} @@ -5188,24 +5913,52 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + + node-abi@3.74.0: + resolution: {integrity: sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==} + engines: {node: '>=10'} + + node-addon-api@1.7.2: + resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==} + + node-api-version@0.2.0: + resolution: {integrity: sha512-fthTTsi8CxaBXMaBAD7ST2uylwvsnYxh2PfaScwpMhos6KlSFajXQPcM4ogNE1q2s3Lbz9GCGqeIHC+C6OZnKg==} + node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} - node-fetch-native@1.6.6: - resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==} + node-fetch-native@1.6.4: + resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} - node-stdlib-browser@1.3.1: - resolution: {integrity: sha512-X75ZN8DCLftGM5iKwoYLA3rjnrAEs97MkzvSd4q2746Tgpg8b8XWiBGiBG4ZpgcAqBgtgPHTiAc8ZMCvZuikDw==} + node-gyp@9.4.1: + resolution: {integrity: sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==} + engines: {node: ^12.13 || ^14.13 || >=16} + hasBin: true + + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + node-stdlib-browser@1.3.0: + resolution: {integrity: sha512-g/koYzOr9Fb1Jc+tHUHlFd5gODjGn48tHexUK8q6iqOVriEgSnd3/1T7myBYc+0KBVze/7F7n65ec9rW6OD7xw==} engines: {node: '>=10'} + nopt@6.0.0: + resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + hasBin: true + normalize-package-data@5.0.0: resolution: {integrity: sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -5214,6 +5967,10 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + npm-install-checks@6.3.0: resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -5234,15 +5991,20 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} - nwsapi@2.2.16: - resolution: {integrity: sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==} + npmlog@6.0.2: + resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. + + nwsapi@2.2.18: + resolution: {integrity: sha512-p1TRH/edngVEHVbwqWnxUViEmq5znDvyB+Sik5cmuLpGOIfDf/39zLiq3swPF8Vakqn+gvNiOQAZu8djYlQILA==} object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + object-inspect@1.13.3: + resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} engines: {node: '>= 0.4'} object-is@1.1.6: @@ -5253,8 +6015,8 @@ packages: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} ofetch@1.4.1: @@ -5272,10 +6034,18 @@ packages: zod: optional: true + on-finished@2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} + engines: {node: '>= 0.8'} + on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} + on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -5283,8 +6053,8 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} - oniguruma-to-es@2.3.0: - resolution: {integrity: sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==} + oniguruma-to-es@0.7.0: + resolution: {integrity: sha512-HRaRh09cE0gRS3+wi2zxekB+I5L8C/gN60S+vb11eADHUaB/q4u8wGGOX3GvwvitG8ixaeycZfeoyruKQzUgNg==} optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} @@ -5300,6 +6070,10 @@ packages: outdent@0.8.0: resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==} + p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -5315,8 +6089,8 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - package-manager-detector@0.2.9: - resolution: {integrity: sha512-+vYvA/Y31l8Zk8dwxHhL3JfTuHPm6tlxM2A3GeQyl7ovYnSp1+mzAxClxaOr0qO1TtPxbQxetI7v5XqKLJZk7Q==} + package-manager-detector@0.2.6: + resolution: {integrity: sha512-9vPH3qooBlYRJdmdYP00nvjZOulm40r5dhtal8st18ctf+6S1k7pi5yIHLvI4w5D70x0Y+xdVD9qITH0QO/A8A==} pako@0.2.9: resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} @@ -5332,8 +6106,8 @@ packages: resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==} engines: {node: '>= 0.10'} - parse-entities@4.0.2: - resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + parse-entities@4.0.1: + resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} parse-ms@2.1.0: resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} @@ -5356,6 +6130,10 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -5367,8 +6145,8 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-to-regexp@0.1.12: - resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + path-to-regexp@0.1.10: + resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} @@ -5376,9 +6154,6 @@ packages: pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - pathe@2.0.2: - resolution: {integrity: sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==} - pathval@2.0.0: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} @@ -5387,9 +6162,16 @@ packages: resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} engines: {node: '>=0.12'} + pe-library@0.4.1: + resolution: {integrity: sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==} + engines: {node: '>=12', npm: '>=6'} + peek-stream@1.1.3: resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} @@ -5423,16 +6205,20 @@ packages: resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} engines: {node: '>=10'} - pkg-types@1.3.1: - resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + pkg-types@1.2.1: + resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==} - pnpm@9.15.5: - resolution: {integrity: sha512-hFGWAmqrHMPwmKBHS2TfurKv56G06R3YaJXY5Koyp6bQMEni0K13C75N4COnEi+2jBodbg0DPHB2CF+dXUgA1A==} + plist@3.1.0: + resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} + engines: {node: '>=10.4.0'} + + pnpm@9.14.4: + resolution: {integrity: sha512-yBgLP75OS8oCyUI0cXiWtVKXQKbLrfGfp4JUJwQD6i8n1OHUagig9WyJtj3I6/0+5TMm2nICc3lOYgD88NGEqw==} engines: {node: '>=18.12'} hasBin: true - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} postcss-discard-duplicates@5.1.0: @@ -5459,8 +6245,8 @@ packages: peerDependencies: postcss: ^8.1.0 - postcss-modules-local-by-default@4.2.0: - resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==} + postcss-modules-local-by-default@4.1.0: + resolution: {integrity: sha512-rm0bdSv4jC3BDma3s9H19ZddW0aHX6EoqwDYU2IfZhRN+53QrufTRo2IdkAbRqLx4R2IYbZnbjKKxg4VN5oU9Q==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 @@ -5482,15 +6268,15 @@ packages: peerDependencies: postcss: ^8.0.0 - postcss-selector-parser@7.1.0: - resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} + postcss-selector-parser@7.0.0: + resolution: {integrity: sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==} engines: {node: '>=4'} postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.2: - resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -5506,8 +6292,8 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.5.0: - resolution: {integrity: sha512-quyMrVt6svPS7CjQ9gKb3GLEX/rl3BCL2oa/QkNcXv4YNVBC9olt3s+H7ukto06q7B1Qz46PbrKLO34PR6vXcA==} + prettier@3.4.1: + resolution: {integrity: sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg==} engines: {node: '>=14'} hasBin: true @@ -5533,6 +6319,10 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + promise-inflight@1.0.1: resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} peerDependencies: @@ -5578,8 +6368,8 @@ packages: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} - qs@6.14.0: - resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + qs@6.13.1: + resolution: {integrity: sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==} engines: {node: '>=0.6'} querystring-es3@0.2.1: @@ -5589,6 +6379,10 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + raf-schd@4.0.3: resolution: {integrity: sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==} @@ -5651,8 +6445,8 @@ packages: react: '>=16.8.1' react-dom: '>=16.8.1' - react-icons@5.4.0: - resolution: {integrity: sha512-7eltJxgVt7X64oHh6wSWNwwbKTCtMfK35hcjvJS0yxEAhPM8oUKdS3+kqaW1vicIltw+kR2unHaa12S9pPALoQ==} + react-icons@5.5.0: + resolution: {integrity: sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==} peerDependencies: react: '*' @@ -5662,8 +6456,8 @@ packages: react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - react-markdown@9.0.3: - resolution: {integrity: sha512-Yk7Z94dbgYTOrdk41Z74GoKA7rThnsbbqBTRYuxoe08qvfQ9tJVhmAKw6BJS/ZORG7kTy/s1QvYzSuaoBA1qfw==} + react-markdown@9.0.1: + resolution: {integrity: sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==} peerDependencies: '@types/react': '>=18' react: '>=18' @@ -5684,6 +6478,16 @@ packages: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} + react-remove-scroll-bar@2.3.6: + resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + react-remove-scroll-bar@2.3.8: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} @@ -5694,6 +6498,16 @@ packages: '@types/react': optional: true + react-remove-scroll@2.6.0: + resolution: {integrity: sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + react-remove-scroll@2.6.3: resolution: {integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==} engines: {node: '>=10'} @@ -5710,19 +6524,29 @@ packages: 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 - react-router-dom@6.29.0: - resolution: {integrity: sha512-pkEbJPATRJ2iotK+wUwHfy0xs2T59YPEN8BQxVCPeBZvK7kfPESRc/nyxzdcxR17hXgUPYx2whMwl+eo9cUdnQ==} + react-router-dom@6.30.0: + resolution: {integrity: sha512-x30B78HV5tFk8ex0ITwzC9TTZMua4jGyA9IUlH1JLQYQTFyxr/ZxwOJq7evg1JX1qGVUcvhsmQSKdPncQrjTgA==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' react-dom: '>=16.8' - react-router@6.29.0: - resolution: {integrity: sha512-DXZJoE0q+KyeVw75Ck6GkPxFak63C4fGqZGNijnWgzB/HzSP1ZfTlBj5COaGWwhrMQ/R8bXiq5Ooy4KG+ReyjQ==} + react-router@6.30.0: + resolution: {integrity: sha512-D3X8FyH9nBcTSHGdEKurK7r8OYE1kKFn3d/CF+CoxbSHkxU7o37+Uh7eAHRXr6k2tSExXYO++07PeXJtA/dEhQ==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' + react-style-singleton@2.2.1: + resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + react-style-singleton@2.2.3: resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} engines: {node: '>=10'} @@ -5743,6 +6567,10 @@ packages: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} + read-binary-file-arch@1.0.6: + resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==} + hasBin: true + readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -5750,10 +6578,17 @@ packages: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} + readdir-glob@1.1.3: + resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} + readdirp@4.0.2: + resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} + engines: {node: '>= 14.16.0'} + redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} @@ -5767,14 +6602,14 @@ packages: regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - regex-recursion@5.1.1: - resolution: {integrity: sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==} + regex-recursion@4.3.0: + resolution: {integrity: sha512-5LcLnizwjcQ2ALfOj95MjcatxyqF5RPySx9yT+PaXu3Gox2vyAtLDjHB8NTJLtMGkvyau6nI3CfpwFCjPUIs/A==} regex-utilities@2.3.0: resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} - regex@5.1.1: - resolution: {integrity: sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==} + regex@5.0.2: + resolution: {integrity: sha512-/pczGbKIQgfTMRV0XjABvc5RzLqQmwqxLHdQao2RTXPk+pmTXB2P0IaUHYdYyk412YLwUIkaeMd5T+RzVgTqnQ==} rehype-raw@7.0.0: resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} @@ -5785,8 +6620,8 @@ packages: remark-frontmatter@4.0.1: resolution: {integrity: sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==} - remark-gfm@4.0.1: - resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + remark-gfm@4.0.0: + resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==} remark-mdx-frontmatter@1.1.1: resolution: {integrity: sha512-7teX9DW4tI2WZkXS4DBxneYSY7NHiXl4AKdWDO9LXVweULlCT8OPWsOjLEnMIXViN1j+QcY8mfbq3k0EK6x3uA==} @@ -5851,9 +6686,24 @@ packages: zod: optional: true + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + require-like@0.1.2: resolution: {integrity: sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==} + resedit@1.7.2: + resolution: {integrity: sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==} + engines: {node: '>=12', npm: '>=6'} + + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -5865,11 +6715,13 @@ packages: resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} engines: {node: '>=10'} - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true + responselike@2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} @@ -5886,15 +6738,22 @@ packages: resolution: {integrity: sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==} engines: {node: '>= 0.8.15'} + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rimraf@4.4.1: + resolution: {integrity: sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==} + engines: {node: '>=14'} + hasBin: true + ripemd160@2.0.2: resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} - rollup-plugin-dts@5.3.1: - resolution: {integrity: sha512-gusMi+Z4gY/JaEQeXnB0RUdU82h1kF0WYzCWgVmV4p3hWXqelaKuCvcJawfeg+EKn2T1Ie+YWF2OiN1/L8bTVg==} - engines: {node: '>=v14.21.3'} - peerDependencies: - rollup: ^3.0 - typescript: ^4.1 || ^5.0 + roarr@2.15.4: + resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} + engines: {node: '>=8.0'} rollup-plugin-inject@3.0.2: resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==} @@ -5906,13 +6765,8 @@ packages: rollup-pluginutils@2.8.2: resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} - rollup@3.29.5: - resolution: {integrity: sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - - rollup@4.34.6: - resolution: {integrity: sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==} + rollup@4.28.0: + resolution: {integrity: sha512-G9GOrmgWHBma4YfCcX8PjH0qhXSdH8B4HDE2o4/jaxj93S4DPCIDoLcXz99eWMji4hB29UFCEd7B2gwGJDR9cQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -5935,138 +6789,140 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} - safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sass-embedded-android-arm64@1.83.4: - resolution: {integrity: sha512-tgX4FzmbVqnQmD67ZxQDvI+qFNABrboOQgwsG05E5bA/US42zGajW9AxpECJYiMXVOHmg+d81ICbjb0fsVHskw==} + sanitize-filename@1.6.3: + resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} + + sass-embedded-android-arm64@1.81.0: + resolution: {integrity: sha512-I36P77/PKAHx6sqOmexO2iEY5kpsmQ1VxcgITZSOxPMQhdB6m4t3bTabfDuWQQmCrqqiNFtLQHeytB65bUqwiw==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [android] - sass-embedded-android-arm@1.83.4: - resolution: {integrity: sha512-9Z4pJAOgEkXa3VDY/o+U6l5XvV0mZTJcSl0l/mSPHihjAHSpLYnOW6+KOWeM8dxqrsqTYcd6COzhanI/a++5Gw==} + sass-embedded-android-arm@1.81.0: + resolution: {integrity: sha512-NWEmIuaIEsGFNsIRa+5JpIpPJyZ32H15E85CNZqEIhhwWlk9UNw7vlOCmTH8MtabtnACwC/2NG8VyNa3nxKzUQ==} engines: {node: '>=14.0.0'} cpu: [arm] os: [android] - sass-embedded-android-ia32@1.83.4: - resolution: {integrity: sha512-RsFOziFqPcfZXdFRULC4Ayzy9aK6R6FwQ411broCjlOBX+b0gurjRadkue3cfUEUR5mmy0KeCbp7zVKPLTK+5Q==} + sass-embedded-android-ia32@1.81.0: + resolution: {integrity: sha512-k8V1usXw30w1GVxvrteG1RzgYJzYQ9PfL2aeOqGdroBN7zYTD9VGJXTGcxA4IeeRxmRd7szVW2mKXXS472fh8g==} engines: {node: '>=14.0.0'} cpu: [ia32] os: [android] - sass-embedded-android-riscv64@1.83.4: - resolution: {integrity: sha512-EHwh0nmQarBBrMRU928eTZkFGx19k/XW2YwbPR4gBVdWLkbTgCA5aGe8hTE6/1zStyx++3nDGvTZ78+b/VvvLg==} + sass-embedded-android-riscv64@1.81.0: + resolution: {integrity: sha512-RXlanyLXEpN/DEehXgLuKPsqT//GYlsGFxKXgRiCc8hIPAueFLQXKJmLWlL3BEtHgmFdbsStIu4aZCcb1hOFlQ==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [android] - sass-embedded-android-x64@1.83.4: - resolution: {integrity: sha512-0PgQNuPWYy1jEOEPDVsV89KfqOsMLIp9CSbjBY7jRcwRhyVAcigqrUG6bDeNtojHUYKA1kU+Eh/85WxOHUOgBw==} + sass-embedded-android-x64@1.81.0: + resolution: {integrity: sha512-RQG0FxGQ1DERNyUDED8+BDVaLIjI+BNg8lVcyqlLZUrWY6NhzjwYEeiN/DNZmMmHtqDucAPNDcsdVUNQqsBy2A==} engines: {node: '>=14.0.0'} cpu: [x64] os: [android] - sass-embedded-darwin-arm64@1.83.4: - resolution: {integrity: sha512-rp2ywymWc3nymnSnAFG5R/8hvxWCsuhK3wOnD10IDlmNB7o4rzKby1c+2ZfpQGowlYGWsWWTgz8FW2qzmZsQRw==} + sass-embedded-darwin-arm64@1.81.0: + resolution: {integrity: sha512-gLKbsfII9Ppua76N41ODFnKGutla9qv0OGAas8gxe0jYBeAQFi/1iKQYdNtQtKi4mA9n5TQTqz+HHCKszZCoyA==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [darwin] - sass-embedded-darwin-x64@1.83.4: - resolution: {integrity: sha512-kLkN2lXz9PCgGfDS8Ev5YVcl/V2173L6379en/CaFuJJi7WiyPgBymW7hOmfCt4uO4R1y7CP2Uc08DRtZsBlAA==} + sass-embedded-darwin-x64@1.81.0: + resolution: {integrity: sha512-7uMOlT9hD2KUJCbTN2XcfghDxt/rc50ujjfSjSHjX1SYj7mGplkINUXvVbbvvaV2wt6t9vkGkCo5qNbeBhfwBg==} engines: {node: '>=14.0.0'} cpu: [x64] os: [darwin] - sass-embedded-linux-arm64@1.83.4: - resolution: {integrity: sha512-E0zjsZX2HgESwyqw31EHtI39DKa7RgK7nvIhIRco1d0QEw227WnoR9pjH3M/ZQy4gQj3GKilOFHM5Krs/omeIA==} + sass-embedded-linux-arm64@1.81.0: + resolution: {integrity: sha512-jy4bvhdUmqbyw1jv1f3Uxl+MF8EU/Y/GDx4w6XPJm4Ds+mwH/TwnyAwsxxoBhWfnBnW8q2ADy039DlS5p+9csQ==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] - sass-embedded-linux-arm@1.83.4: - resolution: {integrity: sha512-nL90ryxX2lNmFucr9jYUyHHx21AoAgdCL1O5Ltx2rKg2xTdytAGHYo2MT5S0LIeKLa/yKP/hjuSvrbICYNDvtA==} + sass-embedded-linux-arm@1.81.0: + resolution: {integrity: sha512-REqR9qM4RchCE3cKqzRy9Q4zigIV82SbSpCi/O4O3oK3pg2I1z7vkb3TiJsivusG/li7aqKZGmYOtAXjruGQDA==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] - sass-embedded-linux-ia32@1.83.4: - resolution: {integrity: sha512-ew5HpchSzgAYbQoriRh8QhlWn5Kw2nQ2jHoV9YLwGKe3fwwOWA0KDedssvDv7FWnY/FCqXyymhLd6Bxae4Xquw==} + sass-embedded-linux-ia32@1.81.0: + resolution: {integrity: sha512-ga/Jk4q5Bn1aC+iHJteDZuLSKnmBUiS3dEg1fnl/Z7GaHIChceKDJOw0zNaILRXI0qT2E1at9MwzoRaRA5Nn/g==} engines: {node: '>=14.0.0'} cpu: [ia32] os: [linux] - sass-embedded-linux-musl-arm64@1.83.4: - resolution: {integrity: sha512-IzMgalf6MZOxgp4AVCgsaWAFDP/IVWOrgVXxkyhw29fyAEoSWBJH4k87wyPhEtxSuzVHLxKNbc8k3UzdWmlBFg==} + sass-embedded-linux-musl-arm64@1.81.0: + resolution: {integrity: sha512-hpntWf5kjkoxncA1Vh8vhsUOquZ8AROZKx0rQh7ZjSRs4JrYZASz1cfevPKaEM3wIim/nYa6TJqm0VqWsrERlA==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] - sass-embedded-linux-musl-arm@1.83.4: - resolution: {integrity: sha512-0RrJRwMrmm+gG0VOB5b5Cjs7Sd+lhqpQJa6EJNEaZHljJokEfpE5GejZsGMRMIQLxEvVphZnnxl6sonCGFE/QQ==} + sass-embedded-linux-musl-arm@1.81.0: + resolution: {integrity: sha512-oWVUvQ4d5Kx1Md75YXZl5z1WBjc+uOhfRRqzkJ3nWc8tjszxJN+y/5EOJavhsNI3/2yoTt6eMXRTqDD9b0tWSQ==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] - sass-embedded-linux-musl-ia32@1.83.4: - resolution: {integrity: sha512-LLb4lYbcxPzX4UaJymYXC+WwokxUlfTJEFUv5VF0OTuSsHAGNRs/rslPtzVBTvMeG9TtlOQDhku1F7G6iaDotA==} + sass-embedded-linux-musl-ia32@1.81.0: + resolution: {integrity: sha512-UEXUYkBuqTSwg5JNWiNlfMZ1Jx6SJkaEdx+fsL3Tk099L8cKSoJWH2EPz4ZJjNbyIMymrSdVfymheTeZ8u24xA==} engines: {node: '>=14.0.0'} cpu: [ia32] os: [linux] - sass-embedded-linux-musl-riscv64@1.83.4: - resolution: {integrity: sha512-zoKlPzD5Z13HKin1UGR74QkEy+kZEk2AkGX5RelRG494mi+IWwRuWCppXIovor9+BQb9eDWPYPoMVahwN5F7VA==} + sass-embedded-linux-musl-riscv64@1.81.0: + resolution: {integrity: sha512-1D7OznytbIhx2XDHWi1nuQ8d/uCVR7FGGzELgaU//T8A9DapVTUgPKvB70AF1k4GzChR9IXU/WvFZs2hDTbaJg==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] - sass-embedded-linux-musl-x64@1.83.4: - resolution: {integrity: sha512-hB8+/PYhfEf2zTIcidO5Bpof9trK6WJjZ4T8g2MrxQh8REVtdPcgIkoxczRynqybf9+fbqbUwzXtiUao2GV+vQ==} + sass-embedded-linux-musl-x64@1.81.0: + resolution: {integrity: sha512-ia6VCTeVDQtBSMktXRFza1AZCt8/6aUoujot6Ugf4KmdytQqPJIHxkHaGftm5xwi9WdrMGYS7zgolToPijR11A==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] - sass-embedded-linux-riscv64@1.83.4: - resolution: {integrity: sha512-83fL4n+oeDJ0Y4KjASmZ9jHS1Vl9ESVQYHMhJE0i4xDi/P3BNarm2rsKljq/QtrwGpbqwn8ujzOu7DsNCMDSHA==} + sass-embedded-linux-riscv64@1.81.0: + resolution: {integrity: sha512-KbxSsqu4tT1XbhZfJV/5NfW0VtJIGlD58RjqJqJBi8Rnjrx29/upBsuwoDWtsPV/LhoGwwU1XkSa9Q1ifCz4fQ==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] - sass-embedded-linux-x64@1.83.4: - resolution: {integrity: sha512-NlnGdvCmTD5PK+LKXlK3sAuxOgbRIEoZfnHvxd157imCm/s2SYF/R28D0DAAjEViyI8DovIWghgbcqwuertXsA==} + sass-embedded-linux-x64@1.81.0: + resolution: {integrity: sha512-AMDeVY2T9WAnSFkuQcsOn5c29GRs/TuqnCiblKeXfxCSKym5uKdBl/N7GnTV6OjzoxiJBbkYKdVIaS5By7Gj4g==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] - sass-embedded-win32-arm64@1.83.4: - resolution: {integrity: sha512-J2BFKrEaeSrVazU2qTjyQdAk+MvbzJeTuCET0uAJEXSKtvQ3AzxvzndS7LqkDPbF32eXAHLw8GVpwcBwKbB3Uw==} + sass-embedded-win32-arm64@1.81.0: + resolution: {integrity: sha512-YOmBRYnygwWUmCoH14QbMRHjcvCJufeJBAp0m61tOJXIQh64ziwV4mjdqjS/Rx3zhTT4T+nulDUw4d3kLiMncA==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [win32] - sass-embedded-win32-ia32@1.83.4: - resolution: {integrity: sha512-uPAe9T/5sANFhJS5dcfAOhOJy8/l2TRYG4r+UO3Wp4yhqbN7bggPvY9c7zMYS0OC8tU/bCvfYUDFHYMCl91FgA==} + sass-embedded-win32-ia32@1.81.0: + resolution: {integrity: sha512-HFfr/C+uLJGGTENdnssuNTmXI/xnIasUuEHEKqI+2J0FHCWT5cpz3PGAOHymPyJcZVYGUG/7gIxIx/d7t0LFYw==} engines: {node: '>=14.0.0'} cpu: [ia32] os: [win32] - sass-embedded-win32-x64@1.83.4: - resolution: {integrity: sha512-C9fkDY0jKITdJFij4UbfPFswxoXN9O/Dr79v17fJnstVwtUojzVJWKHUXvF0Zg2LIR7TCc4ju3adejKFxj7ueA==} + sass-embedded-win32-x64@1.81.0: + resolution: {integrity: sha512-wxj52jDcIAwWcXb7ShZ7vQYKcVUkJ+04YM9l46jDY+qwHzliGuorAUyujLyKTE9heGD3gShJ3wPPC1lXzq6v9A==} engines: {node: '>=14.0.0'} cpu: [x64] os: [win32] - sass-embedded@1.83.4: - resolution: {integrity: sha512-Hf2burRA/y5PGxsg6jB9UpoK/xZ6g/pgrkOcdl6j+rRg1Zj8XhGKZ1MTysZGtTPUUmiiErqzkP5+Kzp95yv9GQ==} + sass-embedded@1.81.0: + resolution: {integrity: sha512-uZQ2Faxb1oWBHpeSSzjxnhClbMb3QadN0ql0ZFNuqWOLUxwaVhrMlMhPq6TDPbbfDUjihuwrMCuy695Bgna5RA==} engines: {node: '>=16.0.0'} hasBin: true + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} @@ -6077,12 +6933,19 @@ packages: secure-json-parse@2.7.0: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + selfsigned@2.4.1: + resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} + engines: {node: '>=10'} + + semver-compare@1.0.0: + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true @@ -6090,10 +6953,17 @@ packages: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} + serialize-error@7.0.1: + resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} + engines: {node: '>=10'} + serve-static@1.16.2: resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + set-cookie-parser@2.7.1: resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} @@ -6111,10 +6981,6 @@ packages: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} hasBin: true - sharp@0.33.5: - resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -6123,23 +6989,15 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shiki@1.29.2: - resolution: {integrity: sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==} - - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + shell-quote@1.8.2: + resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} engines: {node: '>= 0.4'} - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} + shiki@1.24.0: + resolution: {integrity: sha512-qIneep7QRwxRd5oiHb8jaRzH15V/S8F3saCXOdjwRLgozZJr5x2yeBhQtqkO3FSzQDwYEFAYuifg4oHjpDghrg==} - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} siginfo@2.0.0: @@ -6158,13 +7016,30 @@ packages: simple-get@4.0.1: resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} - simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + simple-update-notifier@2.0.0: + resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} + engines: {node: '>=10'} sirv@2.0.4: resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} engines: {node: '>= 10'} + slice-ansi@3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + socks-proxy-agent@7.0.0: + resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} + engines: {node: '>= 10'} + + socks@2.8.3: + resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -6187,6 +7062,9 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + spawn-command@0.0.2: + resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==} + spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -6196,13 +7074,20 @@ packages: spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - spdx-license-ids@3.0.21: - resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} + spdx-license-ids@3.0.20: + resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} + + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} ssri@10.0.6: resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + ssri@9.0.1: + resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -6213,6 +7098,10 @@ packages: stacktracey@2.1.8: resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} + stat-mode@1.0.0: + resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==} + engines: {node: '>= 6'} + statuses@2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} @@ -6283,6 +7172,9 @@ packages: strnum@1.0.5: resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + stubborn-fs@1.2.5: + resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} + style-mod@4.1.2: resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} @@ -6292,6 +7184,10 @@ packages: style-to-object@1.0.8: resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} + sumchecker@3.0.1: + resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} + engines: {node: '>= 8.0'} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -6308,10 +7204,10 @@ packages: resolution: {integrity: sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==} engines: {node: '>=12.0.0'} - swr@2.3.2: - resolution: {integrity: sha512-RosxFpiabojs75IwQ316DGoDRmOqtiAj0tg8wCcbEu4CiLZBs/a9QNtHV7TUfDXmmlgqij/NqzKq/eLelyv9xA==} + swr@2.2.5: + resolution: {integrity: sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==} peerDependencies: - react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^16.11.0 || ^17.0.0 || ^18.0.0 symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} @@ -6338,8 +7234,8 @@ packages: tailwind-merge@2.6.0: resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} - tar-fs@2.1.2: - resolution: {integrity: sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==} + tar-fs@2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} @@ -6349,6 +7245,9 @@ packages: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} + temp-file@3.4.0: + resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==} + text-segmentation@1.0.3: resolution: {integrity: sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==} @@ -6370,11 +7269,14 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + tiny-typed-emitter@2.1.0: + resolution: {integrity: sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyexec@0.3.1: + resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} tinypool@1.0.2: resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} @@ -6388,13 +7290,20 @@ packages: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} - tldts-core@6.1.78: - resolution: {integrity: sha512-jS0svNsB99jR6AJBmfmEWuKIgz91Haya91Z43PATaeHJ24BkMoNRb/jlaD37VYjb0mYf6gRL/HOnvS1zEnYBiw==} + tldts-core@6.1.83: + resolution: {integrity: sha512-I2wb9OJc6rXyh9d4aInhSNWChNI+ra6qDnFEGEwe9OoA68lE4Temw29bOkf1Uvwt8VZS079t1BFZdXVBmmB4dw==} - tldts@6.1.78: - resolution: {integrity: sha512-fSgYrW0ITH0SR/CqKMXIruYIPpNu5aDgUp22UhYoSrnUQwc7SBqifEBFNce7AAcygUPBo6a/gbtcguWdmko4RQ==} + tldts@6.1.83: + resolution: {integrity: sha512-FHxxNJJ0WNsEBPHyC1oesQb3rRoxpuho/z2g3zIIAhw1WHJeQsUzK1jYK8TI1/iClaa4fS3Z2TCA9mtxXsENSg==} hasBin: true + tmp-promise@3.0.3: + resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} + + tmp@0.2.3: + resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} + engines: {node: '>=14.14'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -6410,28 +7319,35 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} - tough-cookie@5.1.1: - resolution: {integrity: sha512-Ek7HndSVkp10hmHP9V4qZO1u+pn1RU5sI0Fw+jCU3lyvuMZcgqsNgc6CmJJZyByK4Vm/qotGRJlfgAX8q+4JiA==} + tough-cookie@5.1.2: + resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} engines: {node: '>=16'} tr46@5.0.0: resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} engines: {node: '>=18'} + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - ts-api-utils@2.0.1: - resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' + truncate-utf8-bytes@1.0.2: + resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} - tsconfck@3.1.5: - resolution: {integrity: sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==} + ts-api-utils@1.4.3: + resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + tsconfck@3.1.4: + resolution: {integrity: sha512-kdqWFGVJqe+KGYvlSO9NIaWn9jT1Ny4oKVzAJsKii5eoE9snzTJzL4+MMVOMn+fikWGFmKEylcXL710V/kIPJQ==} engines: {node: ^18 || >=20} hasBin: true peerDependencies: @@ -6462,45 +7378,59 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-fest@4.34.1: - resolution: {integrity: sha512-6kSc32kT0rbwxD6QL1CYe8IqdzN/J/ILMrNK+HMQCKH3insCDRY/3ITb0vcBss0a3t72fzh2YSzj8ko1HgwT3g==} + type-fest@0.13.1: + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + engines: {node: '>=10'} + + type-fest@4.30.0: + resolution: {integrity: sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==} engines: {node: '>=16'} type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} - typescript-eslint@8.24.0: - resolution: {integrity: sha512-/lmv4366en/qbB32Vz5+kCNZEMf6xYHwh1z48suBwZvAtnXKbP+YhGe8OLE2BqC67LMqKkCNLtjejdwsdW6uOQ==} + typescript-eslint@8.17.0: + resolution: {integrity: sha512-409VXvFd/f1br1DCbuKNFqQpXICoTB+V51afcwG1pn1a3Cp92MqAUges3YjwEdQ0cMUoCIodjVDAYzyD8h3SYA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - typescript@5.7.3: - resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + typescript@5.7.2: + resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} engines: {node: '>=14.17'} hasBin: true ufo@1.5.4: resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + uint8array-extras@1.4.0: + resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==} + engines: {node: '>=18'} + unconfig@0.5.5: resolution: {integrity: sha512-VQZ5PT9HDX+qag0XdgQi8tJepPhXiR/yVOkn707gJDKo31lGjRilPREiQJ9Z6zd/Ugpv6ZvO5VxVIcatldYcNQ==} + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} - undici@5.28.5: - resolution: {integrity: sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==} + undici@5.28.4: + resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} engines: {node: '>=14.0'} - undici@6.21.1: - resolution: {integrity: sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==} + undici@6.21.0: + resolution: {integrity: sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==} engines: {node: '>=18.17'} - unenv@2.0.0-rc.1: - resolution: {integrity: sha512-PU5fb40H8X149s117aB4ytbORcCvlASdtF97tfls4BPIyj4PeVxvpSuy1jAptqYHqB0vb2w2sHvzM0XWcp2OKg==} + unenv-nightly@2.0.0-20241121-161142-806b5c0: + resolution: {integrity: sha512-RnFOasE/O0Q55gBkNB1b84OgKttgLEijGO0JCWpbn+O4XxpyCQg89NmcqQ5RGUiy4y+rMIrKzePTquQcLQF5pQ==} unified@10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} @@ -6508,10 +7438,18 @@ packages: unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + unique-filename@2.0.1: + resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + unique-filename@3.0.0: resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + unique-slug@3.0.0: + resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + unique-slug@4.0.0: resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -6558,6 +7496,10 @@ packages: universal-user-agent@7.0.2: resolution: {integrity: sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==} + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -6578,8 +7520,8 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - update-browserslist-db@1.1.2: - resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -6591,6 +7533,16 @@ packages: resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} engines: {node: '>= 0.4'} + use-callback-ref@1.3.2: + resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + use-callback-ref@1.3.3: resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} @@ -6606,6 +7558,16 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 + use-sidecar@1.1.2: + resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + use-sidecar@1.1.3: resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} engines: {node: '>=10'} @@ -6616,10 +7578,13 @@ packages: '@types/react': optional: true - use-sync-external-store@1.4.0: - resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} + use-sync-external-store@1.2.2: + resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + + utf8-byte-length@1.0.5: + resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==} util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -6665,6 +7630,10 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + verror@1.10.1: + resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} + engines: {node: '>=0.6.0'} + version-range@4.14.0: resolution: {integrity: sha512-gjb0ARm9qlcBAonU4zPwkl9ecKkas+tC2CGwFfptTCWWIVTWY1YUbT2zZKsOAF1jR/tNxxyLwwG0cb42XlYcTg==} engines: {node: '>=4'} @@ -6684,25 +7653,34 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite-node@1.6.1: - resolution: {integrity: sha512-YAXkfvGtuTzwWbDSACdJSg4A4DZiAqckWe90Zapc/sEX3XvHcw1NdurM/6od8J207tSDqNbSsgdCacBgvJKFuA==} + vite-node@1.6.0: + resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true - vite-node@2.1.9: - resolution: {integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==} + vite-node@2.1.8: + resolution: {integrity: sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true + vite-node@3.0.0-beta.2: + resolution: {integrity: sha512-ofTf6cfRdL30Wbl9n/BX81EyIR5s4PReLmSurrxQ+koLaWUNOEo8E0lCM53OJkb8vpa2URM2nSrxZsIFyvY1rg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite-plugin-copy@0.1.6: + resolution: {integrity: sha512-bqIaefZOE2Jx8P5wJuHKL5GzCERa/pcwdUQWaocyTNXgalN2xkxXH7LmqRJ34V2OlKF2F9E/zj0zITS7U6PpUg==} + engines: {node: '>=14.8.0'} + vite-plugin-node-polyfills@0.22.0: resolution: {integrity: sha512-F+G3LjiGbG8QpbH9bZ//GSBr9i1InSTkaulfUHFa9jkLqVGORFBoqc2A/Yu5Mmh1kNAbiAeKeK+6aaQUf3x0JA==} peerDependencies: vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 - vite-plugin-optimize-css-modules@1.2.0: - resolution: {integrity: sha512-5kOEVyif9qSoLAQDmN6nXW2fgz66oLXGlapKwY7u8nPVaVoyabkioQqf90s0gFvssCAY2bwBndx5sK7LF+i2rA==} + vite-plugin-optimize-css-modules@1.1.0: + resolution: {integrity: sha512-6vtG+GwqBoT0yz90LAKKPf0HkiKkX7oCUzdw0Y0Jjv2S4pKyifq2IKTgCEJu5cLYhPku1mrPIjNVvQRmP0RgLQ==} peerDependencies: - vite: ^6.0.0 || ^5.0.0 || ^4.0.0 || ^3.0.0 || ^2.0.0 + vite: ^5.0.0 || ^4.0.0 || ^3.0.0 || ^2.0.0 vite-tsconfig-paths@4.3.2: resolution: {integrity: sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==} @@ -6712,8 +7690,8 @@ packages: vite: optional: true - vite@5.4.14: - resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==} + vite@5.4.11: + resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -6743,15 +7721,15 @@ packages: terser: optional: true - vitest@2.1.9: - resolution: {integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==} + vitest@2.1.8: + resolution: {integrity: sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 2.1.9 - '@vitest/ui': 2.1.9 + '@vitest/browser': 2.1.8 + '@vitest/ui': 2.1.8 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -6807,8 +7785,11 @@ packages: resolution: {integrity: sha512-mDGf9diDad/giZ/Sm9Xi2YcyzaFpbdLpJPr+E9fSkyQ7KpQD4SdFcugkRQYzhmfI4KeV4Qpnn2sKPdo+kmsgRQ==} engines: {node: '>=18'} - which-typed-array@1.1.18: - resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} + when-exit@2.1.4: + resolution: {integrity: sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==} + + which-typed-array@1.1.16: + resolution: {integrity: sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==} engines: {node: '>= 0.4'} which@2.0.2: @@ -6826,21 +7807,24 @@ packages: engines: {node: '>=8'} hasBin: true + wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - workerd@1.20250204.0: - resolution: {integrity: sha512-zcKufjVFsQMiD3/acg1Ix00HIMCkXCrDxQXYRDn/1AIz3QQGkmbVDwcUk1Ki2jBUoXmBCMsJdycRucgMVEypWg==} + workerd@1.20241106.1: + resolution: {integrity: sha512-1GdKl0kDw8rrirr/ThcK66Kbl4/jd4h8uHx5g7YHBrnenY5SX1UPuop2cnCzYUxlg55kPjzIqqYslz1muRFgFw==} engines: {node: '>=16'} hasBin: true - wrangler@3.108.0: - resolution: {integrity: sha512-w8J0VtDqn8F94qw+HnxFbri7MMdT/to5/w1QHAjR//tIHkilKAUFNaEF3GDEJREvUG3iHuawrH2p5ATTHnFc/Q==} + wrangler@3.91.0: + resolution: {integrity: sha512-Hdzn6wbY9cz5kL85ZUvWLwLIH7nPaEVRblfms40jhRf4qQO/Zf74aFlku8rQFbe8/2aVZFaxJVfBd6JQMeMSBQ==} engines: {node: '>=16.17.0'} hasBin: true peerDependencies: - '@cloudflare/workers-types': ^4.20250204.0 + '@cloudflare/workers-types': ^4.20241106.0 peerDependenciesMeta: '@cloudflare/workers-types': optional: true @@ -6884,6 +7868,10 @@ packages: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} + xmlbuilder@15.1.1: + resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} + engines: {node: '>=8.0'} + xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} @@ -6891,32 +7879,51 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} + xxhash-wasm@1.1.0: + resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.7.0: - resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} + yaml@2.6.1: + resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} engines: {node: '>= 14'} hasBin: true + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - youch@3.2.3: - resolution: {integrity: sha512-ZBcWz/uzZaQVdCvfV4uk616Bbpf2ee+F/AvuKDR5EwX/Y4v06xWdtMluqTD7+KlZdM93lLm9gMZYo0sKBS0pgw==} + youch@3.3.4: + resolution: {integrity: sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==} + + zip-stream@4.1.1: + resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==} + engines: {node: '>= 10'} zod-to-json-schema@3.24.1: resolution: {integrity: sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w==} peerDependencies: zod: ^3.24.1 - zod@3.22.3: - resolution: {integrity: sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==} - zod@3.24.1: resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} @@ -6943,13 +7950,15 @@ packages: snapshots: + 7zip-bin@5.2.0: {} + '@adobe/css-tools@4.4.2': {} '@ai-sdk/amazon-bedrock@1.0.6(zod@3.24.1)': dependencies: '@ai-sdk/provider': 1.0.3 '@ai-sdk/provider-utils': 2.0.5(zod@3.24.1) - '@aws-sdk/client-bedrock-runtime': 3.744.0 + '@aws-sdk/client-bedrock-runtime': 3.716.0 zod: 3.24.1 transitivePeerDependencies: - aws-crt @@ -6960,17 +7969,17 @@ snapshots: '@ai-sdk/provider-utils': 1.0.9(zod@3.24.1) zod: 3.24.1 - '@ai-sdk/cohere@1.1.8(zod@3.24.1)': + '@ai-sdk/cohere@1.0.3(zod@3.24.1)': dependencies: - '@ai-sdk/provider': 1.0.7 - '@ai-sdk/provider-utils': 2.1.6(zod@3.24.1) + '@ai-sdk/provider': 1.0.1 + '@ai-sdk/provider-utils': 2.0.2(zod@3.24.1) zod: 3.24.1 - '@ai-sdk/deepseek@0.1.8(zod@3.24.1)': + '@ai-sdk/deepseek@0.1.3(zod@3.24.1)': dependencies: - '@ai-sdk/openai-compatible': 0.1.8(zod@3.24.1) - '@ai-sdk/provider': 1.0.7 - '@ai-sdk/provider-utils': 2.1.6(zod@3.24.1) + '@ai-sdk/openai-compatible': 0.1.3(zod@3.24.1) + '@ai-sdk/provider': 1.0.6 + '@ai-sdk/provider-utils': 2.1.2(zod@3.24.1) zod: 3.24.1 '@ai-sdk/google@0.0.52(zod@3.24.1)': @@ -6986,16 +7995,16 @@ snapshots: '@ai-sdk/provider-utils': 1.0.20(zod@3.24.1) zod: 3.24.1 - '@ai-sdk/openai-compatible@0.1.8(zod@3.24.1)': + '@ai-sdk/openai-compatible@0.1.3(zod@3.24.1)': dependencies: - '@ai-sdk/provider': 1.0.7 - '@ai-sdk/provider-utils': 2.1.6(zod@3.24.1) + '@ai-sdk/provider': 1.0.6 + '@ai-sdk/provider-utils': 2.1.2(zod@3.24.1) zod: 3.24.1 - '@ai-sdk/openai@1.1.9(zod@3.24.1)': + '@ai-sdk/openai@1.1.2(zod@3.24.1)': dependencies: - '@ai-sdk/provider': 1.0.7 - '@ai-sdk/provider-utils': 2.1.6(zod@3.24.1) + '@ai-sdk/provider': 1.0.6 + '@ai-sdk/provider-utils': 2.1.2(zod@3.24.1) zod: 3.24.1 '@ai-sdk/provider-utils@1.0.2(zod@3.24.1)': @@ -7025,6 +8034,15 @@ snapshots: optionalDependencies: zod: 3.24.1 + '@ai-sdk/provider-utils@2.0.2(zod@3.24.1)': + dependencies: + '@ai-sdk/provider': 1.0.1 + eventsource-parser: 3.0.0 + nanoid: 3.3.8 + secure-json-parse: 2.7.0 + optionalDependencies: + zod: 3.24.1 + '@ai-sdk/provider-utils@2.0.5(zod@3.24.1)': dependencies: '@ai-sdk/provider': 1.0.3 @@ -7034,9 +8052,9 @@ snapshots: optionalDependencies: zod: 3.24.1 - '@ai-sdk/provider-utils@2.1.6(zod@3.24.1)': + '@ai-sdk/provider-utils@2.1.2(zod@3.24.1)': dependencies: - '@ai-sdk/provider': 1.0.7 + '@ai-sdk/provider': 1.0.6 eventsource-parser: 3.0.0 nanoid: 3.3.8 secure-json-parse: 2.7.0 @@ -7055,46 +8073,48 @@ snapshots: dependencies: json-schema: 0.4.0 + '@ai-sdk/provider@1.0.1': + dependencies: + json-schema: 0.4.0 + '@ai-sdk/provider@1.0.3': dependencies: json-schema: 0.4.0 - '@ai-sdk/provider@1.0.7': + '@ai-sdk/provider@1.0.6': dependencies: json-schema: 0.4.0 - '@ai-sdk/react@1.1.11(react@18.3.1)(zod@3.24.1)': + '@ai-sdk/react@1.1.2(react@18.3.1)(zod@3.24.1)': dependencies: - '@ai-sdk/provider-utils': 2.1.6(zod@3.24.1) - '@ai-sdk/ui-utils': 1.1.11(zod@3.24.1) - swr: 2.3.2(react@18.3.1) + '@ai-sdk/provider-utils': 2.1.2(zod@3.24.1) + '@ai-sdk/ui-utils': 1.1.2(zod@3.24.1) + swr: 2.2.5(react@18.3.1) throttleit: 2.1.0 optionalDependencies: react: 18.3.1 zod: 3.24.1 - '@ai-sdk/ui-utils@1.1.11(zod@3.24.1)': + '@ai-sdk/ui-utils@1.1.2(zod@3.24.1)': dependencies: - '@ai-sdk/provider': 1.0.7 - '@ai-sdk/provider-utils': 2.1.6(zod@3.24.1) + '@ai-sdk/provider': 1.0.6 + '@ai-sdk/provider-utils': 2.1.2(zod@3.24.1) zod-to-json-schema: 3.24.1(zod@3.24.1) optionalDependencies: zod: 3.24.1 '@ampproject/remapping@2.3.0': dependencies: - '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@antfu/install-pkg@1.0.0': + '@antfu/install-pkg@0.4.1': dependencies: - package-manager-detector: 0.2.9 - tinyexec: 0.3.2 + package-manager-detector: 0.2.6 + tinyexec: 0.3.1 '@antfu/utils@0.7.10': {} - '@antfu/utils@8.1.0': {} - '@asamuzakjp/css-color@2.8.3': dependencies: '@csstools/css-calc': 2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) @@ -7106,7 +8126,7 @@ snapshots: '@aws-crypto/crc32@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.734.0 + '@aws-sdk/types': 3.714.0 tslib: 2.8.1 '@aws-crypto/sha256-browser@5.2.0': @@ -7114,15 +8134,15 @@ snapshots: '@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.734.0 - '@aws-sdk/util-locate-window': 3.723.0 + '@aws-sdk/types': 3.714.0 + '@aws-sdk/util-locate-window': 3.693.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 '@aws-crypto/sha256-js@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.734.0 + '@aws-sdk/types': 3.714.0 tslib: 2.8.1 '@aws-crypto/supports-web-crypto@5.2.0': @@ -7131,328 +8151,377 @@ snapshots: '@aws-crypto/util@5.2.0': dependencies: - '@aws-sdk/types': 3.734.0 + '@aws-sdk/types': 3.714.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/client-bedrock-runtime@3.744.0': + '@aws-sdk/client-bedrock-runtime@3.716.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.744.0 - '@aws-sdk/credential-provider-node': 3.744.0 - '@aws-sdk/middleware-host-header': 3.734.0 - '@aws-sdk/middleware-logger': 3.734.0 - '@aws-sdk/middleware-recursion-detection': 3.734.0 - '@aws-sdk/middleware-user-agent': 3.744.0 - '@aws-sdk/region-config-resolver': 3.734.0 - '@aws-sdk/types': 3.734.0 - '@aws-sdk/util-endpoints': 3.743.0 - '@aws-sdk/util-user-agent-browser': 3.734.0 - '@aws-sdk/util-user-agent-node': 3.744.0 - '@smithy/config-resolver': 4.0.1 - '@smithy/core': 3.1.2 - '@smithy/eventstream-serde-browser': 4.0.1 - '@smithy/eventstream-serde-config-resolver': 4.0.1 - '@smithy/eventstream-serde-node': 4.0.1 - '@smithy/fetch-http-handler': 5.0.1 - '@smithy/hash-node': 4.0.1 - '@smithy/invalid-dependency': 4.0.1 - '@smithy/middleware-content-length': 4.0.1 - '@smithy/middleware-endpoint': 4.0.3 - '@smithy/middleware-retry': 4.0.4 - '@smithy/middleware-serde': 4.0.2 - '@smithy/middleware-stack': 4.0.1 - '@smithy/node-config-provider': 4.0.1 - '@smithy/node-http-handler': 4.0.2 - '@smithy/protocol-http': 5.0.1 - '@smithy/smithy-client': 4.1.3 - '@smithy/types': 4.1.0 - '@smithy/url-parser': 4.0.1 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.4 - '@smithy/util-defaults-mode-node': 4.0.4 - '@smithy/util-endpoints': 3.0.1 - '@smithy/util-middleware': 4.0.1 - '@smithy/util-retry': 4.0.1 - '@smithy/util-stream': 4.0.2 - '@smithy/util-utf8': 4.0.0 + '@aws-sdk/client-sso-oidc': 3.716.0(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/client-sts': 3.716.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/middleware-host-header': 3.714.0 + '@aws-sdk/middleware-logger': 3.714.0 + '@aws-sdk/middleware-recursion-detection': 3.714.0 + '@aws-sdk/middleware-user-agent': 3.716.0 + '@aws-sdk/region-config-resolver': 3.714.0 + '@aws-sdk/types': 3.714.0 + '@aws-sdk/util-endpoints': 3.714.0 + '@aws-sdk/util-user-agent-browser': 3.714.0 + '@aws-sdk/util-user-agent-node': 3.716.0 + '@smithy/config-resolver': 3.0.13 + '@smithy/core': 2.5.6 + '@smithy/eventstream-serde-browser': 3.0.14 + '@smithy/eventstream-serde-config-resolver': 3.0.11 + '@smithy/eventstream-serde-node': 3.0.13 + '@smithy/fetch-http-handler': 4.1.2 + '@smithy/hash-node': 3.0.11 + '@smithy/invalid-dependency': 3.0.11 + '@smithy/middleware-content-length': 3.0.13 + '@smithy/middleware-endpoint': 3.2.7 + '@smithy/middleware-retry': 3.0.32 + '@smithy/middleware-serde': 3.0.11 + '@smithy/middleware-stack': 3.0.11 + '@smithy/node-config-provider': 3.1.12 + '@smithy/node-http-handler': 3.3.3 + '@smithy/protocol-http': 4.1.8 + '@smithy/smithy-client': 3.5.2 + '@smithy/types': 3.7.2 + '@smithy/url-parser': 3.0.11 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.32 + '@smithy/util-defaults-mode-node': 3.0.32 + '@smithy/util-endpoints': 2.1.7 + '@smithy/util-middleware': 3.0.11 + '@smithy/util-retry': 3.0.11 + '@smithy/util-stream': 3.3.3 + '@smithy/util-utf8': 3.0.0 '@types/uuid': 9.0.8 tslib: 2.8.1 uuid: 9.0.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso@3.744.0': + '@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0)': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.744.0 - '@aws-sdk/middleware-host-header': 3.734.0 - '@aws-sdk/middleware-logger': 3.734.0 - '@aws-sdk/middleware-recursion-detection': 3.734.0 - '@aws-sdk/middleware-user-agent': 3.744.0 - '@aws-sdk/region-config-resolver': 3.734.0 - '@aws-sdk/types': 3.734.0 - '@aws-sdk/util-endpoints': 3.743.0 - '@aws-sdk/util-user-agent-browser': 3.734.0 - '@aws-sdk/util-user-agent-node': 3.744.0 - '@smithy/config-resolver': 4.0.1 - '@smithy/core': 3.1.2 - '@smithy/fetch-http-handler': 5.0.1 - '@smithy/hash-node': 4.0.1 - '@smithy/invalid-dependency': 4.0.1 - '@smithy/middleware-content-length': 4.0.1 - '@smithy/middleware-endpoint': 4.0.3 - '@smithy/middleware-retry': 4.0.4 - '@smithy/middleware-serde': 4.0.2 - '@smithy/middleware-stack': 4.0.1 - '@smithy/node-config-provider': 4.0.1 - '@smithy/node-http-handler': 4.0.2 - '@smithy/protocol-http': 5.0.1 - '@smithy/smithy-client': 4.1.3 - '@smithy/types': 4.1.0 - '@smithy/url-parser': 4.0.1 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.4 - '@smithy/util-defaults-mode-node': 4.0.4 - '@smithy/util-endpoints': 3.0.1 - '@smithy/util-middleware': 4.0.1 - '@smithy/util-retry': 4.0.1 - '@smithy/util-utf8': 4.0.0 + '@aws-sdk/client-sts': 3.716.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/middleware-host-header': 3.714.0 + '@aws-sdk/middleware-logger': 3.714.0 + '@aws-sdk/middleware-recursion-detection': 3.714.0 + '@aws-sdk/middleware-user-agent': 3.716.0 + '@aws-sdk/region-config-resolver': 3.714.0 + '@aws-sdk/types': 3.714.0 + '@aws-sdk/util-endpoints': 3.714.0 + '@aws-sdk/util-user-agent-browser': 3.714.0 + '@aws-sdk/util-user-agent-node': 3.716.0 + '@smithy/config-resolver': 3.0.13 + '@smithy/core': 2.5.6 + '@smithy/fetch-http-handler': 4.1.2 + '@smithy/hash-node': 3.0.11 + '@smithy/invalid-dependency': 3.0.11 + '@smithy/middleware-content-length': 3.0.13 + '@smithy/middleware-endpoint': 3.2.7 + '@smithy/middleware-retry': 3.0.32 + '@smithy/middleware-serde': 3.0.11 + '@smithy/middleware-stack': 3.0.11 + '@smithy/node-config-provider': 3.1.12 + '@smithy/node-http-handler': 3.3.3 + '@smithy/protocol-http': 4.1.8 + '@smithy/smithy-client': 3.5.2 + '@smithy/types': 3.7.2 + '@smithy/url-parser': 3.0.11 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.32 + '@smithy/util-defaults-mode-node': 3.0.32 + '@smithy/util-endpoints': 2.1.7 + '@smithy/util-middleware': 3.0.11 + '@smithy/util-retry': 3.0.11 + '@smithy/util-utf8': 3.0.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/core@3.744.0': + '@aws-sdk/client-sso@3.716.0': dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/core': 3.1.2 - '@smithy/node-config-provider': 4.0.1 - '@smithy/property-provider': 4.0.1 - '@smithy/protocol-http': 5.0.1 - '@smithy/signature-v4': 5.0.1 - '@smithy/smithy-client': 4.1.3 - '@smithy/types': 4.1.0 - '@smithy/util-middleware': 4.0.1 + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/middleware-host-header': 3.714.0 + '@aws-sdk/middleware-logger': 3.714.0 + '@aws-sdk/middleware-recursion-detection': 3.714.0 + '@aws-sdk/middleware-user-agent': 3.716.0 + '@aws-sdk/region-config-resolver': 3.714.0 + '@aws-sdk/types': 3.714.0 + '@aws-sdk/util-endpoints': 3.714.0 + '@aws-sdk/util-user-agent-browser': 3.714.0 + '@aws-sdk/util-user-agent-node': 3.716.0 + '@smithy/config-resolver': 3.0.13 + '@smithy/core': 2.5.6 + '@smithy/fetch-http-handler': 4.1.2 + '@smithy/hash-node': 3.0.11 + '@smithy/invalid-dependency': 3.0.11 + '@smithy/middleware-content-length': 3.0.13 + '@smithy/middleware-endpoint': 3.2.7 + '@smithy/middleware-retry': 3.0.32 + '@smithy/middleware-serde': 3.0.11 + '@smithy/middleware-stack': 3.0.11 + '@smithy/node-config-provider': 3.1.12 + '@smithy/node-http-handler': 3.3.3 + '@smithy/protocol-http': 4.1.8 + '@smithy/smithy-client': 3.5.2 + '@smithy/types': 3.7.2 + '@smithy/url-parser': 3.0.11 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.32 + '@smithy/util-defaults-mode-node': 3.0.32 + '@smithy/util-endpoints': 2.1.7 + '@smithy/util-middleware': 3.0.11 + '@smithy/util-retry': 3.0.11 + '@smithy/util-utf8': 3.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sts@3.716.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.716.0(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/core': 3.716.0 + '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/middleware-host-header': 3.714.0 + '@aws-sdk/middleware-logger': 3.714.0 + '@aws-sdk/middleware-recursion-detection': 3.714.0 + '@aws-sdk/middleware-user-agent': 3.716.0 + '@aws-sdk/region-config-resolver': 3.714.0 + '@aws-sdk/types': 3.714.0 + '@aws-sdk/util-endpoints': 3.714.0 + '@aws-sdk/util-user-agent-browser': 3.714.0 + '@aws-sdk/util-user-agent-node': 3.716.0 + '@smithy/config-resolver': 3.0.13 + '@smithy/core': 2.5.6 + '@smithy/fetch-http-handler': 4.1.2 + '@smithy/hash-node': 3.0.11 + '@smithy/invalid-dependency': 3.0.11 + '@smithy/middleware-content-length': 3.0.13 + '@smithy/middleware-endpoint': 3.2.7 + '@smithy/middleware-retry': 3.0.32 + '@smithy/middleware-serde': 3.0.11 + '@smithy/middleware-stack': 3.0.11 + '@smithy/node-config-provider': 3.1.12 + '@smithy/node-http-handler': 3.3.3 + '@smithy/protocol-http': 4.1.8 + '@smithy/smithy-client': 3.5.2 + '@smithy/types': 3.7.2 + '@smithy/url-parser': 3.0.11 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.32 + '@smithy/util-defaults-mode-node': 3.0.32 + '@smithy/util-endpoints': 2.1.7 + '@smithy/util-middleware': 3.0.11 + '@smithy/util-retry': 3.0.11 + '@smithy/util-utf8': 3.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/core@3.716.0': + dependencies: + '@aws-sdk/types': 3.714.0 + '@smithy/core': 2.5.6 + '@smithy/node-config-provider': 3.1.12 + '@smithy/property-provider': 3.1.11 + '@smithy/protocol-http': 4.1.8 + '@smithy/signature-v4': 4.2.4 + '@smithy/smithy-client': 3.5.2 + '@smithy/types': 3.7.2 + '@smithy/util-middleware': 3.0.11 fast-xml-parser: 4.4.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-env@3.744.0': + '@aws-sdk/credential-provider-env@3.716.0': dependencies: - '@aws-sdk/core': 3.744.0 - '@aws-sdk/types': 3.734.0 - '@smithy/property-provider': 4.0.1 - '@smithy/types': 4.1.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/types': 3.714.0 + '@smithy/property-provider': 3.1.11 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.744.0': + '@aws-sdk/credential-provider-http@3.716.0': dependencies: - '@aws-sdk/core': 3.744.0 - '@aws-sdk/types': 3.734.0 - '@smithy/fetch-http-handler': 5.0.1 - '@smithy/node-http-handler': 4.0.2 - '@smithy/property-provider': 4.0.1 - '@smithy/protocol-http': 5.0.1 - '@smithy/smithy-client': 4.1.3 - '@smithy/types': 4.1.0 - '@smithy/util-stream': 4.0.2 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/types': 3.714.0 + '@smithy/fetch-http-handler': 4.1.2 + '@smithy/node-http-handler': 3.3.3 + '@smithy/property-provider': 3.1.11 + '@smithy/protocol-http': 4.1.8 + '@smithy/smithy-client': 3.5.2 + '@smithy/types': 3.7.2 + '@smithy/util-stream': 3.3.3 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.744.0': + '@aws-sdk/credential-provider-ini@3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0)': dependencies: - '@aws-sdk/core': 3.744.0 - '@aws-sdk/credential-provider-env': 3.744.0 - '@aws-sdk/credential-provider-http': 3.744.0 - '@aws-sdk/credential-provider-process': 3.744.0 - '@aws-sdk/credential-provider-sso': 3.744.0 - '@aws-sdk/credential-provider-web-identity': 3.744.0 - '@aws-sdk/nested-clients': 3.744.0 - '@aws-sdk/types': 3.734.0 - '@smithy/credential-provider-imds': 4.0.1 - '@smithy/property-provider': 4.0.1 - '@smithy/shared-ini-file-loader': 4.0.1 - '@smithy/types': 4.1.0 + '@aws-sdk/client-sts': 3.716.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/credential-provider-env': 3.716.0 + '@aws-sdk/credential-provider-http': 3.716.0 + '@aws-sdk/credential-provider-process': 3.716.0 + '@aws-sdk/credential-provider-sso': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0)) + '@aws-sdk/credential-provider-web-identity': 3.716.0(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/types': 3.714.0 + '@smithy/credential-provider-imds': 3.2.8 + '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 + '@smithy/types': 3.7.2 tslib: 2.8.1 transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-node@3.744.0': + '@aws-sdk/credential-provider-node@3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0)': dependencies: - '@aws-sdk/credential-provider-env': 3.744.0 - '@aws-sdk/credential-provider-http': 3.744.0 - '@aws-sdk/credential-provider-ini': 3.744.0 - '@aws-sdk/credential-provider-process': 3.744.0 - '@aws-sdk/credential-provider-sso': 3.744.0 - '@aws-sdk/credential-provider-web-identity': 3.744.0 - '@aws-sdk/types': 3.734.0 - '@smithy/credential-provider-imds': 4.0.1 - '@smithy/property-provider': 4.0.1 - '@smithy/shared-ini-file-loader': 4.0.1 - '@smithy/types': 4.1.0 + '@aws-sdk/credential-provider-env': 3.716.0 + '@aws-sdk/credential-provider-http': 3.716.0 + '@aws-sdk/credential-provider-ini': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/credential-provider-process': 3.716.0 + '@aws-sdk/credential-provider-sso': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0)) + '@aws-sdk/credential-provider-web-identity': 3.716.0(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/types': 3.714.0 + '@smithy/credential-provider-imds': 3.2.8 + '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 + '@smithy/types': 3.7.2 tslib: 2.8.1 transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' - aws-crt - '@aws-sdk/credential-provider-process@3.744.0': + '@aws-sdk/credential-provider-process@3.716.0': dependencies: - '@aws-sdk/core': 3.744.0 - '@aws-sdk/types': 3.734.0 - '@smithy/property-provider': 4.0.1 - '@smithy/shared-ini-file-loader': 4.0.1 - '@smithy/types': 4.1.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/types': 3.714.0 + '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.744.0': + '@aws-sdk/credential-provider-sso@3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))': dependencies: - '@aws-sdk/client-sso': 3.744.0 - '@aws-sdk/core': 3.744.0 - '@aws-sdk/token-providers': 3.744.0 - '@aws-sdk/types': 3.734.0 - '@smithy/property-provider': 4.0.1 - '@smithy/shared-ini-file-loader': 4.0.1 - '@smithy/types': 4.1.0 + '@aws-sdk/client-sso': 3.716.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/token-providers': 3.714.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0)) + '@aws-sdk/types': 3.714.0 + '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 + '@smithy/types': 3.7.2 tslib: 2.8.1 transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-web-identity@3.744.0': + '@aws-sdk/credential-provider-web-identity@3.716.0(@aws-sdk/client-sts@3.716.0)': dependencies: - '@aws-sdk/core': 3.744.0 - '@aws-sdk/nested-clients': 3.744.0 - '@aws-sdk/types': 3.734.0 - '@smithy/property-provider': 4.0.1 - '@smithy/types': 4.1.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/middleware-host-header@3.734.0': - dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/protocol-http': 5.0.1 - '@smithy/types': 4.1.0 + '@aws-sdk/client-sts': 3.716.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/types': 3.714.0 + '@smithy/property-provider': 3.1.11 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/middleware-logger@3.734.0': + '@aws-sdk/middleware-host-header@3.714.0': dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/types': 4.1.0 + '@aws-sdk/types': 3.714.0 + '@smithy/protocol-http': 4.1.8 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/middleware-recursion-detection@3.734.0': + '@aws-sdk/middleware-logger@3.714.0': dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/protocol-http': 5.0.1 - '@smithy/types': 4.1.0 + '@aws-sdk/types': 3.714.0 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/middleware-user-agent@3.744.0': + '@aws-sdk/middleware-recursion-detection@3.714.0': dependencies: - '@aws-sdk/core': 3.744.0 - '@aws-sdk/types': 3.734.0 - '@aws-sdk/util-endpoints': 3.743.0 - '@smithy/core': 3.1.2 - '@smithy/protocol-http': 5.0.1 - '@smithy/types': 4.1.0 + '@aws-sdk/types': 3.714.0 + '@smithy/protocol-http': 4.1.8 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/nested-clients@3.744.0': + '@aws-sdk/middleware-user-agent@3.716.0': dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.744.0 - '@aws-sdk/middleware-host-header': 3.734.0 - '@aws-sdk/middleware-logger': 3.734.0 - '@aws-sdk/middleware-recursion-detection': 3.734.0 - '@aws-sdk/middleware-user-agent': 3.744.0 - '@aws-sdk/region-config-resolver': 3.734.0 - '@aws-sdk/types': 3.734.0 - '@aws-sdk/util-endpoints': 3.743.0 - '@aws-sdk/util-user-agent-browser': 3.734.0 - '@aws-sdk/util-user-agent-node': 3.744.0 - '@smithy/config-resolver': 4.0.1 - '@smithy/core': 3.1.2 - '@smithy/fetch-http-handler': 5.0.1 - '@smithy/hash-node': 4.0.1 - '@smithy/invalid-dependency': 4.0.1 - '@smithy/middleware-content-length': 4.0.1 - '@smithy/middleware-endpoint': 4.0.3 - '@smithy/middleware-retry': 4.0.4 - '@smithy/middleware-serde': 4.0.2 - '@smithy/middleware-stack': 4.0.1 - '@smithy/node-config-provider': 4.0.1 - '@smithy/node-http-handler': 4.0.2 - '@smithy/protocol-http': 5.0.1 - '@smithy/smithy-client': 4.1.3 - '@smithy/types': 4.1.0 - '@smithy/url-parser': 4.0.1 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.4 - '@smithy/util-defaults-mode-node': 4.0.4 - '@smithy/util-endpoints': 3.0.1 - '@smithy/util-middleware': 4.0.1 - '@smithy/util-retry': 4.0.1 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/region-config-resolver@3.734.0': - dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/node-config-provider': 4.0.1 - '@smithy/types': 4.1.0 - '@smithy/util-config-provider': 4.0.0 - '@smithy/util-middleware': 4.0.1 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/types': 3.714.0 + '@aws-sdk/util-endpoints': 3.714.0 + '@smithy/core': 2.5.6 + '@smithy/protocol-http': 4.1.8 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/token-providers@3.744.0': + '@aws-sdk/region-config-resolver@3.714.0': dependencies: - '@aws-sdk/nested-clients': 3.744.0 - '@aws-sdk/types': 3.734.0 - '@smithy/property-provider': 4.0.1 - '@smithy/shared-ini-file-loader': 4.0.1 - '@smithy/types': 4.1.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/types@3.734.0': - dependencies: - '@smithy/types': 4.1.0 + '@aws-sdk/types': 3.714.0 + '@smithy/node-config-provider': 3.1.12 + '@smithy/types': 3.7.2 + '@smithy/util-config-provider': 3.0.0 + '@smithy/util-middleware': 3.0.11 tslib: 2.8.1 - '@aws-sdk/util-endpoints@3.743.0': + '@aws-sdk/token-providers@3.714.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))': dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/types': 4.1.0 - '@smithy/util-endpoints': 3.0.1 + '@aws-sdk/client-sso-oidc': 3.716.0(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/types': 3.714.0 + '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/util-locate-window@3.723.0': + '@aws-sdk/types@3.714.0': + dependencies: + '@smithy/types': 3.7.2 + tslib: 2.8.1 + + '@aws-sdk/util-endpoints@3.714.0': + dependencies: + '@aws-sdk/types': 3.714.0 + '@smithy/types': 3.7.2 + '@smithy/util-endpoints': 2.1.7 + tslib: 2.8.1 + + '@aws-sdk/util-locate-window@3.693.0': dependencies: tslib: 2.8.1 - '@aws-sdk/util-user-agent-browser@3.734.0': + '@aws-sdk/util-user-agent-browser@3.714.0': dependencies: - '@aws-sdk/types': 3.734.0 - '@smithy/types': 4.1.0 + '@aws-sdk/types': 3.714.0 + '@smithy/types': 3.7.2 bowser: 2.11.0 tslib: 2.8.1 - '@aws-sdk/util-user-agent-node@3.744.0': + '@aws-sdk/util-user-agent-node@3.716.0': dependencies: - '@aws-sdk/middleware-user-agent': 3.744.0 - '@aws-sdk/types': 3.734.0 - '@smithy/node-config-provider': 4.0.1 - '@smithy/types': 4.1.0 + '@aws-sdk/middleware-user-agent': 3.716.0 + '@aws-sdk/types': 3.714.0 + '@smithy/node-config-provider': 3.1.12 + '@smithy/types': 3.7.2 tslib: 2.8.1 '@babel/code-frame@7.26.2': @@ -7461,104 +8530,110 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.26.8': {} + '@babel/compat-data@7.26.2': {} - '@babel/core@7.26.8': + '@babel/core@7.26.0': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.8 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.8) - '@babel/helpers': 7.26.7 - '@babel/parser': 7.26.8 - '@babel/template': 7.26.8 - '@babel/traverse': 7.26.8 - '@babel/types': 7.26.8 - '@types/gensync': 1.0.4 + '@babel/generator': 7.26.2 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 convert-source-map: 2.0.0 - debug: 4.4.0 + debug: 4.3.7 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.26.8': + '@babel/generator@7.26.2': dependencies: - '@babel/parser': 7.26.8 - '@babel/types': 7.26.8 - '@jridgewell/gen-mapping': 0.3.8 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 + '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 '@babel/helper-annotate-as-pure@7.25.9': dependencies: - '@babel/types': 7.26.8 + '@babel/types': 7.26.0 - '@babel/helper-compilation-targets@7.26.5': + '@babel/helper-compilation-targets@7.25.9': dependencies: - '@babel/compat-data': 7.26.8 + '@babel/compat-data': 7.26.2 '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.4 + browserslist: 4.24.2 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.8)': + '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.8 + '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.8) + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.26.8 + '@babel/traverse': 7.25.9 semver: 6.3.1 transitivePeerDependencies: - supports-color '@babel/helper-member-expression-to-functions@7.25.9': dependencies: - '@babel/traverse': 7.26.8 - '@babel/types': 7.26.8 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/traverse': 7.26.8 - '@babel/types': 7.26.8 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.8)': + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.8 + '@babel/core': 7.26.0 '@babel/helper-module-imports': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.8 + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.25.9': dependencies: - '@babel/types': 7.26.8 + '@babel/types': 7.26.0 - '@babel/helper-plugin-utils@7.26.5': {} + '@babel/helper-plugin-utils@7.25.9': {} - '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.8)': + '@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.8 + '@babel/core': 7.26.0 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.26.8 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-simple-access@7.25.9': + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: - '@babel/traverse': 7.26.8 - '@babel/types': 7.26.8 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color @@ -7568,110 +8643,111 @@ snapshots: '@babel/helper-validator-option@7.25.9': {} - '@babel/helpers@7.26.7': + '@babel/helpers@7.26.0': dependencies: - '@babel/template': 7.26.8 - '@babel/types': 7.26.8 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 - '@babel/parser@7.26.8': + '@babel/parser@7.26.2': dependencies: - '@babel/types': 7.26.8 + '@babel/types': 7.26.0 - '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.26.8)': + '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.8)': + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.8)': + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.8)': + '@babel/plugin-transform-modules-commonjs@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.8 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.8) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-simple-access': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.8)': + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.8)': + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-typescript@7.26.8(@babel/core@7.26.8)': + '@babel/plugin-transform-typescript@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.8 + '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.8) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.8) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.26.0(@babel/core@7.26.8)': + '@babel/preset-typescript@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.26.8 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.8) - '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.26.8) + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: - supports-color - '@babel/runtime@7.26.7': + '@babel/runtime@7.26.0': dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.26.8': + '@babel/template@7.25.9': dependencies: '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.8 - '@babel/types': 7.26.8 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 - '@babel/traverse@7.26.8': + '@babel/traverse@7.25.9': dependencies: '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.8 - '@babel/parser': 7.26.8 - '@babel/template': 7.26.8 - '@babel/types': 7.26.8 - debug: 4.4.0 + '@babel/generator': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 + debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.26.8': + '@babel/types@7.26.0': dependencies: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@blitz/eslint-plugin@0.1.0(jiti@1.21.7)(prettier@3.5.0)(typescript@5.7.3)': + '@blitz/eslint-plugin@0.1.0(@types/eslint@8.56.10)(jiti@1.21.6)(prettier@3.4.1)(typescript@5.7.2)': dependencies: - '@stylistic/eslint-plugin-ts': 2.13.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) - '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3))(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) - '@typescript-eslint/parser': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) + '@stylistic/eslint-plugin-ts': 2.11.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) + '@typescript-eslint/eslint-plugin': 8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2))(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) + '@typescript-eslint/parser': 8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) + '@typescript-eslint/utils': 8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) common-tags: 1.8.2 - eslint: 9.20.1(jiti@1.21.7) - eslint-config-prettier: 9.1.0(eslint@9.20.1(jiti@1.21.7)) - eslint-plugin-jsonc: 2.19.1(eslint@9.20.1(jiti@1.21.7)) - eslint-plugin-prettier: 5.2.3(eslint-config-prettier@9.1.0(eslint@9.20.1(jiti@1.21.7)))(eslint@9.20.1(jiti@1.21.7))(prettier@3.5.0) - globals: 15.14.0 - typescript-eslint: 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) + eslint: 9.16.0(jiti@1.21.6) + eslint-config-prettier: 9.1.0(eslint@9.16.0(jiti@1.21.6)) + eslint-plugin-jsonc: 2.18.2(eslint@9.16.0(jiti@1.21.6)) + eslint-plugin-prettier: 5.2.1(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@9.16.0(jiti@1.21.6)))(eslint@9.16.0(jiti@1.21.6))(prettier@3.4.1) + globals: 15.13.0 + typescript-eslint: 8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) transitivePeerDependencies: - '@eslint/json' - '@types/eslint' @@ -7680,7 +8756,7 @@ snapshots: - supports-color - typescript - '@bufbuild/protobuf@2.2.3': {} + '@bufbuild/protobuf@2.2.2': {} '@cloudflare/kv-asset-handler@0.1.3': dependencies: @@ -7690,123 +8766,134 @@ snapshots: dependencies: mime: 3.0.0 - '@cloudflare/workerd-darwin-64@1.20250204.0': + '@cloudflare/workerd-darwin-64@1.20241106.1': optional: true - '@cloudflare/workerd-darwin-arm64@1.20250204.0': + '@cloudflare/workerd-darwin-arm64@1.20241106.1': optional: true - '@cloudflare/workerd-linux-64@1.20250204.0': + '@cloudflare/workerd-linux-64@1.20241106.1': optional: true - '@cloudflare/workerd-linux-arm64@1.20250204.0': + '@cloudflare/workerd-linux-arm64@1.20241106.1': optional: true - '@cloudflare/workerd-windows-64@1.20250204.0': + '@cloudflare/workerd-windows-64@1.20241106.1': optional: true - '@cloudflare/workers-types@4.20250204.0': {} - - '@codemirror/autocomplete@6.18.4': + '@cloudflare/workers-shared@0.9.0': dependencies: - '@codemirror/language': 6.10.8 - '@codemirror/state': 6.5.2 - '@codemirror/view': 6.36.2 + mime: 3.0.0 + zod: 3.24.1 + + '@cloudflare/workers-types@4.20241127.0': {} + + '@codemirror/autocomplete@6.18.3(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)(@lezer/common@1.2.3)': + dependencies: + '@codemirror/language': 6.10.6 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.35.0 '@lezer/common': 1.2.3 - '@codemirror/commands@6.8.0': + '@codemirror/commands@6.7.1': dependencies: - '@codemirror/language': 6.10.8 - '@codemirror/state': 6.5.2 - '@codemirror/view': 6.36.2 + '@codemirror/language': 6.10.6 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.35.0 '@lezer/common': 1.2.3 '@codemirror/lang-cpp@6.0.2': dependencies: - '@codemirror/language': 6.10.8 + '@codemirror/language': 6.10.6 '@lezer/cpp': 1.1.2 - '@codemirror/lang-css@6.3.1': + '@codemirror/lang-css@6.3.1(@codemirror/view@6.35.0)': dependencies: - '@codemirror/autocomplete': 6.18.4 - '@codemirror/language': 6.10.8 - '@codemirror/state': 6.5.2 + '@codemirror/autocomplete': 6.18.3(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)(@lezer/common@1.2.3) + '@codemirror/language': 6.10.6 + '@codemirror/state': 6.4.1 '@lezer/common': 1.2.3 - '@lezer/css': 1.1.10 + '@lezer/css': 1.1.9 + transitivePeerDependencies: + - '@codemirror/view' '@codemirror/lang-html@6.4.9': dependencies: - '@codemirror/autocomplete': 6.18.4 - '@codemirror/lang-css': 6.3.1 + '@codemirror/autocomplete': 6.18.3(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)(@lezer/common@1.2.3) + '@codemirror/lang-css': 6.3.1(@codemirror/view@6.35.0) '@codemirror/lang-javascript': 6.2.2 - '@codemirror/language': 6.10.8 - '@codemirror/state': 6.5.2 - '@codemirror/view': 6.36.2 + '@codemirror/language': 6.10.6 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.35.0 '@lezer/common': 1.2.3 - '@lezer/css': 1.1.10 + '@lezer/css': 1.1.9 '@lezer/html': 1.3.10 '@codemirror/lang-javascript@6.2.2': dependencies: - '@codemirror/autocomplete': 6.18.4 - '@codemirror/language': 6.10.8 + '@codemirror/autocomplete': 6.18.3(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)(@lezer/common@1.2.3) + '@codemirror/language': 6.10.6 '@codemirror/lint': 6.8.4 - '@codemirror/state': 6.5.2 - '@codemirror/view': 6.36.2 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.35.0 '@lezer/common': 1.2.3 - '@lezer/javascript': 1.4.21 + '@lezer/javascript': 1.4.20 '@codemirror/lang-json@6.0.1': dependencies: - '@codemirror/language': 6.10.8 - '@lezer/json': 1.0.3 + '@codemirror/language': 6.10.6 + '@lezer/json': 1.0.2 - '@codemirror/lang-markdown@6.3.2': + '@codemirror/lang-markdown@6.3.1': dependencies: - '@codemirror/autocomplete': 6.18.4 + '@codemirror/autocomplete': 6.18.3(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)(@lezer/common@1.2.3) '@codemirror/lang-html': 6.4.9 - '@codemirror/language': 6.10.8 - '@codemirror/state': 6.5.2 - '@codemirror/view': 6.36.2 + '@codemirror/language': 6.10.6 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.35.0 '@lezer/common': 1.2.3 - '@lezer/markdown': 1.4.1 + '@lezer/markdown': 1.3.2 - '@codemirror/lang-python@6.1.7': + '@codemirror/lang-python@6.1.6(@codemirror/view@6.35.0)': dependencies: - '@codemirror/autocomplete': 6.18.4 - '@codemirror/language': 6.10.8 - '@codemirror/state': 6.5.2 + '@codemirror/autocomplete': 6.18.3(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)(@lezer/common@1.2.3) + '@codemirror/language': 6.10.6 + '@codemirror/state': 6.4.1 '@lezer/common': 1.2.3 - '@lezer/python': 1.1.15 + '@lezer/python': 1.1.14 + transitivePeerDependencies: + - '@codemirror/view' - '@codemirror/lang-sass@6.0.2': + '@codemirror/lang-sass@6.0.2(@codemirror/view@6.35.0)': dependencies: - '@codemirror/lang-css': 6.3.1 - '@codemirror/language': 6.10.8 - '@codemirror/state': 6.5.2 + '@codemirror/lang-css': 6.3.1(@codemirror/view@6.35.0) + '@codemirror/language': 6.10.6 + '@codemirror/state': 6.4.1 '@lezer/common': 1.2.3 '@lezer/sass': 1.0.7 + transitivePeerDependencies: + - '@codemirror/view' '@codemirror/lang-vue@0.1.3': dependencies: '@codemirror/lang-html': 6.4.9 '@codemirror/lang-javascript': 6.2.2 - '@codemirror/language': 6.10.8 + '@codemirror/language': 6.10.6 '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 '@codemirror/lang-wast@6.0.2': dependencies: - '@codemirror/language': 6.10.8 + '@codemirror/language': 6.10.6 '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 - '@codemirror/language@6.10.8': + '@codemirror/language@6.10.6': dependencies: - '@codemirror/state': 6.5.2 - '@codemirror/view': 6.36.2 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.35.0 '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 @@ -7814,23 +8901,21 @@ snapshots: '@codemirror/lint@6.8.4': dependencies: - '@codemirror/state': 6.5.2 - '@codemirror/view': 6.36.2 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.35.0 crelt: 1.0.6 '@codemirror/search@6.5.8': dependencies: - '@codemirror/state': 6.5.2 - '@codemirror/view': 6.36.2 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.35.0 crelt: 1.0.6 - '@codemirror/state@6.5.2': - dependencies: - '@marijn/find-cluster-break': 1.0.2 + '@codemirror/state@6.4.1': {} - '@codemirror/view@6.36.2': + '@codemirror/view@6.35.0': dependencies: - '@codemirror/state': 6.5.2 + '@codemirror/state': 6.4.1 style-mod: 4.1.2 w3c-keyname: 2.2.8 @@ -7858,10 +8943,81 @@ snapshots: '@csstools/css-tokenizer@3.0.3': {} - '@emnapi/runtime@1.3.1': + '@develar/schema-utils@2.6.5': dependencies: - tslib: 2.8.1 - optional: true + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + + '@electron/asar@3.2.18': + dependencies: + commander: 5.1.0 + glob: 7.2.3 + minimatch: 3.1.2 + + '@electron/get@2.0.3': + dependencies: + debug: 4.3.7 + env-paths: 2.2.1 + fs-extra: 8.1.0 + got: 11.8.6 + progress: 2.0.3 + semver: 6.3.1 + sumchecker: 3.0.1 + optionalDependencies: + global-agent: 3.0.0 + transitivePeerDependencies: + - supports-color + + '@electron/notarize@2.5.0': + dependencies: + debug: 4.3.7 + fs-extra: 9.1.0 + promise-retry: 2.0.1 + transitivePeerDependencies: + - supports-color + + '@electron/osx-sign@1.3.1': + dependencies: + compare-version: 0.1.2 + debug: 4.3.7 + fs-extra: 10.1.0 + isbinaryfile: 4.0.10 + minimist: 1.2.8 + plist: 3.1.0 + transitivePeerDependencies: + - supports-color + + '@electron/rebuild@3.6.1': + dependencies: + '@malept/cross-spawn-promise': 2.0.0 + chalk: 4.1.2 + debug: 4.3.7 + detect-libc: 2.0.3 + fs-extra: 10.1.0 + got: 11.8.6 + node-abi: 3.74.0 + node-api-version: 0.2.0 + node-gyp: 9.4.1 + ora: 5.4.1 + read-binary-file-arch: 1.0.6 + semver: 7.6.3 + tar: 6.2.1 + yargs: 17.7.2 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron/universal@2.0.1': + dependencies: + '@electron/asar': 3.2.18 + '@malept/cross-spawn-promise': 2.0.0 + debug: 4.3.7 + dir-compare: 4.2.0 + fs-extra: 11.3.0 + minimatch: 9.0.5 + plist: 3.1.0 + transitivePeerDependencies: + - supports-color '@emotion/hash@0.9.2': {} @@ -8148,85 +9304,80 @@ snapshots: '@esbuild/win32-x64@0.23.1': optional: true - '@eslint-community/eslint-utils@4.4.1(eslint@9.20.1(jiti@1.21.7))': + '@eslint-community/eslint-utils@4.4.1(eslint@9.16.0(jiti@1.21.6))': dependencies: - eslint: 9.20.1(jiti@1.21.7) + eslint: 9.16.0(jiti@1.21.6) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.19.2': + '@eslint/config-array@0.19.0': dependencies: - '@eslint/object-schema': 2.1.6 - debug: 4.4.0 + '@eslint/object-schema': 2.1.4 + debug: 4.3.7 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/core@0.10.0': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/core@0.11.0': - dependencies: - '@types/json-schema': 7.0.15 + '@eslint/core@0.9.0': {} '@eslint/eslintrc@3.2.0': dependencies: ajv: 6.12.6 - debug: 4.4.0 + debug: 4.3.7 espree: 10.3.0 globals: 14.0.0 ignore: 5.3.2 - import-fresh: 3.3.1 + import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@eslint/js@9.20.0': {} + '@eslint/js@9.16.0': {} - '@eslint/object-schema@2.1.6': {} + '@eslint/object-schema@2.1.4': {} - '@eslint/plugin-kit@0.2.5': + '@eslint/plugin-kit@0.2.3': dependencies: - '@eslint/core': 0.10.0 levn: 0.4.1 '@fastify/busboy@2.1.1': {} - '@floating-ui/core@1.6.9': + '@floating-ui/core@1.6.8': dependencies: - '@floating-ui/utils': 0.2.9 + '@floating-ui/utils': 0.2.8 - '@floating-ui/dom@1.6.13': + '@floating-ui/dom@1.6.12': dependencies: - '@floating-ui/core': 1.6.9 - '@floating-ui/utils': 0.2.9 + '@floating-ui/core': 1.6.8 + '@floating-ui/utils': 0.2.8 '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@floating-ui/dom': 1.6.13 + '@floating-ui/dom': 1.6.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) '@floating-ui/react@0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@floating-ui/utils': 0.2.9 + '@floating-ui/utils': 0.2.8 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tabbable: 6.2.0 - '@floating-ui/utils@0.2.9': {} + '@floating-ui/utils@0.2.8': {} + + '@gar/promisify@1.1.3': {} '@headlessui/react@2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/react': 0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tanstack/react-virtual': 3.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/focus': 3.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tanstack/react-virtual': 3.13.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -8243,104 +9394,28 @@ snapshots: '@humanwhocodes/retry@0.4.1': {} - '@iconify-json/ph@1.2.2': + '@iconify-json/ph@1.2.1': dependencies: '@iconify/types': 2.0.0 - '@iconify-json/svg-spinners@1.2.2': + '@iconify-json/svg-spinners@1.2.1': dependencies: '@iconify/types': 2.0.0 '@iconify/types@2.0.0': {} - '@iconify/utils@2.3.0': + '@iconify/utils@2.1.33': dependencies: - '@antfu/install-pkg': 1.0.0 - '@antfu/utils': 8.1.0 + '@antfu/install-pkg': 0.4.1 + '@antfu/utils': 0.7.10 '@iconify/types': 2.0.0 - debug: 4.4.0 - globals: 15.14.0 + debug: 4.3.7 kolorist: 1.8.0 - local-pkg: 1.0.0 - mlly: 1.7.4 + local-pkg: 0.5.1 + mlly: 1.7.3 transitivePeerDependencies: - supports-color - '@img/sharp-darwin-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.0.4 - optional: true - - '@img/sharp-darwin-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.0.4 - optional: true - - '@img/sharp-libvips-darwin-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-darwin-x64@1.0.4': - optional: true - - '@img/sharp-libvips-linux-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-linux-arm@1.0.5': - optional: true - - '@img/sharp-libvips-linux-s390x@1.0.4': - optional: true - - '@img/sharp-libvips-linux-x64@1.0.4': - optional: true - - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - optional: true - - '@img/sharp-linux-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.0.4 - optional: true - - '@img/sharp-linux-arm@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.0.5 - optional: true - - '@img/sharp-linux-s390x@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.0.4 - optional: true - - '@img/sharp-linux-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.0.4 - optional: true - - '@img/sharp-linuxmusl-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - optional: true - - '@img/sharp-linuxmusl-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - optional: true - - '@img/sharp-wasm32@0.33.5': - dependencies: - '@emnapi/runtime': 1.3.1 - optional: true - - '@img/sharp-win32-ia32@0.33.5': - optional: true - - '@img/sharp-win32-x64@0.33.5': - optional: true - '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -8350,7 +9425,7 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@jridgewell/gen-mapping@0.3.8': + '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 @@ -8384,7 +9459,7 @@ snapshots: '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 - '@lezer/css@1.1.10': + '@lezer/css@1.1.9': dependencies: '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 @@ -8400,13 +9475,13 @@ snapshots: '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 - '@lezer/javascript@1.4.21': + '@lezer/javascript@1.4.20': dependencies: '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 - '@lezer/json@1.0.3': + '@lezer/json@1.0.2': dependencies: '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 @@ -8416,13 +9491,12 @@ snapshots: dependencies: '@lezer/common': 1.2.3 - '@lezer/markdown@1.4.1': + '@lezer/markdown@1.3.2': dependencies: '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 - '@marijn/buildtool': 0.1.6 - '@lezer/python@1.1.15': + '@lezer/python@1.1.14': dependencies: '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 @@ -8434,16 +9508,18 @@ snapshots: '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 - '@marijn/buildtool@0.1.6': + '@malept/cross-spawn-promise@2.0.0': dependencies: - '@types/mocha': 9.1.1 - acorn: 8.14.0 - acorn-walk: 8.3.4 - rollup: 3.29.5 - rollup-plugin-dts: 5.3.1(rollup@3.29.5)(typescript@5.7.3) - typescript: 5.7.3 + cross-spawn: 7.0.6 - '@marijn/find-cluster-break@1.0.2': {} + '@malept/flatpak-bundler@0.4.0': + dependencies: + debug: 4.3.7 + fs-extra: 9.1.0 + lodash: 4.17.21 + tmp-promise: 3.0.3 + transitivePeerDependencies: + - supports-color '@mdx-js/mdx@2.3.0': dependencies: @@ -8482,11 +9558,16 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.0 + fastq: 1.17.1 + + '@npmcli/fs@2.1.2': + dependencies: + '@gar/promisify': 1.1.3 + semver: 7.6.3 '@npmcli/fs@3.1.1': dependencies: - semver: 7.7.1 + semver: 7.6.3 '@npmcli/git@4.1.0': dependencies: @@ -8496,11 +9577,16 @@ snapshots: proc-log: 3.0.0 promise-inflight: 1.0.1 promise-retry: 2.0.1 - semver: 7.7.1 + semver: 7.6.3 which: 3.0.1 transitivePeerDependencies: - bluebird + '@npmcli/move-file@2.0.1': + dependencies: + mkdirp: 1.0.4 + rimraf: 3.0.2 + '@npmcli/package-json@4.0.1': dependencies: '@npmcli/git': 4.1.0 @@ -8509,7 +9595,7 @@ snapshots: json-parse-even-better-errors: 3.0.2 normalize-package-data: 5.0.0 proc-log: 3.0.0 - semver: 7.7.1 + semver: 7.6.3 transitivePeerDependencies: - bluebird @@ -8517,67 +9603,66 @@ snapshots: dependencies: which: 3.0.1 - '@octokit/auth-token@5.1.2': {} + '@octokit/auth-token@5.1.1': {} - '@octokit/core@6.1.3': + '@octokit/core@6.1.2': dependencies: - '@octokit/auth-token': 5.1.2 - '@octokit/graphql': 8.2.0 - '@octokit/request': 9.2.0 - '@octokit/request-error': 6.1.6 - '@octokit/types': 13.8.0 + '@octokit/auth-token': 5.1.1 + '@octokit/graphql': 8.1.1 + '@octokit/request': 9.1.3 + '@octokit/request-error': 6.1.5 + '@octokit/types': 13.6.2 before-after-hook: 3.0.2 universal-user-agent: 7.0.2 - '@octokit/endpoint@10.1.2': + '@octokit/endpoint@10.1.1': dependencies: - '@octokit/types': 13.8.0 + '@octokit/types': 13.6.2 universal-user-agent: 7.0.2 - '@octokit/graphql@8.2.0': + '@octokit/graphql@8.1.1': dependencies: - '@octokit/request': 9.2.0 - '@octokit/types': 13.8.0 + '@octokit/request': 9.1.3 + '@octokit/types': 13.6.2 universal-user-agent: 7.0.2 - '@octokit/openapi-types@23.0.1': {} + '@octokit/openapi-types@22.2.0': {} - '@octokit/plugin-paginate-rest@11.4.0(@octokit/core@6.1.3)': + '@octokit/plugin-paginate-rest@11.3.6(@octokit/core@6.1.2)': dependencies: - '@octokit/core': 6.1.3 - '@octokit/types': 13.8.0 + '@octokit/core': 6.1.2 + '@octokit/types': 13.6.2 - '@octokit/plugin-request-log@5.3.1(@octokit/core@6.1.3)': + '@octokit/plugin-request-log@5.3.1(@octokit/core@6.1.2)': dependencies: - '@octokit/core': 6.1.3 + '@octokit/core': 6.1.2 - '@octokit/plugin-rest-endpoint-methods@13.3.1(@octokit/core@6.1.3)': + '@octokit/plugin-rest-endpoint-methods@13.2.6(@octokit/core@6.1.2)': dependencies: - '@octokit/core': 6.1.3 - '@octokit/types': 13.8.0 + '@octokit/core': 6.1.2 + '@octokit/types': 13.6.2 - '@octokit/request-error@6.1.6': + '@octokit/request-error@6.1.5': dependencies: - '@octokit/types': 13.8.0 + '@octokit/types': 13.6.2 - '@octokit/request@9.2.0': + '@octokit/request@9.1.3': dependencies: - '@octokit/endpoint': 10.1.2 - '@octokit/request-error': 6.1.6 - '@octokit/types': 13.8.0 - fast-content-type-parse: 2.0.1 + '@octokit/endpoint': 10.1.1 + '@octokit/request-error': 6.1.5 + '@octokit/types': 13.6.2 universal-user-agent: 7.0.2 - '@octokit/rest@21.1.0': + '@octokit/rest@21.0.2': dependencies: - '@octokit/core': 6.1.3 - '@octokit/plugin-paginate-rest': 11.4.0(@octokit/core@6.1.3) - '@octokit/plugin-request-log': 5.3.1(@octokit/core@6.1.3) - '@octokit/plugin-rest-endpoint-methods': 13.3.1(@octokit/core@6.1.3) + '@octokit/core': 6.1.2 + '@octokit/plugin-paginate-rest': 11.3.6(@octokit/core@6.1.2) + '@octokit/plugin-request-log': 5.3.1(@octokit/core@6.1.2) + '@octokit/plugin-rest-endpoint-methods': 13.2.6(@octokit/core@6.1.2) - '@octokit/types@13.8.0': + '@octokit/types@13.6.2': dependencies: - '@octokit/openapi-types': 23.0.1 + '@octokit/openapi-types': 22.2.0 '@openrouter/ai-sdk-provider@0.0.5(zod@3.24.1)': dependencies: @@ -8601,439 +9686,596 @@ snapshots: '@radix-ui/number@1.1.0': {} + '@radix-ui/primitive@1.1.0': {} + '@radix-ui/primitive@1.1.1': {} - '@radix-ui/react-arrow@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-arrow@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 - '@radix-ui/react-collapsible@1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-arrow@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-collapsible@1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 - '@radix-ui/react-collection@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-collection@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 - '@radix-ui/react-compose-refs@1.1.1(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-collection@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.12 - '@radix-ui/react-context-menu@2.2.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-compose-refs@1.1.1(@types/react@18.3.12)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-context-menu@2.2.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-menu': 2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-context@1.1.0(@types/react@18.3.12)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-context@1.1.1(@types/react@18.3.12)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-dialog@1.1.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-menu': 2.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-context@1.1.1(@types/react@18.3.18)(react@18.3.1)': - dependencies: - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.18 - - '@radix-ui/react-dialog@1.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.6.3(@types/react@18.3.18)(react@18.3.1) + react-remove-scroll: 2.6.3(@types/react@18.3.12)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 - '@radix-ui/react-direction@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-direction@1.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.12 - '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dismissable-layer@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 - '@radix-ui/react-dropdown-menu@2.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dropdown-menu@2.1.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-menu': 2.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-menu': 2.1.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 - '@radix-ui/react-focus-guards@1.1.1(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-focus-guards@1.1.1(@types/react@18.3.12)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.12 - '@radix-ui/react-focus-scope@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 - '@radix-ui/react-id@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-focus-scope@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.18 - - '@radix-ui/react-label@2.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 - '@radix-ui/react-menu@2.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-id@1.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-label@2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-menu@2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.6.3(@types/react@18.3.18)(react@18.3.1) + react-remove-scroll: 2.6.0(@types/react@18.3.12)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 - '@radix-ui/react-popover@1.1.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-menu@2.1.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.6.3(@types/react@18.3.18)(react@18.3.1) + react-remove-scroll: 2.6.3(@types/react@18.3.12)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 - '@radix-ui/react-popper@1.2.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-popover@1.1.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + aria-hidden: 1.2.4 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.6.3(@types/react@18.3.12)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-popper@1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-arrow': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-arrow': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.12)(react@18.3.1) '@radix-ui/rect': 1.1.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 - '@radix-ui/react-portal@1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-popper@1.2.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-arrow': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/rect': 1.1.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 - '@radix-ui/react-presence@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-portal@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 - '@radix-ui/react-primitive@2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-portal@1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 - '@radix-ui/react-progress@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-presence@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 - '@radix-ui/react-roving-focus@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-presence@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-primitive@2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-slot': 1.1.2(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-progress@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-roving-focus@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 - '@radix-ui/react-scroll-area@1.2.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-scroll-area@1.2.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/number': 1.1.0 '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 - '@radix-ui/react-separator@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-separator@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 - '@radix-ui/react-slot@1.1.2(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-slot@1.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.12 - '@radix-ui/react-switch@1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-slot@1.1.2(@types/react@18.3.12)(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-switch@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-tabs@1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 - '@radix-ui/react-tabs@1.1.3(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-tooltip@1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 - '@radix-ui/react-tooltip@1.1.8(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) - - '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.12 - '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.12 - '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.12 - '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.12 - '@radix-ui/react-use-previous@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-use-previous@1.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.12 - '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: '@radix-ui/rect': 1.1.0 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.12 - '@radix-ui/react-use-size@1.1.0(@types/react@18.3.18)(react@18.3.1)': + '@radix-ui/react-use-size@1.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.12 - '@radix-ui/react-visually-hidden@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 '@radix-ui/rect@1.1.0': {} - '@react-aria/focus@3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/focus@3.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) '@swc/helpers': 0.5.15 clsx: 2.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@react-aria/interactions@3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/interactions@3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-aria/utils': 3.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/flags': 3.1.0 + '@react-types/shared': 3.28.0(react@18.3.1) '@swc/helpers': 0.5.15 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -9043,11 +10285,12 @@ snapshots: '@swc/helpers': 0.5.15 react: 18.3.1 - '@react-aria/utils@3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/utils@3.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-aria/ssr': 3.9.7(react@18.3.1) + '@react-stately/flags': 3.1.0 '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) + '@react-types/shared': 3.28.0(react@18.3.1) '@swc/helpers': 0.5.15 clsx: 2.1.1 react: 18.3.1 @@ -9059,60 +10302,64 @@ snapshots: '@react-dnd/shallowequal@4.0.2': {} + '@react-stately/flags@3.1.0': + dependencies: + '@swc/helpers': 0.5.15 + '@react-stately/utils@3.10.5(react@18.3.1)': dependencies: '@swc/helpers': 0.5.15 react: 18.3.1 - '@react-types/shared@3.27.0(react@18.3.1)': + '@react-types/shared@3.28.0(react@18.3.1)': dependencies: react: 18.3.1 - '@remix-run/cloudflare-pages@2.15.3(@cloudflare/workers-types@4.20250204.0)(typescript@5.7.3)': + '@remix-run/cloudflare-pages@2.16.0(@cloudflare/workers-types@4.20241127.0)(typescript@5.7.2)': dependencies: - '@cloudflare/workers-types': 4.20250204.0 - '@remix-run/cloudflare': 2.15.3(@cloudflare/workers-types@4.20250204.0)(typescript@5.7.3) + '@cloudflare/workers-types': 4.20241127.0 + '@remix-run/cloudflare': 2.16.0(@cloudflare/workers-types@4.20241127.0)(typescript@5.7.2) optionalDependencies: - typescript: 5.7.3 + typescript: 5.7.2 - '@remix-run/cloudflare@2.15.3(@cloudflare/workers-types@4.20250204.0)(typescript@5.7.3)': + '@remix-run/cloudflare@2.16.0(@cloudflare/workers-types@4.20241127.0)(typescript@5.7.2)': dependencies: '@cloudflare/kv-asset-handler': 0.1.3 - '@cloudflare/workers-types': 4.20250204.0 - '@remix-run/server-runtime': 2.15.3(typescript@5.7.3) + '@cloudflare/workers-types': 4.20241127.0 + '@remix-run/server-runtime': 2.16.0(typescript@5.7.2) optionalDependencies: - typescript: 5.7.3 + typescript: 5.7.2 - '@remix-run/dev@2.15.3(@remix-run/react@2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@types/node@22.13.1)(sass-embedded@1.83.4)(typescript@5.7.3)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4))(wrangler@3.108.0(@cloudflare/workers-types@4.20250204.0))': + '@remix-run/dev@2.16.0(@remix-run/react@2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2))(@remix-run/serve@2.16.0(typescript@5.7.2))(@types/node@22.10.1)(sass-embedded@1.81.0)(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0))(wrangler@3.91.0(@cloudflare/workers-types@4.20241127.0))': dependencies: - '@babel/core': 7.26.8 - '@babel/generator': 7.26.8 - '@babel/parser': 7.26.8 - '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.8) - '@babel/preset-typescript': 7.26.0(@babel/core@7.26.8) - '@babel/traverse': 7.26.8 - '@babel/types': 7.26.8 + '@babel/core': 7.26.0 + '@babel/generator': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 '@mdx-js/mdx': 2.3.0 '@npmcli/package-json': 4.0.1 - '@remix-run/node': 2.15.3(typescript@5.7.3) - '@remix-run/react': 2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) - '@remix-run/router': 1.22.0 - '@remix-run/server-runtime': 2.15.3(typescript@5.7.3) + '@remix-run/node': 2.16.0(typescript@5.7.2) + '@remix-run/react': 2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2) + '@remix-run/router': 1.23.0 + '@remix-run/server-runtime': 2.16.0(typescript@5.7.2) '@types/mdx': 2.0.13 - '@vanilla-extract/integration': 6.5.0(@types/node@22.13.1)(sass-embedded@1.83.4) + '@vanilla-extract/integration': 6.5.0(@types/node@22.10.1)(sass-embedded@1.81.0) arg: 5.0.2 cacache: 17.1.4 chalk: 4.1.2 chokidar: 3.6.0 cross-spawn: 7.0.6 dotenv: 16.4.7 - es-module-lexer: 1.6.0 + es-module-lexer: 1.5.4 esbuild: 0.17.6 esbuild-plugins-node-modules-polyfill: 1.6.8(esbuild@0.17.6) execa: 5.1.1 exit-hook: 2.2.1 - express: 4.21.2 + express: 4.21.1 fs-extra: 10.1.0 get-port: 5.1.1 gunzip-maybe: 1.4.2 @@ -9122,29 +10369,31 @@ snapshots: lodash.debounce: 4.0.8 minimatch: 9.0.5 ora: 5.4.1 + pathe: 1.1.2 picocolors: 1.1.1 picomatch: 2.3.1 pidtree: 0.6.0 - postcss: 8.5.2 - postcss-discard-duplicates: 5.1.0(postcss@8.5.2) - postcss-load-config: 4.0.2(postcss@8.5.2) - postcss-modules: 6.0.1(postcss@8.5.2) + postcss: 8.4.49 + postcss-discard-duplicates: 5.1.0(postcss@8.4.49) + postcss-load-config: 4.0.2(postcss@8.4.49) + postcss-modules: 6.0.1(postcss@8.4.49) prettier: 2.8.8 pretty-ms: 7.0.1 react-refresh: 0.14.2 remark-frontmatter: 4.0.1 remark-mdx-frontmatter: 1.1.1 - semver: 7.7.1 + semver: 7.6.3 set-cookie-parser: 2.7.1 - tar-fs: 2.1.2 + tar-fs: 2.1.1 tsconfig-paths: 4.2.0 - valibot: 0.41.0(typescript@5.7.3) - vite-node: 1.6.1(@types/node@22.13.1)(sass-embedded@1.83.4) + valibot: 0.41.0(typescript@5.7.2) + vite-node: 3.0.0-beta.2(@types/node@22.10.1)(sass-embedded@1.81.0) ws: 7.5.10 optionalDependencies: - typescript: 5.7.3 - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) - wrangler: 3.108.0(@cloudflare/workers-types@4.20250204.0) + '@remix-run/serve': 2.16.0(typescript@5.7.2) + typescript: 5.7.2 + vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) + wrangler: 3.91.0(@cloudflare/workers-types@4.20241127.0) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -9161,33 +10410,68 @@ snapshots: - ts-node - utf-8-validate - '@remix-run/node@2.15.3(typescript@5.7.3)': + '@remix-run/express@2.16.0(express@4.21.1)(typescript@5.7.2)': dependencies: - '@remix-run/server-runtime': 2.15.3(typescript@5.7.3) + '@remix-run/node': 2.16.0(typescript@5.7.2) + express: 4.21.1 + optionalDependencies: + typescript: 5.7.2 + + '@remix-run/node@2.15.3(typescript@5.7.2)': + dependencies: + '@remix-run/server-runtime': 2.15.3(typescript@5.7.2) '@remix-run/web-fetch': 4.4.2 '@web3-storage/multipart-parser': 1.0.0 cookie-signature: 1.2.2 source-map-support: 0.5.21 stream-slice: 0.1.2 - undici: 6.21.1 + undici: 6.21.0 optionalDependencies: - typescript: 5.7.3 + typescript: 5.7.2 - '@remix-run/react@2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3)': + '@remix-run/node@2.16.0(typescript@5.7.2)': dependencies: - '@remix-run/router': 1.22.0 - '@remix-run/server-runtime': 2.15.3(typescript@5.7.3) + '@remix-run/server-runtime': 2.16.0(typescript@5.7.2) + '@remix-run/web-fetch': 4.4.2 + '@web3-storage/multipart-parser': 1.0.0 + cookie-signature: 1.2.2 + source-map-support: 0.5.21 + stream-slice: 0.1.2 + undici: 6.21.0 + optionalDependencies: + typescript: 5.7.2 + + '@remix-run/react@2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2)': + dependencies: + '@remix-run/router': 1.23.0 + '@remix-run/server-runtime': 2.16.0(typescript@5.7.2) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-router: 6.29.0(react@18.3.1) - react-router-dom: 6.29.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-router: 6.30.0(react@18.3.1) + react-router-dom: 6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) turbo-stream: 2.4.0 optionalDependencies: - typescript: 5.7.3 + typescript: 5.7.2 '@remix-run/router@1.22.0': {} - '@remix-run/server-runtime@2.15.3(typescript@5.7.3)': + '@remix-run/router@1.23.0': {} + + '@remix-run/serve@2.16.0(typescript@5.7.2)': + dependencies: + '@remix-run/express': 2.16.0(express@4.21.1)(typescript@5.7.2) + '@remix-run/node': 2.16.0(typescript@5.7.2) + chokidar: 3.6.0 + compression: 1.8.0 + express: 4.21.1 + get-port: 5.1.1 + morgan: 1.10.0 + source-map-support: 0.5.21 + transitivePeerDependencies: + - supports-color + - typescript + + '@remix-run/server-runtime@2.15.3(typescript@5.7.2)': dependencies: '@remix-run/router': 1.22.0 '@types/cookie': 0.6.0 @@ -9197,7 +10481,19 @@ snapshots: source-map: 0.7.4 turbo-stream: 2.4.0 optionalDependencies: - typescript: 5.7.3 + typescript: 5.7.2 + + '@remix-run/server-runtime@2.16.0(typescript@5.7.2)': + dependencies: + '@remix-run/router': 1.23.0 + '@types/cookie': 0.6.0 + '@web3-storage/multipart-parser': 1.0.0 + cookie: 0.6.0 + set-cookie-parser: 2.7.1 + source-map: 0.7.4 + turbo-stream: 2.4.0 + optionalDependencies: + typescript: 5.7.2 '@remix-run/web-blob@3.1.0': dependencies: @@ -9227,330 +10523,321 @@ snapshots: dependencies: web-streams-polyfill: 3.3.3 - '@rollup/plugin-inject@5.0.5(rollup@3.29.5)': + '@rollup/plugin-inject@5.0.5(rollup@4.28.0)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@3.29.5) + '@rollup/pluginutils': 5.1.3(rollup@4.28.0) estree-walker: 2.0.2 - magic-string: 0.30.17 + magic-string: 0.30.14 optionalDependencies: - rollup: 3.29.5 + rollup: 4.28.0 - '@rollup/pluginutils@5.1.4(rollup@3.29.5)': + '@rollup/pluginutils@5.1.3(rollup@4.28.0)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 3.29.5 + rollup: 4.28.0 - '@rollup/rollup-android-arm-eabi@4.34.6': + '@rollup/rollup-android-arm-eabi@4.28.0': optional: true - '@rollup/rollup-android-arm64@4.34.6': + '@rollup/rollup-android-arm64@4.28.0': optional: true - '@rollup/rollup-darwin-arm64@4.34.6': + '@rollup/rollup-darwin-arm64@4.28.0': optional: true - '@rollup/rollup-darwin-x64@4.34.6': + '@rollup/rollup-darwin-x64@4.28.0': optional: true - '@rollup/rollup-freebsd-arm64@4.34.6': + '@rollup/rollup-freebsd-arm64@4.28.0': optional: true - '@rollup/rollup-freebsd-x64@4.34.6': + '@rollup/rollup-freebsd-x64@4.28.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.34.6': + '@rollup/rollup-linux-arm-gnueabihf@4.28.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.34.6': + '@rollup/rollup-linux-arm-musleabihf@4.28.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.34.6': + '@rollup/rollup-linux-arm64-gnu@4.28.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.34.6': + '@rollup/rollup-linux-arm64-musl@4.28.0': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.34.6': + '@rollup/rollup-linux-powerpc64le-gnu@4.28.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': + '@rollup/rollup-linux-riscv64-gnu@4.28.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.34.6': + '@rollup/rollup-linux-s390x-gnu@4.28.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.34.6': + '@rollup/rollup-linux-x64-gnu@4.28.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.34.6': + '@rollup/rollup-linux-x64-musl@4.28.0': optional: true - '@rollup/rollup-linux-x64-musl@4.34.6': + '@rollup/rollup-win32-arm64-msvc@4.28.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.34.6': + '@rollup/rollup-win32-ia32-msvc@4.28.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.34.6': + '@rollup/rollup-win32-x64-msvc@4.28.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.34.6': - optional: true - - '@shikijs/core@1.29.2': + '@shikijs/core@1.24.0': dependencies: - '@shikijs/engine-javascript': 1.29.2 - '@shikijs/engine-oniguruma': 1.29.2 - '@shikijs/types': 1.29.2 - '@shikijs/vscode-textmate': 10.0.1 + '@shikijs/engine-javascript': 1.24.0 + '@shikijs/engine-oniguruma': 1.24.0 + '@shikijs/types': 1.24.0 + '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 - hast-util-to-html: 9.0.4 + hast-util-to-html: 9.0.3 - '@shikijs/engine-javascript@1.29.2': + '@shikijs/engine-javascript@1.24.0': dependencies: - '@shikijs/types': 1.29.2 - '@shikijs/vscode-textmate': 10.0.1 - oniguruma-to-es: 2.3.0 + '@shikijs/types': 1.24.0 + '@shikijs/vscode-textmate': 9.3.0 + oniguruma-to-es: 0.7.0 - '@shikijs/engine-oniguruma@1.29.2': + '@shikijs/engine-oniguruma@1.24.0': dependencies: - '@shikijs/types': 1.29.2 - '@shikijs/vscode-textmate': 10.0.1 + '@shikijs/types': 1.24.0 + '@shikijs/vscode-textmate': 9.3.0 - '@shikijs/langs@1.29.2': + '@shikijs/types@1.24.0': dependencies: - '@shikijs/types': 1.29.2 - - '@shikijs/themes@1.29.2': - dependencies: - '@shikijs/types': 1.29.2 - - '@shikijs/types@1.29.2': - dependencies: - '@shikijs/vscode-textmate': 10.0.1 + '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 - '@shikijs/vscode-textmate@10.0.1': {} + '@shikijs/vscode-textmate@9.3.0': {} - '@smithy/abort-controller@4.0.1': + '@sindresorhus/is@4.6.0': {} + + '@smithy/abort-controller@3.1.9': dependencies: - '@smithy/types': 4.1.0 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@smithy/config-resolver@4.0.1': + '@smithy/config-resolver@3.0.13': dependencies: - '@smithy/node-config-provider': 4.0.1 - '@smithy/types': 4.1.0 - '@smithy/util-config-provider': 4.0.0 - '@smithy/util-middleware': 4.0.1 + '@smithy/node-config-provider': 3.1.12 + '@smithy/types': 3.7.2 + '@smithy/util-config-provider': 3.0.0 + '@smithy/util-middleware': 3.0.11 tslib: 2.8.1 - '@smithy/core@3.1.2': + '@smithy/core@2.5.6': dependencies: - '@smithy/middleware-serde': 4.0.2 - '@smithy/protocol-http': 5.0.1 - '@smithy/types': 4.1.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-middleware': 4.0.1 - '@smithy/util-stream': 4.0.2 - '@smithy/util-utf8': 4.0.0 + '@smithy/middleware-serde': 3.0.11 + '@smithy/protocol-http': 4.1.8 + '@smithy/types': 3.7.2 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-middleware': 3.0.11 + '@smithy/util-stream': 3.3.3 + '@smithy/util-utf8': 3.0.0 tslib: 2.8.1 - '@smithy/credential-provider-imds@4.0.1': + '@smithy/credential-provider-imds@3.2.8': dependencies: - '@smithy/node-config-provider': 4.0.1 - '@smithy/property-provider': 4.0.1 - '@smithy/types': 4.1.0 - '@smithy/url-parser': 4.0.1 + '@smithy/node-config-provider': 3.1.12 + '@smithy/property-provider': 3.1.11 + '@smithy/types': 3.7.2 + '@smithy/url-parser': 3.0.11 tslib: 2.8.1 - '@smithy/eventstream-codec@4.0.1': + '@smithy/eventstream-codec@3.1.10': dependencies: '@aws-crypto/crc32': 5.2.0 - '@smithy/types': 4.1.0 - '@smithy/util-hex-encoding': 4.0.0 + '@smithy/types': 3.7.2 + '@smithy/util-hex-encoding': 3.0.0 tslib: 2.8.1 - '@smithy/eventstream-serde-browser@4.0.1': + '@smithy/eventstream-serde-browser@3.0.14': dependencies: - '@smithy/eventstream-serde-universal': 4.0.1 - '@smithy/types': 4.1.0 + '@smithy/eventstream-serde-universal': 3.0.13 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@smithy/eventstream-serde-config-resolver@4.0.1': + '@smithy/eventstream-serde-config-resolver@3.0.11': dependencies: - '@smithy/types': 4.1.0 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@smithy/eventstream-serde-node@4.0.1': + '@smithy/eventstream-serde-node@3.0.13': dependencies: - '@smithy/eventstream-serde-universal': 4.0.1 - '@smithy/types': 4.1.0 + '@smithy/eventstream-serde-universal': 3.0.13 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@smithy/eventstream-serde-universal@4.0.1': + '@smithy/eventstream-serde-universal@3.0.13': dependencies: - '@smithy/eventstream-codec': 4.0.1 - '@smithy/types': 4.1.0 + '@smithy/eventstream-codec': 3.1.10 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@smithy/fetch-http-handler@5.0.1': + '@smithy/fetch-http-handler@4.1.2': dependencies: - '@smithy/protocol-http': 5.0.1 - '@smithy/querystring-builder': 4.0.1 - '@smithy/types': 4.1.0 - '@smithy/util-base64': 4.0.0 + '@smithy/protocol-http': 4.1.8 + '@smithy/querystring-builder': 3.0.11 + '@smithy/types': 3.7.2 + '@smithy/util-base64': 3.0.0 tslib: 2.8.1 - '@smithy/hash-node@4.0.1': + '@smithy/hash-node@3.0.11': dependencies: - '@smithy/types': 4.1.0 - '@smithy/util-buffer-from': 4.0.0 - '@smithy/util-utf8': 4.0.0 + '@smithy/types': 3.7.2 + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-utf8': 3.0.0 tslib: 2.8.1 - '@smithy/invalid-dependency@4.0.1': + '@smithy/invalid-dependency@3.0.11': dependencies: - '@smithy/types': 4.1.0 + '@smithy/types': 3.7.2 tslib: 2.8.1 '@smithy/is-array-buffer@2.2.0': dependencies: tslib: 2.8.1 - '@smithy/is-array-buffer@4.0.0': + '@smithy/is-array-buffer@3.0.0': dependencies: tslib: 2.8.1 - '@smithy/middleware-content-length@4.0.1': + '@smithy/middleware-content-length@3.0.13': dependencies: - '@smithy/protocol-http': 5.0.1 - '@smithy/types': 4.1.0 + '@smithy/protocol-http': 4.1.8 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@smithy/middleware-endpoint@4.0.3': + '@smithy/middleware-endpoint@3.2.7': dependencies: - '@smithy/core': 3.1.2 - '@smithy/middleware-serde': 4.0.2 - '@smithy/node-config-provider': 4.0.1 - '@smithy/shared-ini-file-loader': 4.0.1 - '@smithy/types': 4.1.0 - '@smithy/url-parser': 4.0.1 - '@smithy/util-middleware': 4.0.1 + '@smithy/core': 2.5.6 + '@smithy/middleware-serde': 3.0.11 + '@smithy/node-config-provider': 3.1.12 + '@smithy/shared-ini-file-loader': 3.1.12 + '@smithy/types': 3.7.2 + '@smithy/url-parser': 3.0.11 + '@smithy/util-middleware': 3.0.11 tslib: 2.8.1 - '@smithy/middleware-retry@4.0.4': + '@smithy/middleware-retry@3.0.32': dependencies: - '@smithy/node-config-provider': 4.0.1 - '@smithy/protocol-http': 5.0.1 - '@smithy/service-error-classification': 4.0.1 - '@smithy/smithy-client': 4.1.3 - '@smithy/types': 4.1.0 - '@smithy/util-middleware': 4.0.1 - '@smithy/util-retry': 4.0.1 + '@smithy/node-config-provider': 3.1.12 + '@smithy/protocol-http': 4.1.8 + '@smithy/service-error-classification': 3.0.11 + '@smithy/smithy-client': 3.5.2 + '@smithy/types': 3.7.2 + '@smithy/util-middleware': 3.0.11 + '@smithy/util-retry': 3.0.11 tslib: 2.8.1 uuid: 9.0.1 - '@smithy/middleware-serde@4.0.2': + '@smithy/middleware-serde@3.0.11': dependencies: - '@smithy/types': 4.1.0 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@smithy/middleware-stack@4.0.1': + '@smithy/middleware-stack@3.0.11': dependencies: - '@smithy/types': 4.1.0 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@smithy/node-config-provider@4.0.1': + '@smithy/node-config-provider@3.1.12': dependencies: - '@smithy/property-provider': 4.0.1 - '@smithy/shared-ini-file-loader': 4.0.1 - '@smithy/types': 4.1.0 + '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@smithy/node-http-handler@4.0.2': + '@smithy/node-http-handler@3.3.3': dependencies: - '@smithy/abort-controller': 4.0.1 - '@smithy/protocol-http': 5.0.1 - '@smithy/querystring-builder': 4.0.1 - '@smithy/types': 4.1.0 + '@smithy/abort-controller': 3.1.9 + '@smithy/protocol-http': 4.1.8 + '@smithy/querystring-builder': 3.0.11 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@smithy/property-provider@4.0.1': + '@smithy/property-provider@3.1.11': dependencies: - '@smithy/types': 4.1.0 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@smithy/protocol-http@5.0.1': + '@smithy/protocol-http@4.1.8': dependencies: - '@smithy/types': 4.1.0 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@smithy/querystring-builder@4.0.1': + '@smithy/querystring-builder@3.0.11': dependencies: - '@smithy/types': 4.1.0 - '@smithy/util-uri-escape': 4.0.0 + '@smithy/types': 3.7.2 + '@smithy/util-uri-escape': 3.0.0 tslib: 2.8.1 - '@smithy/querystring-parser@4.0.1': + '@smithy/querystring-parser@3.0.11': dependencies: - '@smithy/types': 4.1.0 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@smithy/service-error-classification@4.0.1': + '@smithy/service-error-classification@3.0.11': dependencies: - '@smithy/types': 4.1.0 + '@smithy/types': 3.7.2 - '@smithy/shared-ini-file-loader@4.0.1': + '@smithy/shared-ini-file-loader@3.1.12': dependencies: - '@smithy/types': 4.1.0 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@smithy/signature-v4@5.0.1': + '@smithy/signature-v4@4.2.4': dependencies: - '@smithy/is-array-buffer': 4.0.0 - '@smithy/protocol-http': 5.0.1 - '@smithy/types': 4.1.0 - '@smithy/util-hex-encoding': 4.0.0 - '@smithy/util-middleware': 4.0.1 - '@smithy/util-uri-escape': 4.0.0 - '@smithy/util-utf8': 4.0.0 + '@smithy/is-array-buffer': 3.0.0 + '@smithy/protocol-http': 4.1.8 + '@smithy/types': 3.7.2 + '@smithy/util-hex-encoding': 3.0.0 + '@smithy/util-middleware': 3.0.11 + '@smithy/util-uri-escape': 3.0.0 + '@smithy/util-utf8': 3.0.0 tslib: 2.8.1 - '@smithy/smithy-client@4.1.3': + '@smithy/smithy-client@3.5.2': dependencies: - '@smithy/core': 3.1.2 - '@smithy/middleware-endpoint': 4.0.3 - '@smithy/middleware-stack': 4.0.1 - '@smithy/protocol-http': 5.0.1 - '@smithy/types': 4.1.0 - '@smithy/util-stream': 4.0.2 + '@smithy/core': 2.5.6 + '@smithy/middleware-endpoint': 3.2.7 + '@smithy/middleware-stack': 3.0.11 + '@smithy/protocol-http': 4.1.8 + '@smithy/types': 3.7.2 + '@smithy/util-stream': 3.3.3 tslib: 2.8.1 - '@smithy/types@4.1.0': + '@smithy/types@3.7.2': dependencies: tslib: 2.8.1 - '@smithy/url-parser@4.0.1': + '@smithy/url-parser@3.0.11': dependencies: - '@smithy/querystring-parser': 4.0.1 - '@smithy/types': 4.1.0 + '@smithy/querystring-parser': 3.0.11 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@smithy/util-base64@4.0.0': + '@smithy/util-base64@3.0.0': dependencies: - '@smithy/util-buffer-from': 4.0.0 - '@smithy/util-utf8': 4.0.0 + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-utf8': 3.0.0 tslib: 2.8.1 - '@smithy/util-body-length-browser@4.0.0': + '@smithy/util-body-length-browser@3.0.0': dependencies: tslib: 2.8.1 - '@smithy/util-body-length-node@4.0.0': + '@smithy/util-body-length-node@3.0.0': dependencies: tslib: 2.8.1 @@ -9559,66 +10846,66 @@ snapshots: '@smithy/is-array-buffer': 2.2.0 tslib: 2.8.1 - '@smithy/util-buffer-from@4.0.0': + '@smithy/util-buffer-from@3.0.0': dependencies: - '@smithy/is-array-buffer': 4.0.0 + '@smithy/is-array-buffer': 3.0.0 tslib: 2.8.1 - '@smithy/util-config-provider@4.0.0': + '@smithy/util-config-provider@3.0.0': dependencies: tslib: 2.8.1 - '@smithy/util-defaults-mode-browser@4.0.4': + '@smithy/util-defaults-mode-browser@3.0.32': dependencies: - '@smithy/property-provider': 4.0.1 - '@smithy/smithy-client': 4.1.3 - '@smithy/types': 4.1.0 + '@smithy/property-provider': 3.1.11 + '@smithy/smithy-client': 3.5.2 + '@smithy/types': 3.7.2 bowser: 2.11.0 tslib: 2.8.1 - '@smithy/util-defaults-mode-node@4.0.4': + '@smithy/util-defaults-mode-node@3.0.32': dependencies: - '@smithy/config-resolver': 4.0.1 - '@smithy/credential-provider-imds': 4.0.1 - '@smithy/node-config-provider': 4.0.1 - '@smithy/property-provider': 4.0.1 - '@smithy/smithy-client': 4.1.3 - '@smithy/types': 4.1.0 + '@smithy/config-resolver': 3.0.13 + '@smithy/credential-provider-imds': 3.2.8 + '@smithy/node-config-provider': 3.1.12 + '@smithy/property-provider': 3.1.11 + '@smithy/smithy-client': 3.5.2 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@smithy/util-endpoints@3.0.1': + '@smithy/util-endpoints@2.1.7': dependencies: - '@smithy/node-config-provider': 4.0.1 - '@smithy/types': 4.1.0 + '@smithy/node-config-provider': 3.1.12 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@smithy/util-hex-encoding@4.0.0': + '@smithy/util-hex-encoding@3.0.0': dependencies: tslib: 2.8.1 - '@smithy/util-middleware@4.0.1': + '@smithy/util-middleware@3.0.11': dependencies: - '@smithy/types': 4.1.0 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@smithy/util-retry@4.0.1': + '@smithy/util-retry@3.0.11': dependencies: - '@smithy/service-error-classification': 4.0.1 - '@smithy/types': 4.1.0 + '@smithy/service-error-classification': 3.0.11 + '@smithy/types': 3.7.2 tslib: 2.8.1 - '@smithy/util-stream@4.0.2': + '@smithy/util-stream@3.3.3': dependencies: - '@smithy/fetch-http-handler': 5.0.1 - '@smithy/node-http-handler': 4.0.2 - '@smithy/types': 4.1.0 - '@smithy/util-base64': 4.0.0 - '@smithy/util-buffer-from': 4.0.0 - '@smithy/util-hex-encoding': 4.0.0 - '@smithy/util-utf8': 4.0.0 + '@smithy/fetch-http-handler': 4.1.2 + '@smithy/node-http-handler': 3.3.3 + '@smithy/types': 3.7.2 + '@smithy/util-base64': 3.0.0 + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-hex-encoding': 3.0.0 + '@smithy/util-utf8': 3.0.0 tslib: 2.8.1 - '@smithy/util-uri-escape@4.0.0': + '@smithy/util-uri-escape@3.0.0': dependencies: tslib: 2.8.1 @@ -9627,15 +10914,15 @@ snapshots: '@smithy/util-buffer-from': 2.2.0 tslib: 2.8.1 - '@smithy/util-utf8@4.0.0': + '@smithy/util-utf8@3.0.0': dependencies: - '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-buffer-from': 3.0.0 tslib: 2.8.1 - '@stylistic/eslint-plugin-ts@2.13.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3)': + '@stylistic/eslint-plugin-ts@2.11.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2)': dependencies: - '@typescript-eslint/utils': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) - eslint: 9.20.1(jiti@1.21.7) + '@typescript-eslint/utils': 8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) + eslint: 9.16.0(jiti@1.21.6) eslint-visitor-keys: 4.2.0 espree: 10.3.0 transitivePeerDependencies: @@ -9646,18 +10933,22 @@ snapshots: dependencies: tslib: 2.8.1 - '@tanstack/react-virtual@3.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@szmarczak/http-timer@4.0.6': dependencies: - '@tanstack/virtual-core': 3.13.0 + defer-to-connect: 2.0.1 + + '@tanstack/react-virtual@3.13.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@tanstack/virtual-core': 3.13.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@tanstack/virtual-core@3.13.0': {} + '@tanstack/virtual-core@3.13.2': {} '@testing-library/dom@10.4.0': dependencies: '@babel/code-frame': 7.26.2 - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.0 '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 @@ -9675,15 +10966,17 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 - '@testing-library/react@16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@testing-library/react@16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.0 '@testing-library/dom': 10.4.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 - '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@tootallnate/once@2.0.0': {} '@types/acorn@4.0.6': dependencies: @@ -9693,30 +10986,37 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.26.8 - '@babel/types': 7.26.8 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.26.8 + '@babel/types': 7.26.0 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.26.8 - '@babel/types': 7.26.8 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.26.8 + '@babel/types': 7.26.0 + + '@types/cacheable-request@6.0.3': + dependencies: + '@types/http-cache-semantics': 4.0.4 + '@types/keyv': 3.1.4 + '@types/node': 22.10.1 + '@types/responselike': 1.0.3 '@types/cookie@0.6.0': {} '@types/debug@4.1.12': dependencies: - '@types/ms': 2.1.0 + '@types/ms': 0.7.34 '@types/diff-match-patch@1.0.36': {} @@ -9724,6 +11024,18 @@ snapshots: '@types/dom-speech-recognition@0.0.4': {} + '@types/electron@1.6.12': + dependencies: + electron: 33.3.2 + transitivePeerDependencies: + - supports-color + + '@types/eslint@8.56.10': + dependencies: + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + optional: true + '@types/estree-jsx@1.0.5': dependencies: '@types/estree': 1.0.6 @@ -9732,7 +11044,9 @@ snapshots: '@types/file-saver@2.0.7': {} - '@types/gensync@1.0.4': {} + '@types/fs-extra@9.0.13': + dependencies: + '@types/node': 22.10.1 '@types/hast@2.3.10': dependencies: @@ -9744,13 +11058,19 @@ snapshots: '@types/hoist-non-react-statics@3.3.6': dependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.12 hoist-non-react-statics: 3.3.2 + '@types/http-cache-semantics@4.0.4': {} + '@types/js-cookie@3.0.6': {} '@types/json-schema@7.0.15': {} + '@types/keyv@3.1.4': + dependencies: + '@types/node': 22.10.1 + '@types/mdast@3.0.15': dependencies: '@types/unist': 2.0.11 @@ -9761,164 +11081,193 @@ snapshots: '@types/mdx@2.0.13': {} - '@types/mocha@9.1.1': {} + '@types/ms@0.7.34': {} - '@types/ms@2.1.0': {} + '@types/node-forge@1.3.11': + dependencies: + '@types/node': 22.10.1 - '@types/node@22.13.1': + '@types/node@20.17.16': + dependencies: + undici-types: 6.19.8 + + '@types/node@22.10.1': dependencies: undici-types: 6.20.0 '@types/path-browserify@1.0.3': {} - '@types/prop-types@15.7.14': {} + '@types/plist@3.0.5': + dependencies: + '@types/node': 22.10.1 + xmlbuilder: 15.1.1 + optional: true + + '@types/prop-types@15.7.13': {} '@types/raf@3.4.3': optional: true '@types/react-beautiful-dnd@13.1.8': dependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.12 - '@types/react-dom@18.3.5(@types/react@18.3.18)': + '@types/react-dom@18.3.1': dependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.12 '@types/react-redux@7.1.34': dependencies: '@types/hoist-non-react-statics': 3.3.6 - '@types/react': 18.3.18 + '@types/react': 18.3.12 hoist-non-react-statics: 3.3.2 redux: 4.2.1 - '@types/react@18.3.18': + '@types/react@18.3.12': dependencies: - '@types/prop-types': 15.7.14 + '@types/prop-types': 15.7.13 csstype: 3.1.3 + '@types/responselike@1.0.3': + dependencies: + '@types/node': 22.10.1 + '@types/unist@2.0.11': {} '@types/unist@3.0.3': {} '@types/uuid@9.0.8': {} - '@typescript-eslint/eslint-plugin@8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3))(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3)': + '@types/verror@1.10.10': + optional: true + + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 22.10.1 + optional: true + + '@typescript-eslint/eslint-plugin@8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2))(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.24.0 - '@typescript-eslint/type-utils': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.24.0 - eslint: 9.20.1(jiti@1.21.7) + '@typescript-eslint/parser': 8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) + '@typescript-eslint/scope-manager': 8.17.0 + '@typescript-eslint/type-utils': 8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) + '@typescript-eslint/utils': 8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.17.0 + eslint: 9.16.0(jiti@1.21.6) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + ts-api-utils: 1.4.3(typescript@5.7.2) + optionalDependencies: + typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3)': + '@typescript-eslint/parser@8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2)': dependencies: - '@typescript-eslint/scope-manager': 8.24.0 - '@typescript-eslint/types': 8.24.0 - '@typescript-eslint/typescript-estree': 8.24.0(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.24.0 - debug: 4.4.0 - eslint: 9.20.1(jiti@1.21.7) - typescript: 5.7.3 + '@typescript-eslint/scope-manager': 8.17.0 + '@typescript-eslint/types': 8.17.0 + '@typescript-eslint/typescript-estree': 8.17.0(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.17.0 + debug: 4.3.7 + eslint: 9.16.0(jiti@1.21.6) + optionalDependencies: + typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.24.0': + '@typescript-eslint/scope-manager@8.17.0': dependencies: - '@typescript-eslint/types': 8.24.0 - '@typescript-eslint/visitor-keys': 8.24.0 + '@typescript-eslint/types': 8.17.0 + '@typescript-eslint/visitor-keys': 8.17.0 - '@typescript-eslint/type-utils@8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2)': dependencies: - '@typescript-eslint/typescript-estree': 8.24.0(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) - debug: 4.4.0 - eslint: 9.20.1(jiti@1.21.7) - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + '@typescript-eslint/typescript-estree': 8.17.0(typescript@5.7.2) + '@typescript-eslint/utils': 8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) + debug: 4.3.7 + eslint: 9.16.0(jiti@1.21.6) + ts-api-utils: 1.4.3(typescript@5.7.2) + optionalDependencies: + typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.24.0': {} + '@typescript-eslint/types@8.17.0': {} - '@typescript-eslint/typescript-estree@8.24.0(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@8.17.0(typescript@5.7.2)': dependencies: - '@typescript-eslint/types': 8.24.0 - '@typescript-eslint/visitor-keys': 8.24.0 - debug: 4.4.0 - fast-glob: 3.3.3 + '@typescript-eslint/types': 8.17.0 + '@typescript-eslint/visitor-keys': 8.17.0 + debug: 4.3.7 + fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.1 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + semver: 7.6.3 + ts-api-utils: 1.4.3(typescript@5.7.2) + optionalDependencies: + typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3)': + '@typescript-eslint/utils@8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1(jiti@1.21.7)) - '@typescript-eslint/scope-manager': 8.24.0 - '@typescript-eslint/types': 8.24.0 - '@typescript-eslint/typescript-estree': 8.24.0(typescript@5.7.3) - eslint: 9.20.1(jiti@1.21.7) - typescript: 5.7.3 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@1.21.6)) + '@typescript-eslint/scope-manager': 8.17.0 + '@typescript-eslint/types': 8.17.0 + '@typescript-eslint/typescript-estree': 8.17.0(typescript@5.7.2) + eslint: 9.16.0(jiti@1.21.6) + optionalDependencies: + typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.24.0': + '@typescript-eslint/visitor-keys@8.17.0': dependencies: - '@typescript-eslint/types': 8.24.0 + '@typescript-eslint/types': 8.17.0 eslint-visitor-keys: 4.2.0 - '@uiw/codemirror-theme-vscode@4.23.8(@codemirror/language@6.10.8)(@codemirror/state@6.5.2)(@codemirror/view@6.36.2)': + '@uiw/codemirror-theme-vscode@4.23.6(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)': dependencies: - '@uiw/codemirror-themes': 4.23.8(@codemirror/language@6.10.8)(@codemirror/state@6.5.2)(@codemirror/view@6.36.2) + '@uiw/codemirror-themes': 4.23.6(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0) transitivePeerDependencies: - '@codemirror/language' - '@codemirror/state' - '@codemirror/view' - '@uiw/codemirror-themes@4.23.8(@codemirror/language@6.10.8)(@codemirror/state@6.5.2)(@codemirror/view@6.36.2)': + '@uiw/codemirror-themes@4.23.6(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)': dependencies: - '@codemirror/language': 6.10.8 - '@codemirror/state': 6.5.2 - '@codemirror/view': 6.36.2 + '@codemirror/language': 6.10.6 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.35.0 - '@ungap/structured-clone@1.3.0': {} + '@ungap/structured-clone@1.2.0': {} - '@unocss/astro@0.61.9(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4))': + '@unocss/astro@0.61.9(rollup@4.28.0)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0))': dependencies: '@unocss/core': 0.61.9 '@unocss/reset': 0.61.9 - '@unocss/vite': 0.61.9(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) + '@unocss/vite': 0.61.9(rollup@4.28.0)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)) optionalDependencies: - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) + vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) transitivePeerDependencies: - rollup - supports-color - '@unocss/cli@0.61.9(rollup@3.29.5)': + '@unocss/cli@0.61.9(rollup@4.28.0)': dependencies: '@ampproject/remapping': 2.3.0 - '@rollup/pluginutils': 5.1.4(rollup@3.29.5) + '@rollup/pluginutils': 5.1.3(rollup@4.28.0) '@unocss/config': 0.61.9 '@unocss/core': 0.61.9 '@unocss/preset-uno': 0.61.9 cac: 6.7.14 chokidar: 3.6.0 colorette: 2.0.20 - consola: 3.4.0 - fast-glob: 3.3.3 - magic-string: 0.30.17 + consola: 3.2.3 + fast-glob: 3.3.2 + magic-string: 0.30.14 pathe: 1.1.2 perfect-debounce: 1.0.0 transitivePeerDependencies: @@ -9945,15 +11294,15 @@ snapshots: gzip-size: 6.0.0 sirv: 2.0.4 - '@unocss/postcss@0.61.9(postcss@8.5.2)': + '@unocss/postcss@0.61.9(postcss@8.4.49)': dependencies: '@unocss/config': 0.61.9 '@unocss/core': 0.61.9 '@unocss/rule-utils': 0.61.9 css-tree: 2.3.1 - fast-glob: 3.3.3 - magic-string: 0.30.17 - postcss: 8.5.2 + fast-glob: 3.3.2 + magic-string: 0.30.14 + postcss: 8.4.49 transitivePeerDependencies: - supports-color @@ -9963,7 +11312,7 @@ snapshots: '@unocss/preset-icons@0.61.9': dependencies: - '@iconify/utils': 2.3.0 + '@iconify/utils': 2.1.33 '@unocss/core': 0.61.9 ofetch: 1.4.1 transitivePeerDependencies: @@ -10007,15 +11356,15 @@ snapshots: '@unocss/rule-utils@0.61.9': dependencies: '@unocss/core': 0.61.9 - magic-string: 0.30.17 + magic-string: 0.30.14 '@unocss/scope@0.61.9': {} '@unocss/transformer-attributify-jsx-babel@0.61.9': dependencies: - '@babel/core': 7.26.8 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.8) - '@babel/preset-typescript': 7.26.0(@babel/core@7.26.8) + '@babel/core': 7.26.0 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) '@unocss/core': 0.61.9 transitivePeerDependencies: - supports-color @@ -10038,30 +11387,30 @@ snapshots: dependencies: '@unocss/core': 0.61.9 - '@unocss/vite@0.61.9(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4))': + '@unocss/vite@0.61.9(rollup@4.28.0)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0))': dependencies: '@ampproject/remapping': 2.3.0 - '@rollup/pluginutils': 5.1.4(rollup@3.29.5) + '@rollup/pluginutils': 5.1.3(rollup@4.28.0) '@unocss/config': 0.61.9 '@unocss/core': 0.61.9 '@unocss/inspector': 0.61.9 '@unocss/scope': 0.61.9 '@unocss/transformer-directives': 0.61.9 chokidar: 3.6.0 - fast-glob: 3.3.3 - magic-string: 0.30.17 - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) + fast-glob: 3.3.2 + magic-string: 0.30.14 + vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) transitivePeerDependencies: - rollup - supports-color - '@vanilla-extract/babel-plugin-debug-ids@1.2.0': + '@vanilla-extract/babel-plugin-debug-ids@1.1.0': dependencies: - '@babel/core': 7.26.8 + '@babel/core': 7.26.0 transitivePeerDependencies: - supports-color - '@vanilla-extract/css@1.17.1': + '@vanilla-extract/css@1.16.1': dependencies: '@emotion/hash': 0.9.2 '@vanilla-extract/private': 1.0.6 @@ -10078,21 +11427,21 @@ snapshots: transitivePeerDependencies: - babel-plugin-macros - '@vanilla-extract/integration@6.5.0(@types/node@22.13.1)(sass-embedded@1.83.4)': + '@vanilla-extract/integration@6.5.0(@types/node@22.10.1)(sass-embedded@1.81.0)': dependencies: - '@babel/core': 7.26.8 - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.8) - '@vanilla-extract/babel-plugin-debug-ids': 1.2.0 - '@vanilla-extract/css': 1.17.1 + '@babel/core': 7.26.0 + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) + '@vanilla-extract/babel-plugin-debug-ids': 1.1.0 + '@vanilla-extract/css': 1.16.1 esbuild: 0.17.19 eval: 0.1.8 find-up: 5.0.0 javascript-stringify: 2.1.0 lodash: 4.17.21 - mlly: 1.7.4 + mlly: 1.7.3 outdent: 0.8.0 - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) - vite-node: 1.6.1(@types/node@22.13.1)(sass-embedded@1.83.4) + vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) + vite-node: 1.6.0(@types/node@22.10.1)(sass-embedded@1.81.0) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -10107,61 +11456,63 @@ snapshots: '@vanilla-extract/private@1.0.6': {} - '@vitejs/plugin-react@4.3.4(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4))': + '@vitejs/plugin-react@4.3.4(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0))': dependencies: - '@babel/core': 7.26.8 - '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.8) - '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.8) + '@babel/core': 7.26.0 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) + vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) transitivePeerDependencies: - supports-color - '@vitest/expect@2.1.9': + '@vitest/expect@2.1.8': dependencies: - '@vitest/spy': 2.1.9 - '@vitest/utils': 2.1.9 + '@vitest/spy': 2.1.8 + '@vitest/utils': 2.1.8 chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.9(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4))': + '@vitest/mocker@2.1.8(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0))': dependencies: - '@vitest/spy': 2.1.9 + '@vitest/spy': 2.1.8 estree-walker: 3.0.3 - magic-string: 0.30.17 + magic-string: 0.30.14 optionalDependencies: - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) + vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) - '@vitest/pretty-format@2.1.9': + '@vitest/pretty-format@2.1.8': dependencies: tinyrainbow: 1.2.0 - '@vitest/runner@2.1.9': + '@vitest/runner@2.1.8': dependencies: - '@vitest/utils': 2.1.9 + '@vitest/utils': 2.1.8 pathe: 1.1.2 - '@vitest/snapshot@2.1.9': + '@vitest/snapshot@2.1.8': dependencies: - '@vitest/pretty-format': 2.1.9 - magic-string: 0.30.17 + '@vitest/pretty-format': 2.1.8 + magic-string: 0.30.14 pathe: 1.1.2 - '@vitest/spy@2.1.9': + '@vitest/spy@2.1.8': dependencies: tinyspy: 3.0.2 - '@vitest/utils@2.1.9': + '@vitest/utils@2.1.8': dependencies: - '@vitest/pretty-format': 2.1.9 - loupe: 3.1.3 + '@vitest/pretty-format': 2.1.8 + loupe: 3.1.2 tinyrainbow: 1.2.0 '@web3-storage/multipart-parser@1.0.0': {} '@webcontainer/api@1.3.0-internal.10': {} + '@xmldom/xmldom@0.8.10': {} + '@xterm/addon-fit@0.10.0(@xterm/xterm@5.5.0)': dependencies: '@xterm/xterm': 5.5.0 @@ -10175,6 +11526,8 @@ snapshots: '@zxing/text-encoding@0.9.0': optional: true + abbrev@1.1.1: {} + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -10188,33 +11541,49 @@ snapshots: dependencies: acorn: 8.14.0 - acorn-walk@8.3.2: {} - acorn-walk@8.3.4: dependencies: acorn: 8.14.0 acorn@8.14.0: {} + agent-base@6.0.2: + dependencies: + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + agent-base@7.1.3: {} + agentkeepalive@4.6.0: + dependencies: + humanize-ms: 1.2.1 + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 - ai@4.1.34(react@18.3.1)(zod@3.24.1): + ai@4.1.2(react@18.3.1)(zod@3.24.1): dependencies: - '@ai-sdk/provider': 1.0.7 - '@ai-sdk/provider-utils': 2.1.6(zod@3.24.1) - '@ai-sdk/react': 1.1.11(react@18.3.1)(zod@3.24.1) - '@ai-sdk/ui-utils': 1.1.11(zod@3.24.1) + '@ai-sdk/provider': 1.0.6 + '@ai-sdk/provider-utils': 2.1.2(zod@3.24.1) + '@ai-sdk/react': 1.1.2(react@18.3.1)(zod@3.24.1) + '@ai-sdk/ui-utils': 1.1.2(zod@3.24.1) '@opentelemetry/api': 1.9.0 jsondiffpatch: 0.6.0 optionalDependencies: react: 18.3.1 zod: 3.24.1 + ajv-formats@3.0.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-keywords@3.5.2(ajv@6.12.6): + dependencies: + ajv: 6.12.6 + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -10222,6 +11591,13 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.6 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + ansi-regex@5.0.1: {} ansi-regex@6.1.0: {} @@ -10239,6 +11615,91 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 + app-builder-bin@5.0.0-alpha.10: {} + + app-builder-lib@25.1.8(dmg-builder@25.1.8(electron-builder-squirrel-windows@25.1.8))(electron-builder-squirrel-windows@25.1.8(dmg-builder@25.1.8)): + dependencies: + '@develar/schema-utils': 2.6.5 + '@electron/notarize': 2.5.0 + '@electron/osx-sign': 1.3.1 + '@electron/rebuild': 3.6.1 + '@electron/universal': 2.0.1 + '@malept/flatpak-bundler': 0.4.0 + '@types/fs-extra': 9.0.13 + async-exit-hook: 2.0.1 + bluebird-lst: 1.0.9 + builder-util: 25.1.7 + builder-util-runtime: 9.2.10 + chromium-pickle-js: 0.2.0 + config-file-ts: 0.2.8-rc1 + debug: 4.3.7 + dmg-builder: 25.1.8(electron-builder-squirrel-windows@25.1.8) + dotenv: 16.4.7 + dotenv-expand: 11.0.7 + ejs: 3.1.10 + electron-builder-squirrel-windows: 25.1.8(dmg-builder@25.1.8) + electron-publish: 25.1.7 + form-data: 4.0.1 + fs-extra: 10.1.0 + hosted-git-info: 4.1.0 + is-ci: 3.0.1 + isbinaryfile: 5.0.4 + js-yaml: 4.1.0 + json5: 2.2.3 + lazy-val: 1.0.5 + minimatch: 10.0.1 + resedit: 1.7.2 + sanitize-filename: 1.6.3 + semver: 7.6.3 + tar: 6.2.1 + temp-file: 3.4.0 + transitivePeerDependencies: + - bluebird + - supports-color + + aproba@2.0.0: {} + + archiver-utils@2.1.0: + dependencies: + glob: 7.2.3 + graceful-fs: 4.2.11 + lazystream: 1.0.1 + lodash.defaults: 4.2.0 + lodash.difference: 4.5.0 + lodash.flatten: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.union: 4.6.0 + normalize-path: 3.0.0 + readable-stream: 2.3.8 + + archiver-utils@3.0.4: + dependencies: + glob: 7.2.3 + graceful-fs: 4.2.11 + lazystream: 1.0.1 + lodash.defaults: 4.2.0 + lodash.difference: 4.5.0 + lodash.flatten: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.union: 4.6.0 + normalize-path: 3.0.0 + readable-stream: 3.6.2 + + archiver@5.3.2: + dependencies: + archiver-utils: 2.1.0 + async: 3.2.6 + buffer-crc32: 0.2.13 + readable-stream: 3.6.2 + readdir-glob: 1.1.3 + tar-stream: 2.2.0 + zip-stream: 4.1.1 + + are-we-there-yet@3.0.1: + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + arg@5.0.2: {} argparse@2.0.1: {} @@ -10265,27 +11726,44 @@ snapshots: inherits: 2.0.4 minimalistic-assert: 1.0.1 + assert-plus@1.0.0: + optional: true + assert@2.1.0: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.7 is-nan: 1.3.2 object-is: 1.1.6 - object.assign: 4.1.7 + object.assign: 4.1.5 util: 0.12.5 assertion-error@2.0.1: {} + astral-regex@2.0.0: + optional: true + astring@1.9.0: {} + async-exit-hook@2.0.1: {} + async-lock@1.4.1: {} + async@3.2.6: {} + asynckit@0.4.0: {} + at-least-node@1.0.0: {} + atob@2.1.2: {} + atomically@2.0.3: + dependencies: + stubborn-fs: 1.2.5 + when-exit: 2.1.4 + available-typed-arrays@1.0.7: dependencies: - possible-typed-array-names: 1.1.0 + possible-typed-array-names: 1.0.0 bail@2.0.2: {} @@ -10296,6 +11774,10 @@ snapshots: base64-js@1.5.1: {} + basic-auth@2.0.1: + dependencies: + safe-buffer: 5.1.2 + before-after-hook@3.0.2: {} binary-extensions@2.3.0: {} @@ -10312,6 +11794,12 @@ snapshots: blake3-wasm@2.1.5: {} + bluebird-lst@1.0.9: + dependencies: + bluebird: 3.7.2 + + bluebird@3.7.2: {} + bn.js@4.12.1: {} bn.js@5.2.1: {} @@ -10333,6 +11821,9 @@ snapshots: transitivePeerDependencies: - supports-color + boolean@3.2.0: + optional: true + bowser@2.11.0: {} brace-expansion@1.1.11: @@ -10352,7 +11843,7 @@ snapshots: browser-resolve@2.0.0: dependencies: - resolve: 1.22.10 + resolve: 1.22.8 browserify-aes@1.2.0: dependencies: @@ -10403,17 +11894,19 @@ snapshots: dependencies: pako: 1.0.11 - browserslist@4.24.4: + browserslist@4.24.2: dependencies: - caniuse-lite: 1.0.30001699 - electron-to-chromium: 1.5.97 - node-releases: 2.0.19 - update-browserslist-db: 1.1.2(browserslist@4.24.4) + caniuse-lite: 1.0.30001685 + electron-to-chromium: 1.5.68 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.2) btoa@1.2.1: {} buffer-builder@0.2.0: {} + buffer-crc32@0.2.13: {} + buffer-from@1.1.2: {} buffer-xor@1.0.3: {} @@ -10423,9 +11916,37 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + builder-util-runtime@9.2.10: + dependencies: + debug: 4.3.7 + sax: 1.4.1 + transitivePeerDependencies: + - supports-color + + builder-util@25.1.7: + dependencies: + 7zip-bin: 5.2.0 + '@types/debug': 4.1.12 + app-builder-bin: 5.0.0-alpha.10 + bluebird-lst: 1.0.9 + builder-util-runtime: 9.2.10 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.3.7 + fs-extra: 10.1.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-ci: 3.0.1 + js-yaml: 4.1.0 + source-map-support: 0.5.21 + stat-mode: 1.0.0 + temp-file: 3.4.0 + transitivePeerDependencies: + - supports-color + builtin-status-codes@3.0.0: {} - bundle-require@5.1.0(esbuild@0.23.1): + bundle-require@5.0.0(esbuild@0.23.1): dependencies: esbuild: 0.23.1 load-tsconfig: 0.2.5 @@ -10434,6 +11955,29 @@ snapshots: cac@6.7.14: {} + cacache@16.1.3: + dependencies: + '@npmcli/fs': 2.1.2 + '@npmcli/move-file': 2.0.1 + chownr: 2.0.0 + fs-minipass: 2.1.0 + glob: 8.1.0 + infer-owner: 1.0.4 + lru-cache: 7.18.3 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + mkdirp: 1.0.4 + p-map: 4.0.0 + promise-inflight: 1.0.1 + rimraf: 3.0.2 + ssri: 9.0.1 + tar: 6.2.1 + unique-filename: 2.0.1 + transitivePeerDependencies: + - bluebird + cacache@17.1.4: dependencies: '@npmcli/fs': 3.1.1 @@ -10449,32 +11993,35 @@ snapshots: tar: 6.2.1 unique-filename: 3.0.0 - call-bind-apply-helpers@1.0.1: + cacheable-lookup@5.0.4: {} + + cacheable-request@7.0.4: dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + lowercase-keys: 2.0.0 + normalize-url: 6.1.0 + responselike: 2.0.1 + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 - - call-bind@1.0.8: - dependencies: - call-bind-apply-helpers: 1.0.1 - es-define-property: 1.0.1 - get-intrinsic: 1.2.7 + get-intrinsic: 1.2.4 set-function-length: 1.2.2 - call-bound@1.0.3: - dependencies: - call-bind-apply-helpers: 1.0.1 - get-intrinsic: 1.2.7 - callsites@3.1.0: {} - caniuse-lite@1.0.30001699: {} + caniuse-lite@1.0.30001685: {} canvg@3.0.10: dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.0 '@types/raf': 3.4.3 - core-js: 3.40.0 + core-js: 3.41.0 raf: 3.4.1 regenerator-runtime: 0.13.11 rgbcolor: 1.0.1 @@ -10482,6 +12029,13 @@ snapshots: svg-pathdata: 6.0.3 optional: true + capnp-ts@0.7.0: + dependencies: + debug: 4.3.7 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + ccount@2.0.1: {} chai@5.1.2: @@ -10489,7 +12043,7 @@ snapshots: assertion-error: 2.0.1 check-error: 2.1.1 deep-eql: 5.0.2 - loupe: 3.1.3 + loupe: 3.1.2 pathval: 2.0.0 chalk@3.0.0: @@ -10512,7 +12066,7 @@ snapshots: character-reference-invalid@2.0.1: {} - chart.js@4.4.7: + chart.js@4.4.8: dependencies: '@kurkle/color': 0.3.4 @@ -10530,10 +12084,16 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + chokidar@4.0.1: + dependencies: + readdirp: 4.0.2 + chownr@1.1.4: {} chownr@2.0.0: {} + chromium-pickle-js@0.2.0: {} + ci-info@3.9.0: {} cipher-base@1.0.6: @@ -10555,6 +12115,24 @@ snapshots: cli-spinners@2.9.2: {} + cli-truncate@2.1.0: + dependencies: + slice-ansi: 3.0.0 + string-width: 4.2.3 + optional: true + + client-only@0.0.1: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone-response@1.0.3: + dependencies: + mimic-response: 1.0.1 + clone@1.0.4: {} clsx@2.1.1: {} @@ -10565,17 +12143,7 @@ snapshots: color-name@1.1.4: {} - color-string@1.9.1: - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.2 - optional: true - - color@4.2.3: - dependencies: - color-convert: 2.0.1 - color-string: 1.9.1 - optional: true + color-support@1.1.3: {} colorette@2.0.20: {} @@ -10587,16 +12155,74 @@ snapshots: comma-separated-tokens@2.0.3: {} + commander@5.1.0: {} + common-tags@1.8.2: {} + compare-version@0.1.2: {} + + compress-commons@4.1.2: + dependencies: + buffer-crc32: 0.2.13 + crc32-stream: 4.0.3 + normalize-path: 3.0.0 + readable-stream: 3.6.2 + + compressible@2.0.18: + dependencies: + mime-db: 1.52.0 + + compression@1.8.0: + dependencies: + bytes: 3.1.2 + compressible: 2.0.18 + debug: 2.6.9 + negotiator: 0.6.4 + on-headers: 1.0.2 + safe-buffer: 5.2.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + concat-map@0.0.1: {} + concurrently@8.2.2: + dependencies: + chalk: 4.1.2 + date-fns: 2.30.0 + lodash: 4.17.21 + rxjs: 7.8.1 + shell-quote: 1.8.2 + spawn-command: 0.0.2 + supports-color: 8.1.1 + tree-kill: 1.2.2 + yargs: 17.7.2 + + conf@13.1.0: + dependencies: + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + atomically: 2.0.3 + debounce-fn: 6.0.0 + dot-prop: 9.0.0 + env-paths: 3.0.0 + json-schema-typed: 8.0.1 + semver: 7.6.3 + uint8array-extras: 1.4.0 + confbox@0.1.8: {} - consola@3.4.0: {} + config-file-ts@0.2.8-rc1: + dependencies: + glob: 10.4.5 + typescript: 5.7.2 + + consola@3.2.3: {} console-browserify@1.2.0: {} + console-control-strings@1.1.0: {} + constants-browserify@1.0.0: {} content-disposition@0.5.4: @@ -10611,19 +12237,32 @@ snapshots: cookie-signature@1.2.2: {} - cookie@0.5.0: {} - cookie@0.6.0: {} cookie@0.7.1: {} - core-js@3.40.0: + cookie@0.7.2: {} + + core-js@3.41.0: + optional: true + + core-util-is@1.0.2: optional: true core-util-is@1.0.3: {} crc-32@1.2.2: {} + crc32-stream@4.0.3: + dependencies: + crc-32: 1.2.2 + readable-stream: 3.6.2 + + crc@3.8.0: + dependencies: + buffer: 5.7.1 + optional: true + create-ecdh@4.0.4: dependencies: bn.js: 4.12.1 @@ -10650,6 +12289,10 @@ snapshots: crelt@1.0.6: {} + cross-env@7.0.3: + dependencies: + cross-spawn: 7.0.6 + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -10709,12 +12352,26 @@ snapshots: whatwg-mimetype: 4.0.0 whatwg-url: 14.1.1 + date-fns@2.30.0: + dependencies: + '@babel/runtime': 7.26.0 + date-fns@3.6.0: {} + date-fns@4.1.0: {} + + debounce-fn@6.0.0: + dependencies: + mimic-function: 5.0.1 + debug@2.6.9: dependencies: ms: 2.0.0 + debug@4.3.7: + dependencies: + ms: 2.1.3 + debug@4.4.0: dependencies: ms: 2.1.3 @@ -10743,11 +12400,13 @@ snapshots: dependencies: clone: 1.0.4 + defer-to-connect@2.0.1: {} + define-data-property@1.1.4: dependencies: - es-define-property: 1.0.1 + es-define-property: 1.0.0 es-errors: 1.3.0 - gopd: 1.2.0 + gopd: 1.1.0 define-properties@1.2.1: dependencies: @@ -10759,6 +12418,8 @@ snapshots: delayed-stream@1.0.0: {} + delegates@1.0.0: {} + depd@2.0.0: {} dequal@2.0.3: {} @@ -10772,11 +12433,13 @@ snapshots: destroy@1.2.0: {} - detect-libc@2.0.3: - optional: true + detect-libc@2.0.3: {} detect-node-es@1.1.0: {} + detect-node@2.1.0: + optional: true + devlop@1.1.0: dependencies: dequal: 2.0.3 @@ -10793,6 +12456,38 @@ snapshots: miller-rabin: 4.0.1 randombytes: 2.1.0 + dir-compare@4.2.0: + dependencies: + minimatch: 3.1.2 + p-limit: 3.1.0 + + dmg-builder@25.1.8(electron-builder-squirrel-windows@25.1.8): + dependencies: + app-builder-lib: 25.1.8(dmg-builder@25.1.8(electron-builder-squirrel-windows@25.1.8))(electron-builder-squirrel-windows@25.1.8(dmg-builder@25.1.8)) + builder-util: 25.1.7 + builder-util-runtime: 9.2.10 + fs-extra: 10.1.0 + iconv-lite: 0.6.3 + js-yaml: 4.1.0 + optionalDependencies: + dmg-license: 1.0.11 + transitivePeerDependencies: + - bluebird + - electron-builder-squirrel-windows + - supports-color + + dmg-license@1.0.11: + dependencies: + '@types/plist': 3.0.5 + '@types/verror': 1.10.10 + ajv: 6.12.6 + crc: 3.8.0 + iconv-corefoundation: 1.1.7 + plist: 3.1.0 + smart-buffer: 4.2.0 + verror: 1.10.1 + optional: true + dnd-core@16.0.1: dependencies: '@react-dnd/asap': 5.0.2 @@ -10808,13 +12503,15 @@ snapshots: dompurify@2.5.8: optional: true - dotenv@16.4.7: {} - - dunder-proto@1.0.1: + dot-prop@9.0.0: dependencies: - call-bind-apply-helpers: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 + type-fest: 4.30.0 + + dotenv-expand@11.0.7: + dependencies: + dotenv: 16.4.7 + + dotenv@16.4.7: {} duplexer@0.1.2: {} @@ -10833,7 +12530,79 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.97: {} + ejs@3.1.10: + dependencies: + jake: 10.9.2 + + electron-builder-squirrel-windows@25.1.8(dmg-builder@25.1.8): + dependencies: + app-builder-lib: 25.1.8(dmg-builder@25.1.8(electron-builder-squirrel-windows@25.1.8))(electron-builder-squirrel-windows@25.1.8(dmg-builder@25.1.8)) + archiver: 5.3.2 + builder-util: 25.1.7 + fs-extra: 10.1.0 + transitivePeerDependencies: + - bluebird + - dmg-builder + - supports-color + + electron-builder@25.1.8(electron-builder-squirrel-windows@25.1.8(dmg-builder@25.1.8)): + dependencies: + app-builder-lib: 25.1.8(dmg-builder@25.1.8(electron-builder-squirrel-windows@25.1.8))(electron-builder-squirrel-windows@25.1.8(dmg-builder@25.1.8)) + builder-util: 25.1.7 + builder-util-runtime: 9.2.10 + chalk: 4.1.2 + dmg-builder: 25.1.8(electron-builder-squirrel-windows@25.1.8) + fs-extra: 10.1.0 + is-ci: 3.0.1 + lazy-val: 1.0.5 + simple-update-notifier: 2.0.0 + yargs: 17.7.2 + transitivePeerDependencies: + - bluebird + - electron-builder-squirrel-windows + - supports-color + + electron-log@5.3.0: {} + + electron-publish@25.1.7: + dependencies: + '@types/fs-extra': 9.0.13 + builder-util: 25.1.7 + builder-util-runtime: 9.2.10 + chalk: 4.1.2 + fs-extra: 10.1.0 + lazy-val: 1.0.5 + mime: 2.6.0 + transitivePeerDependencies: + - supports-color + + electron-store@10.0.1: + dependencies: + conf: 13.1.0 + type-fest: 4.30.0 + + electron-to-chromium@1.5.68: {} + + electron-updater@6.3.9: + dependencies: + builder-util-runtime: 9.2.10 + fs-extra: 10.1.0 + js-yaml: 4.1.0 + lazy-val: 1.0.5 + lodash.escaperegexp: 4.1.2 + lodash.isequal: 4.5.0 + semver: 7.6.3 + tiny-typed-emitter: 2.1.0 + transitivePeerDependencies: + - supports-color + + electron@33.3.2: + dependencies: + '@electron/get': 2.0.3 + '@types/node': 20.17.16 + extract-zip: 2.0.1 + transitivePeerDependencies: + - supports-color elliptic@6.6.1: dependencies: @@ -10855,30 +12624,33 @@ snapshots: encodeurl@2.0.0: {} + encoding@0.1.13: + dependencies: + iconv-lite: 0.6.3 + optional: true + end-of-stream@1.4.4: dependencies: once: 1.4.0 entities@4.5.0: {} + env-paths@2.2.1: {} + + env-paths@3.0.0: {} + err-code@2.0.3: {} - es-define-property@1.0.1: {} + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 es-errors@1.3.0: {} - es-module-lexer@1.6.0: {} + es-module-lexer@1.5.4: {} - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.2.7 - has-tostringtag: 1.0.2 - hasown: 2.0.2 + es6-error@4.1.1: + optional: true esbuild-plugins-node-modules-polyfill@1.6.8(esbuild@0.17.6): dependencies: @@ -10998,27 +12770,27 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-compat-utils@0.6.4(eslint@9.20.1(jiti@1.21.7)): + eslint-compat-utils@0.6.4(eslint@9.16.0(jiti@1.21.6)): dependencies: - eslint: 9.20.1(jiti@1.21.7) - semver: 7.7.1 + eslint: 9.16.0(jiti@1.21.6) + semver: 7.6.3 - eslint-config-prettier@9.1.0(eslint@9.20.1(jiti@1.21.7)): + eslint-config-prettier@9.1.0(eslint@9.16.0(jiti@1.21.6)): dependencies: - eslint: 9.20.1(jiti@1.21.7) + eslint: 9.16.0(jiti@1.21.6) - eslint-json-compat-utils@0.2.1(eslint@9.20.1(jiti@1.21.7))(jsonc-eslint-parser@2.4.0): + eslint-json-compat-utils@0.2.1(eslint@9.16.0(jiti@1.21.6))(jsonc-eslint-parser@2.4.0): dependencies: - eslint: 9.20.1(jiti@1.21.7) + eslint: 9.16.0(jiti@1.21.6) esquery: 1.6.0 jsonc-eslint-parser: 2.4.0 - eslint-plugin-jsonc@2.19.1(eslint@9.20.1(jiti@1.21.7)): + eslint-plugin-jsonc@2.18.2(eslint@9.16.0(jiti@1.21.6)): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1(jiti@1.21.7)) - eslint: 9.20.1(jiti@1.21.7) - eslint-compat-utils: 0.6.4(eslint@9.20.1(jiti@1.21.7)) - eslint-json-compat-utils: 0.2.1(eslint@9.20.1(jiti@1.21.7))(jsonc-eslint-parser@2.4.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@1.21.6)) + eslint: 9.16.0(jiti@1.21.6) + eslint-compat-utils: 0.6.4(eslint@9.16.0(jiti@1.21.6)) + eslint-json-compat-utils: 0.2.1(eslint@9.16.0(jiti@1.21.6))(jsonc-eslint-parser@2.4.0) espree: 9.6.1 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.0 @@ -11027,14 +12799,15 @@ snapshots: transitivePeerDependencies: - '@eslint/json' - eslint-plugin-prettier@5.2.3(eslint-config-prettier@9.1.0(eslint@9.20.1(jiti@1.21.7)))(eslint@9.20.1(jiti@1.21.7))(prettier@3.5.0): + eslint-plugin-prettier@5.2.1(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@9.16.0(jiti@1.21.6)))(eslint@9.16.0(jiti@1.21.6))(prettier@3.4.1): dependencies: - eslint: 9.20.1(jiti@1.21.7) - prettier: 3.5.0 + eslint: 9.16.0(jiti@1.21.6) + prettier: 3.4.1 prettier-linter-helpers: 1.0.0 synckit: 0.9.2 optionalDependencies: - eslint-config-prettier: 9.1.0(eslint@9.20.1(jiti@1.21.7)) + '@types/eslint': 8.56.10 + eslint-config-prettier: 9.1.0(eslint@9.16.0(jiti@1.21.6)) eslint-scope@8.2.0: dependencies: @@ -11045,15 +12818,15 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.20.1(jiti@1.21.7): + eslint@9.16.0(jiti@1.21.6): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1(jiti@1.21.7)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@1.21.6)) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.19.2 - '@eslint/core': 0.11.0 + '@eslint/config-array': 0.19.0 + '@eslint/core': 0.9.0 '@eslint/eslintrc': 3.2.0 - '@eslint/js': 9.20.0 - '@eslint/plugin-kit': 0.2.5 + '@eslint/js': 9.16.0 + '@eslint/plugin-kit': 0.2.3 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.1 @@ -11062,7 +12835,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.0 + debug: 4.3.7 escape-string-regexp: 4.0.0 eslint-scope: 8.2.0 eslint-visitor-keys: 4.2.0 @@ -11082,7 +12855,7 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 1.21.7 + jiti: 1.21.6 transitivePeerDependencies: - supports-color @@ -11153,7 +12926,7 @@ snapshots: eval@0.1.8: dependencies: - '@types/node': 22.13.1 + '@types/node': 22.10.1 require-like: 0.1.2 event-target-shim@5.0.1: {} @@ -11185,7 +12958,9 @@ snapshots: expect-type@1.1.0: {} - express@4.21.2: + exponential-backoff@3.1.1: {} + + express@4.21.1: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 @@ -11206,7 +12981,7 @@ snapshots: methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 - path-to-regexp: 0.1.12 + path-to-regexp: 0.1.10 proxy-addr: 2.0.7 qs: 6.13.0 range-parser: 1.2.1 @@ -11223,13 +12998,24 @@ snapshots: extend@3.0.2: {} - fast-content-type-parse@2.0.1: {} + extract-zip@2.0.1: + dependencies: + debug: 4.3.7 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + + extsprintf@1.4.1: + optional: true fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} - fast-glob@3.3.3: + fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 @@ -11241,11 +13027,13 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-uri@3.0.6: {} + fast-xml-parser@4.4.1: dependencies: strnum: 1.0.5 - fastq@1.19.0: + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -11253,6 +13041,10 @@ snapshots: dependencies: format: 0.2.2 + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + fetch-blob@3.2.0: dependencies: node-domexception: 1.0.0 @@ -11266,6 +13058,10 @@ snapshots: file-saver@2.0.5: {} + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -11294,7 +13090,7 @@ snapshots: flatted@3.3.2: {} - for-each@0.3.5: + for-each@0.3.3: dependencies: is-callable: 1.2.7 @@ -11303,11 +13099,10 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - form-data@4.0.2: + form-data@4.0.1: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 mime-types: 2.1.35 format@0.2.2: {} @@ -11318,10 +13113,8 @@ snapshots: forwarded@0.2.0: {} - framer-motion@11.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + framer-motion@11.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - motion-dom: 11.18.1 - motion-utils: 11.18.1 tslib: 2.8.1 optionalDependencies: react: 18.3.1 @@ -11337,6 +13130,25 @@ snapshots: jsonfile: 6.1.0 universalify: 2.0.1 + fs-extra@11.3.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-extra@8.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + fs-minipass@2.1.0: dependencies: minipass: 3.3.6 @@ -11345,47 +13157,56 @@ snapshots: dependencies: minipass: 7.1.2 + fs.realpath@1.0.0: {} + fsevents@2.3.3: optional: true function-bind@1.1.2: {} + gauge@4.0.4: + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + generic-names@4.0.0: dependencies: loader-utils: 3.3.1 gensync@1.0.0-beta.2: {} - get-intrinsic@1.2.7: + get-caller-file@2.0.5: {} + + get-intrinsic@1.2.4: dependencies: - call-bind-apply-helpers: 1.0.1 - es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.1.1 function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 + has-proto: 1.1.0 has-symbols: 1.1.0 hasown: 2.0.2 - math-intrinsics: 1.1.0 get-nonce@1.0.1: {} get-port@5.1.1: {} - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 - get-source@2.0.12: dependencies: data-uri-to-buffer: 2.0.2 source-map: 0.6.1 + get-stream@5.2.0: + dependencies: + pump: 3.0.2 + get-stream@6.0.1: {} - get-tsconfig@4.10.0: + get-tsconfig@4.8.1: dependencies: resolve-pkg-maps: 1.0.0 @@ -11408,15 +13229,71 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + glob@8.1.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + + glob@9.3.5: + dependencies: + fs.realpath: 1.0.0 + minimatch: 8.0.4 + minipass: 4.2.8 + path-scurry: 1.11.1 + + global-agent@3.0.0: + dependencies: + boolean: 3.2.0 + es6-error: 4.1.1 + matcher: 3.0.0 + roarr: 2.15.4 + semver: 7.6.3 + serialize-error: 7.0.1 + optional: true + globals@11.12.0: {} globals@14.0.0: {} - globals@15.14.0: {} + globals@15.13.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.1.0 + optional: true globrex@0.1.2: {} - gopd@1.2.0: {} + gopd@1.1.0: + dependencies: + get-intrinsic: 1.2.4 + + got@11.8.6: + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 4.0.6 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 + cacheable-lookup: 5.0.4 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + http2-wrapper: 1.0.3 + lowercase-keys: 2.0.0 + p-cancelable: 2.1.1 + responselike: 2.0.1 graceful-fs@4.2.11: {} @@ -11439,7 +13316,11 @@ snapshots: has-property-descriptors@1.0.2: dependencies: - es-define-property: 1.0.1 + es-define-property: 1.0.0 + + has-proto@1.1.0: + dependencies: + call-bind: 1.0.7 has-symbols@1.1.0: {} @@ -11447,6 +13328,8 @@ snapshots: dependencies: has-symbols: 1.1.0 + has-unicode@2.0.1: {} + hash-base@3.0.5: dependencies: inherits: 2.0.4 @@ -11480,7 +13363,7 @@ snapshots: dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 - '@ungap/structured-clone': 1.3.0 + '@ungap/structured-clone': 1.2.0 hast-util-from-parse5: 8.0.2 hast-util-to-parse5: 8.0.0 html-void-elements: 3.0.0 @@ -11495,7 +13378,7 @@ snapshots: hast-util-sanitize@5.0.2: dependencies: '@types/hast': 3.0.4 - '@ungap/structured-clone': 1.3.0 + '@ungap/structured-clone': 1.2.0 unist-util-position: 5.0.0 hast-util-to-estree@2.3.3: @@ -11518,7 +13401,7 @@ snapshots: transitivePeerDependencies: - supports-color - hast-util-to-html@9.0.4: + hast-util-to-html@9.0.3: dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 @@ -11542,7 +13425,7 @@ snapshots: estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdx-jsx: 3.1.3 mdast-util-mdxjs-esm: 2.0.1 property-information: 6.5.0 space-separated-tokens: 2.0.2 @@ -11586,6 +13469,10 @@ snapshots: dependencies: react-is: 16.13.1 + hosted-git-info@4.1.0: + dependencies: + lru-cache: 6.0.0 + hosted-git-info@6.1.3: dependencies: lru-cache: 7.18.3 @@ -11604,6 +13491,8 @@ snapshots: text-segmentation: 1.0.3 optional: true + http-cache-semantics@4.1.1: {} + http-errors@2.0.0: dependencies: depd: 2.0.0 @@ -11612,26 +13501,56 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 - http-proxy-agent@7.0.2: + http-proxy-agent@5.0.0: dependencies: - agent-base: 7.1.3 + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 debug: 4.4.0 transitivePeerDependencies: - supports-color + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.3 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + http2-wrapper@1.0.3: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + https-browserify@1.0.0: {} + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 - debug: 4.4.0 + debug: 4.3.7 transitivePeerDependencies: - supports-color human-signals@2.1.0: {} + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + husky@9.1.7: {} + iconv-corefoundation@1.1.7: + dependencies: + cli-truncate: 2.1.0 + node-addon-api: 1.7.2 + optional: true + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -11640,9 +13559,9 @@ snapshots: dependencies: safer-buffer: 2.1.2 - icss-utils@5.1.0(postcss@8.5.2): + icss-utils@5.1.0(postcss@8.4.49): dependencies: - postcss: 8.5.2 + postcss: 8.4.49 ieee754@1.2.1: {} @@ -11654,18 +13573,18 @@ snapshots: immutable@5.0.3: {} - import-fresh@3.3.1: + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 importx@0.4.4: dependencies: - bundle-require: 5.1.0(esbuild@0.23.1) + bundle-require: 5.0.0(esbuild@0.23.1) debug: 4.4.0 esbuild: 0.23.1 jiti: 2.0.0-beta.3 - jiti-v1: jiti@1.21.7 + jiti-v1: jiti@1.21.6 pathe: 1.1.2 tsx: 4.19.2 transitivePeerDependencies: @@ -11675,12 +13594,28 @@ snapshots: indent-string@4.0.0: {} + infer-owner@1.0.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + inherits@2.0.4: {} inline-style-parser@0.1.1: {} inline-style-parser@0.2.4: {} + invariant@2.2.4: + dependencies: + loose-envify: 1.4.0 + + ip-address@9.0.5: + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + ipaddr.js@1.9.1: {} is-alphabetical@2.0.1: {} @@ -11690,14 +13625,11 @@ snapshots: is-alphabetical: 2.0.1 is-decimal: 2.0.1 - is-arguments@1.2.0: + is-arguments@1.1.1: dependencies: - call-bound: 1.0.3 + call-bind: 1.0.7 has-tostringtag: 1.0.2 - is-arrayish@0.3.2: - optional: true - is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 @@ -11710,7 +13642,7 @@ snapshots: dependencies: ci-info: 3.9.0 - is-core-module@2.16.1: + is-core-module@2.15.1: dependencies: hasown: 2.0.2 @@ -11722,12 +13654,9 @@ snapshots: is-fullwidth-code-point@3.0.0: {} - is-generator-function@1.1.0: + is-generator-function@1.0.10: dependencies: - call-bound: 1.0.3 - get-proto: 1.0.1 has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 is-glob@4.0.3: dependencies: @@ -11739,9 +13668,11 @@ snapshots: is-interactive@1.0.0: {} + is-lambda@1.0.1: {} + is-nan@1.3.2: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.7 define-properties: 1.2.1 is-number@7.0.0: {} @@ -11756,28 +13687,25 @@ snapshots: dependencies: '@types/estree': 1.0.6 - is-regex@1.2.1: - dependencies: - call-bound: 1.0.3 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - is-stream@2.0.1: {} - is-typed-array@1.1.15: + is-typed-array@1.1.13: dependencies: - which-typed-array: 1.1.18 + which-typed-array: 1.1.16 is-unicode-supported@0.1.0: {} isarray@1.0.0: {} + isbinaryfile@4.0.10: {} + + isbinaryfile@5.0.4: {} + isbot@4.4.0: {} isexe@2.0.0: {} - isomorphic-git@1.29.0: + isomorphic-git@1.27.2: dependencies: async-lock: 1.4.1 clean-git-ref: 2.0.1 @@ -11800,15 +13728,24 @@ snapshots: editions: 6.21.0 textextensions: 6.11.0 + itty-time@1.0.6: {} + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jake@10.9.2: + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + javascript-stringify@2.1.0: {} - jiti@1.21.7: {} + jiti@1.21.6: {} jiti@2.0.0-beta.3: {} @@ -11822,22 +13759,24 @@ snapshots: dependencies: argparse: 2.0.1 + jsbn@1.1.0: {} + jsdom@26.0.0: dependencies: cssstyle: 4.2.1 data-urls: 5.0.0 decimal.js: 10.5.0 - form-data: 4.0.2 + form-data: 4.0.1 html-encoding-sniffer: 4.0.0 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.16 + nwsapi: 2.2.18 parse5: 7.2.1 rrweb-cssom: 0.8.0 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 5.1.1 + tough-cookie: 5.1.2 w3c-xmlserializer: 5.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 3.1.1 @@ -11858,10 +13797,17 @@ snapshots: json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: {} + + json-schema-typed@8.0.1: {} + json-schema@0.4.0: {} json-stable-stringify-without-jsonify@1.0.1: {} + json-stringify-safe@5.0.1: + optional: true + json5@2.2.3: {} jsonc-eslint-parser@2.4.0: @@ -11869,7 +13815,7 @@ snapshots: acorn: 8.14.0 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - semver: 7.7.1 + semver: 7.6.3 jsondiffpatch@0.6.0: dependencies: @@ -11877,6 +13823,10 @@ snapshots: chalk: 5.4.1 diff-match-patch: 1.0.5 + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + jsonfile@6.1.0: dependencies: universalify: 2.0.1 @@ -11885,13 +13835,13 @@ snapshots: jspdf@2.5.2: dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.0 atob: 2.1.2 btoa: 1.2.1 fflate: 0.8.2 optionalDependencies: canvg: 3.0.10 - core-js: 3.40.0 + core-js: 3.41.0 dompurify: 2.5.8 html2canvas: 1.4.1 @@ -11910,6 +13860,12 @@ snapshots: kolorist@1.8.0: {} + lazy-val@1.0.5: {} + + lazystream@1.0.1: + dependencies: + readable-stream: 2.3.8 + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -11919,7 +13875,7 @@ snapshots: dependencies: immediate: 3.0.6 - lilconfig@3.1.3: {} + lilconfig@3.1.2: {} load-tsconfig@0.2.5: {} @@ -11927,13 +13883,8 @@ snapshots: local-pkg@0.5.1: dependencies: - mlly: 1.7.4 - pkg-types: 1.3.1 - - local-pkg@1.0.0: - dependencies: - mlly: 1.7.4 - pkg-types: 1.3.1 + mlly: 1.7.3 + pkg-types: 1.2.1 locate-path@6.0.0: dependencies: @@ -11943,8 +13894,22 @@ snapshots: lodash.debounce@4.0.8: {} + lodash.defaults@4.2.0: {} + + lodash.difference@4.5.0: {} + + lodash.escaperegexp@4.1.2: {} + + lodash.flatten@4.4.0: {} + + lodash.isequal@4.5.0: {} + + lodash.isplainobject@4.0.6: {} + lodash.merge@4.6.2: {} + lodash.union@4.6.0: {} + lodash@4.17.21: {} log-symbols@4.1.0: @@ -11958,7 +13923,9 @@ snapshots: dependencies: js-tokens: 4.0.0 - loupe@3.1.3: {} + loupe@3.1.2: {} + + lowercase-keys@2.0.0: {} lru-cache@10.4.3: {} @@ -11966,6 +13933,10 @@ snapshots: dependencies: yallist: 3.1.1 + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + lru-cache@7.18.3: {} lz-string@1.5.0: {} @@ -11974,15 +13945,40 @@ snapshots: dependencies: sourcemap-codec: 1.4.8 - magic-string@0.30.17: + magic-string@0.30.14: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + make-fetch-happen@10.2.1: + dependencies: + agentkeepalive: 4.6.0 + cacache: 16.1.3 + http-cache-semantics: 4.1.1 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-lambda: 1.0.1 + lru-cache: 7.18.3 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-fetch: 2.1.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + negotiator: 0.6.4 + promise-retry: 2.0.1 + socks-proxy-agent: 7.0.0 + ssri: 9.0.1 + transitivePeerDependencies: + - bluebird + - supports-color + markdown-extensions@1.1.1: {} markdown-table@3.0.4: {} - math-intrinsics@1.1.0: {} + matcher@3.0.0: + dependencies: + escape-string-regexp: 4.0.0 + optional: true md5.js@1.3.5: dependencies: @@ -11996,7 +13992,7 @@ snapshots: '@types/unist': 2.0.11 unist-util-visit: 4.1.2 - mdast-util-find-and-replace@3.0.2: + mdast-util-find-and-replace@3.0.1: dependencies: '@types/mdast': 4.0.4 escape-string-regexp: 5.0.0 @@ -12048,10 +14044,10 @@ snapshots: '@types/mdast': 4.0.4 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-find-and-replace: 3.0.2 + mdast-util-find-and-replace: 3.0.1 micromark-util-character: 2.1.1 - mdast-util-gfm-footnote@2.1.0: + mdast-util-gfm-footnote@2.0.0: dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 @@ -12088,11 +14084,11 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-gfm@3.1.0: + mdast-util-gfm@3.0.0: dependencies: mdast-util-from-markdown: 2.0.2 mdast-util-gfm-autolink-literal: 2.0.1 - mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-footnote: 2.0.0 mdast-util-gfm-strikethrough: 2.0.0 mdast-util-gfm-table: 2.0.0 mdast-util-gfm-task-list-item: 2.0.0 @@ -12130,7 +14126,7 @@ snapshots: ccount: 2.0.1 mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 - parse-entities: 4.0.2 + parse-entities: 4.0.1 stringify-entities: 4.0.4 unist-util-remove-position: 4.0.2 unist-util-stringify-position: 3.0.3 @@ -12138,7 +14134,7 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-mdx-jsx@3.2.0: + mdast-util-mdx-jsx@3.1.3: dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 @@ -12148,7 +14144,7 @@ snapshots: devlop: 1.1.0 mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.2 - parse-entities: 4.0.2 + parse-entities: 4.0.1 stringify-entities: 4.0.4 unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 @@ -12211,7 +14207,7 @@ snapshots: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.3.0 + '@ungap/structured-clone': 1.2.0 devlop: 1.1.0 micromark-util-sanitize-uri: 2.0.1 trim-lines: 3.0.1 @@ -12254,7 +14250,7 @@ snapshots: media-query-parser@2.0.2: dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.0 media-typer@0.3.0: {} @@ -12302,7 +14298,7 @@ snapshots: micromark-util-html-tag-name: 2.0.1 micromark-util-normalize-identifier: 2.0.1 micromark-util-resolve-all: 2.0.1 - micromark-util-subtokenize: 2.0.4 + micromark-util-subtokenize: 2.0.3 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 @@ -12340,7 +14336,7 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 - micromark-extension-gfm-table@2.1.1: + micromark-extension-gfm-table@2.1.0: dependencies: devlop: 1.1.0 micromark-factory-space: 2.0.1 @@ -12365,7 +14361,7 @@ snapshots: micromark-extension-gfm-autolink-literal: 2.1.0 micromark-extension-gfm-footnote: 2.1.0 micromark-extension-gfm-strikethrough: 2.1.0 - micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-table: 2.1.0 micromark-extension-gfm-tagfilter: 2.0.0 micromark-extension-gfm-task-list-item: 2.1.0 micromark-util-combine-extensions: 2.0.1 @@ -12613,7 +14609,7 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 - micromark-util-subtokenize@2.0.4: + micromark-util-subtokenize@2.0.3: dependencies: devlop: 1.1.0 micromark-util-chunked: 2.0.1 @@ -12666,7 +14662,7 @@ snapshots: micromark-util-normalize-identifier: 2.0.1 micromark-util-resolve-all: 2.0.1 micromark-util-sanitize-uri: 2.0.1 - micromark-util-subtokenize: 2.0.4 + micromark-util-subtokenize: 2.0.3 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 transitivePeerDependencies: @@ -12694,37 +14690,57 @@ snapshots: mime@3.0.0: {} + mime@4.0.6: {} + mimic-fn@2.1.0: {} + mimic-function@5.0.1: {} + + mimic-response@1.0.1: {} + mimic-response@3.1.0: {} min-indent@1.0.1: {} - miniflare@3.20250204.0: + miniflare@3.20241106.1: dependencies: '@cspotcode/source-map-support': 0.8.1 acorn: 8.14.0 - acorn-walk: 8.3.2 + acorn-walk: 8.3.4 + capnp-ts: 0.7.0 exit-hook: 2.2.1 glob-to-regexp: 0.4.1 stoppable: 1.1.0 - undici: 5.28.5 - workerd: 1.20250204.0 + undici: 5.28.4 + workerd: 1.20241106.1 ws: 8.18.0 - youch: 3.2.3 - zod: 3.22.3 + youch: 3.3.4 + zod: 3.24.1 transitivePeerDependencies: - bufferutil + - supports-color - utf-8-validate minimalistic-assert@1.0.1: {} minimalistic-crypto-utils@1.0.1: {} + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + + minimatch@8.0.4: + dependencies: + brace-expansion: 2.0.1 + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -12739,6 +14755,14 @@ snapshots: dependencies: minipass: 3.3.6 + minipass-fetch@2.1.2: + dependencies: + minipass: 3.3.6 + minipass-sized: 1.0.3 + minizlib: 2.1.2 + optionalDependencies: + encoding: 0.1.13 + minipass-flush@1.0.5: dependencies: minipass: 3.3.6 @@ -12747,10 +14771,16 @@ snapshots: dependencies: minipass: 3.3.6 + minipass-sized@1.0.3: + dependencies: + minipass: 3.3.6 + minipass@3.3.6: dependencies: yallist: 4.0.0 + minipass@4.2.8: {} + minipass@5.0.0: {} minipass@7.1.2: {} @@ -12764,20 +14794,24 @@ snapshots: mkdirp@1.0.4: {} - mlly@1.7.4: + mlly@1.7.3: dependencies: acorn: 8.14.0 - pathe: 2.0.2 - pkg-types: 1.3.1 + pathe: 1.1.2 + pkg-types: 1.2.1 ufo: 1.5.4 modern-ahocorasick@1.1.0: {} - motion-dom@11.18.1: + morgan@1.10.0: dependencies: - motion-utils: 11.18.1 - - motion-utils@11.18.1: {} + basic-auth: 2.0.1 + debug: 2.6.9 + depd: 2.0.0 + on-finished: 2.3.0 + on-headers: 1.0.2 + transitivePeerDependencies: + - supports-color mri@1.2.0: {} @@ -12801,9 +14835,22 @@ snapshots: negotiator@0.6.3: {} + negotiator@0.6.4: {} + + node-abi@3.74.0: + dependencies: + semver: 7.6.3 + + node-addon-api@1.7.2: + optional: true + + node-api-version@0.2.0: + dependencies: + semver: 7.6.3 + node-domexception@1.0.0: {} - node-fetch-native@1.6.6: {} + node-fetch-native@1.6.4: {} node-fetch@3.3.2: dependencies: @@ -12811,9 +14858,28 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 - node-releases@2.0.19: {} + node-forge@1.3.1: {} - node-stdlib-browser@1.3.1: + node-gyp@9.4.1: + dependencies: + env-paths: 2.2.1 + exponential-backoff: 3.1.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + make-fetch-happen: 10.2.1 + nopt: 6.0.0 + npmlog: 6.0.2 + rimraf: 3.0.2 + semver: 7.6.3 + tar: 6.2.1 + which: 2.0.2 + transitivePeerDependencies: + - bluebird + - supports-color + + node-releases@2.0.18: {} + + node-stdlib-browser@1.3.0: dependencies: assert: 2.1.0 browser-resolve: 2.0.0 @@ -12843,18 +14909,24 @@ snapshots: util: 0.12.5 vm-browserify: 1.1.2 + nopt@6.0.0: + dependencies: + abbrev: 1.1.1 + normalize-package-data@5.0.0: dependencies: hosted-git-info: 6.1.3 - is-core-module: 2.16.1 - semver: 7.7.1 + is-core-module: 2.15.1 + semver: 7.6.3 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} + normalize-url@6.1.0: {} + npm-install-checks@6.3.0: dependencies: - semver: 7.7.1 + semver: 7.6.3 npm-normalize-package-bin@3.0.1: {} @@ -12862,7 +14934,7 @@ snapshots: dependencies: hosted-git-info: 6.1.3 proc-log: 3.0.0 - semver: 7.7.1 + semver: 7.6.3 validate-npm-package-name: 5.0.1 npm-pick-manifest@8.0.2: @@ -12870,38 +14942,43 @@ snapshots: npm-install-checks: 6.3.0 npm-normalize-package-bin: 3.0.1 npm-package-arg: 10.1.0 - semver: 7.7.1 + semver: 7.6.3 npm-run-path@4.0.1: dependencies: path-key: 3.1.1 - nwsapi@2.2.16: {} + npmlog@6.0.2: + dependencies: + are-we-there-yet: 3.0.1 + console-control-strings: 1.1.0 + gauge: 4.0.4 + set-blocking: 2.0.0 + + nwsapi@2.2.18: {} object-assign@4.1.1: {} - object-inspect@1.13.4: {} + object-inspect@1.13.3: {} object-is@1.1.6: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.7 define-properties: 1.2.1 object-keys@1.1.1: {} - object.assign@4.1.7: + object.assign@4.1.5: dependencies: - call-bind: 1.0.8 - call-bound: 1.0.3 + call-bind: 1.0.7 define-properties: 1.2.1 - es-object-atoms: 1.1.1 has-symbols: 1.1.0 object-keys: 1.1.1 ofetch@1.4.1: dependencies: destr: 2.0.3 - node-fetch-native: 1.6.6 + node-fetch-native: 1.6.4 ufo: 1.5.4 ohash@1.1.4: {} @@ -12914,10 +14991,16 @@ snapshots: optionalDependencies: zod: 3.24.1 + on-finished@2.3.0: + dependencies: + ee-first: 1.1.1 + on-finished@2.4.1: dependencies: ee-first: 1.1.1 + on-headers@1.0.2: {} + once@1.4.0: dependencies: wrappy: 1.0.2 @@ -12926,11 +15009,11 @@ snapshots: dependencies: mimic-fn: 2.1.0 - oniguruma-to-es@2.3.0: + oniguruma-to-es@0.7.0: dependencies: emoji-regex-xs: 1.0.0 - regex: 5.1.1 - regex-recursion: 5.1.1 + regex: 5.0.2 + regex-recursion: 4.3.0 optionator@0.9.4: dependencies: @@ -12957,6 +15040,8 @@ snapshots: outdent@0.8.0: {} + p-cancelable@2.1.1: {} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -12971,7 +15056,7 @@ snapshots: package-json-from-dist@1.0.1: {} - package-manager-detector@0.2.9: {} + package-manager-detector@0.2.6: {} pako@0.2.9: {} @@ -12990,9 +15075,10 @@ snapshots: pbkdf2: 3.1.2 safe-buffer: 5.2.1 - parse-entities@4.0.2: + parse-entities@4.0.1: dependencies: '@types/unist': 2.0.11 + character-entities: 2.0.2 character-entities-legacy: 3.0.0 character-reference-invalid: 2.0.1 decode-named-character-reference: 1.0.2 @@ -13014,6 +15100,8 @@ snapshots: path-exists@4.0.0: {} + path-is-absolute@1.0.1: {} + path-key@3.1.1: {} path-parse@1.0.7: {} @@ -13023,14 +15111,12 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - path-to-regexp@0.1.12: {} + path-to-regexp@0.1.10: {} path-to-regexp@6.3.0: {} pathe@1.1.2: {} - pathe@2.0.2: {} - pathval@2.0.0: {} pbkdf2@3.1.2: @@ -13041,12 +15127,16 @@ snapshots: safe-buffer: 5.2.1 sha.js: 2.4.11 + pe-library@0.4.1: {} + peek-stream@1.1.3: dependencies: buffer-from: 1.1.2 duplexify: 3.7.1 through2: 2.0.5 + pend@1.2.0: {} + perfect-debounce@1.0.0: {} performance-now@2.1.0: @@ -13072,68 +15162,74 @@ snapshots: dependencies: find-up: 5.0.0 - pkg-types@1.3.1: + pkg-types@1.2.1: dependencies: confbox: 0.1.8 - mlly: 1.7.4 - pathe: 2.0.2 + mlly: 1.7.3 + pathe: 1.1.2 - pnpm@9.15.5: {} - - possible-typed-array-names@1.1.0: {} - - postcss-discard-duplicates@5.1.0(postcss@8.5.2): + plist@3.1.0: dependencies: - postcss: 8.5.2 + '@xmldom/xmldom': 0.8.10 + base64-js: 1.5.1 + xmlbuilder: 15.1.1 - postcss-load-config@4.0.2(postcss@8.5.2): + pnpm@9.14.4: {} + + possible-typed-array-names@1.0.0: {} + + postcss-discard-duplicates@5.1.0(postcss@8.4.49): dependencies: - lilconfig: 3.1.3 - yaml: 2.7.0 + postcss: 8.4.49 + + postcss-load-config@4.0.2(postcss@8.4.49): + dependencies: + lilconfig: 3.1.2 + yaml: 2.6.1 optionalDependencies: - postcss: 8.5.2 + postcss: 8.4.49 - postcss-modules-extract-imports@3.1.0(postcss@8.5.2): + postcss-modules-extract-imports@3.1.0(postcss@8.4.49): dependencies: - postcss: 8.5.2 + postcss: 8.4.49 - postcss-modules-local-by-default@4.2.0(postcss@8.5.2): + postcss-modules-local-by-default@4.1.0(postcss@8.4.49): dependencies: - icss-utils: 5.1.0(postcss@8.5.2) - postcss: 8.5.2 - postcss-selector-parser: 7.1.0 + icss-utils: 5.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-selector-parser: 7.0.0 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.1(postcss@8.5.2): + postcss-modules-scope@3.2.1(postcss@8.4.49): dependencies: - postcss: 8.5.2 - postcss-selector-parser: 7.1.0 + postcss: 8.4.49 + postcss-selector-parser: 7.0.0 - postcss-modules-values@4.0.0(postcss@8.5.2): + postcss-modules-values@4.0.0(postcss@8.4.49): dependencies: - icss-utils: 5.1.0(postcss@8.5.2) - postcss: 8.5.2 + icss-utils: 5.1.0(postcss@8.4.49) + postcss: 8.4.49 - postcss-modules@6.0.1(postcss@8.5.2): + postcss-modules@6.0.1(postcss@8.4.49): dependencies: generic-names: 4.0.0 - icss-utils: 5.1.0(postcss@8.5.2) + icss-utils: 5.1.0(postcss@8.4.49) lodash.camelcase: 4.3.0 - postcss: 8.5.2 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.2) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.2) - postcss-modules-scope: 3.2.1(postcss@8.5.2) - postcss-modules-values: 4.0.0(postcss@8.5.2) + postcss: 8.4.49 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.49) + postcss-modules-local-by-default: 4.1.0(postcss@8.4.49) + postcss-modules-scope: 3.2.1(postcss@8.4.49) + postcss-modules-values: 4.0.0(postcss@8.4.49) string-hash: 1.1.3 - postcss-selector-parser@7.1.0: + postcss-selector-parser@7.0.0: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 postcss-value-parser@4.2.0: {} - postcss@8.5.2: + postcss@8.4.49: dependencies: nanoid: 3.3.8 picocolors: 1.1.1 @@ -13147,7 +15243,7 @@ snapshots: prettier@2.8.8: {} - prettier@3.5.0: {} + prettier@3.4.1: {} pretty-format@27.5.1: dependencies: @@ -13167,6 +15263,8 @@ snapshots: process@0.11.10: {} + progress@2.0.3: {} + promise-inflight@1.0.1: {} promise-retry@2.0.1: @@ -13218,16 +15316,18 @@ snapshots: qs@6.13.0: dependencies: - side-channel: 1.1.0 + side-channel: 1.0.6 - qs@6.14.0: + qs@6.13.1: dependencies: - side-channel: 1.1.0 + side-channel: 1.0.6 querystring-es3@0.2.1: {} queue-microtask@1.2.3: {} + quick-lru@5.1.1: {} + raf-schd@4.0.3: {} raf@3.4.1: @@ -13255,7 +15355,7 @@ snapshots: react-beautiful-dnd@13.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.0 css-box-model: 1.2.1 memoize-one: 5.2.1 raf-schd: 4.0.3 @@ -13267,16 +15367,16 @@ snapshots: transitivePeerDependencies: - react-native - react-chartjs-2@5.3.0(chart.js@4.4.7)(react@18.3.1): + react-chartjs-2@5.3.0(chart.js@4.4.8)(react@18.3.1): dependencies: - chart.js: 4.4.7 + chart.js: 4.4.8 react: 18.3.1 react-dnd-html5-backend@16.0.1: dependencies: dnd-core: 16.0.1 - react-dnd@16.0.1(@types/hoist-non-react-statics@3.3.6)(@types/node@22.13.1)(@types/react@18.3.18)(react@18.3.1): + react-dnd@16.0.1(@types/hoist-non-react-statics@3.3.6)(@types/node@22.10.1)(@types/react@18.3.12)(react@18.3.1): dependencies: '@react-dnd/invariant': 4.0.2 '@react-dnd/shallowequal': 4.0.2 @@ -13286,8 +15386,8 @@ snapshots: react: 18.3.1 optionalDependencies: '@types/hoist-non-react-statics': 3.3.6 - '@types/node': 22.13.1 - '@types/react': 18.3.18 + '@types/node': 22.10.1 + '@types/react': 18.3.12 react-dom@18.3.1(react@18.3.1): dependencies: @@ -13300,7 +15400,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-icons@5.4.0(react@18.3.1): + react-icons@5.5.0(react@18.3.1): dependencies: react: 18.3.1 @@ -13308,10 +15408,10 @@ snapshots: react-is@17.0.2: {} - react-markdown@9.0.3(@types/react@18.3.18)(react@18.3.1): + react-markdown@9.0.1(@types/react@18.3.12)(react@18.3.1): dependencies: '@types/hast': 3.0.4 - '@types/react': 18.3.18 + '@types/react': 18.3.12 devlop: 1.1.0 hast-util-to-jsx-runtime: 2.3.2 html-url-attributes: 3.0.1 @@ -13327,7 +15427,7 @@ snapshots: react-redux@7.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.0 '@types/react-redux': 7.1.34 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 @@ -13339,49 +15439,77 @@ snapshots: react-refresh@0.14.2: {} - react-remove-scroll-bar@2.3.8(@types/react@18.3.18)(react@18.3.1): + react-remove-scroll-bar@2.3.6(@types/react@18.3.12)(react@18.3.1): dependencies: react: 18.3.1 - react-style-singleton: 2.2.3(@types/react@18.3.18)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.12)(react@18.3.1) tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.12 - react-remove-scroll@2.6.3(@types/react@18.3.18)(react@18.3.1): + react-remove-scroll-bar@2.3.8(@types/react@18.3.12)(react@18.3.1): dependencies: react: 18.3.1 - react-remove-scroll-bar: 2.3.8(@types/react@18.3.18)(react@18.3.1) - react-style-singleton: 2.2.3(@types/react@18.3.18)(react@18.3.1) + react-style-singleton: 2.2.3(@types/react@18.3.12)(react@18.3.1) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@18.3.18)(react@18.3.1) - use-sidecar: 1.1.3(@types/react@18.3.18)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.12 + + react-remove-scroll@2.6.0(@types/react@18.3.12)(react@18.3.1): + dependencies: + react: 18.3.1 + react-remove-scroll-bar: 2.3.6(@types/react@18.3.12)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.12)(react@18.3.1) + tslib: 2.8.1 + use-callback-ref: 1.3.2(@types/react@18.3.12)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.3.12)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + + react-remove-scroll@2.6.3(@types/react@18.3.12)(react@18.3.1): + dependencies: + react: 18.3.1 + react-remove-scroll-bar: 2.3.8(@types/react@18.3.12)(react@18.3.1) + react-style-singleton: 2.2.3(@types/react@18.3.12)(react@18.3.1) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@18.3.12)(react@18.3.1) + use-sidecar: 1.1.3(@types/react@18.3.12)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 react-resizable-panels@2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-router-dom@6.29.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-router-dom@6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@remix-run/router': 1.22.0 + '@remix-run/router': 1.23.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-router: 6.29.0(react@18.3.1) + react-router: 6.30.0(react@18.3.1) - react-router@6.29.0(react@18.3.1): + react-router@6.30.0(react@18.3.1): dependencies: - '@remix-run/router': 1.22.0 + '@remix-run/router': 1.23.0 react: 18.3.1 - react-style-singleton@2.2.3(@types/react@18.3.18)(react@18.3.1): + react-style-singleton@2.2.1(@types/react@18.3.12)(react@18.3.1): + dependencies: + get-nonce: 1.0.1 + invariant: 2.2.4 + react: 18.3.1 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.12 + + react-style-singleton@2.2.3(@types/react@18.3.12)(react@18.3.1): dependencies: get-nonce: 1.0.1 react: 18.3.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.12 react-toastify@10.0.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: @@ -13393,6 +15521,12 @@ snapshots: dependencies: loose-envify: 1.4.0 + read-binary-file-arch@1.0.6: + dependencies: + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 @@ -13409,10 +15543,16 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 + readdir-glob@1.1.3: + dependencies: + minimatch: 5.1.6 + readdirp@3.6.0: dependencies: picomatch: 2.3.1 + readdirp@4.0.2: {} + redent@3.0.0: dependencies: indent-string: 4.0.0 @@ -13420,21 +15560,20 @@ snapshots: redux@4.2.1: dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.0 regenerator-runtime@0.13.11: optional: true regenerator-runtime@0.14.1: {} - regex-recursion@5.1.1: + regex-recursion@4.3.0: dependencies: - regex: 5.1.1 regex-utilities: 2.3.0 regex-utilities@2.3.0: {} - regex@5.1.1: + regex@5.0.2: dependencies: regex-utilities: 2.3.0 @@ -13456,10 +15595,10 @@ snapshots: micromark-extension-frontmatter: 1.1.1 unified: 10.1.2 - remark-gfm@4.0.1: + remark-gfm@4.0.0: dependencies: '@types/mdast': 4.0.4 - mdast-util-gfm: 3.1.0 + mdast-util-gfm: 3.0.0 micromark-extension-gfm: 3.0.0 remark-parse: 11.0.0 remark-stringify: 11.0.0 @@ -13519,38 +15658,52 @@ snapshots: mdast-util-to-markdown: 2.1.2 unified: 11.0.5 - remix-island@0.2.0(@remix-run/react@2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/server-runtime@2.15.3(typescript@5.7.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + remix-island@0.2.0(@remix-run/react@2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2))(@remix-run/server-runtime@2.16.0(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@remix-run/react': 2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) - '@remix-run/server-runtime': 2.15.3(typescript@5.7.3) + '@remix-run/react': 2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2) + '@remix-run/server-runtime': 2.16.0(typescript@5.7.2) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - remix-utils@7.7.0(@remix-run/cloudflare@2.15.3(@cloudflare/workers-types@4.20250204.0)(typescript@5.7.3))(@remix-run/node@2.15.3(typescript@5.7.3))(@remix-run/react@2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@remix-run/router@1.22.0)(react@18.3.1)(zod@3.24.1): + remix-utils@7.7.0(@remix-run/cloudflare@2.16.0(@cloudflare/workers-types@4.20241127.0)(typescript@5.7.2))(@remix-run/node@2.15.3(typescript@5.7.2))(@remix-run/react@2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2))(@remix-run/router@1.23.0)(react@18.3.1)(zod@3.24.1): dependencies: - type-fest: 4.34.1 + type-fest: 4.30.0 optionalDependencies: - '@remix-run/cloudflare': 2.15.3(@cloudflare/workers-types@4.20250204.0)(typescript@5.7.3) - '@remix-run/node': 2.15.3(typescript@5.7.3) - '@remix-run/react': 2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3) - '@remix-run/router': 1.22.0 + '@remix-run/cloudflare': 2.16.0(@cloudflare/workers-types@4.20241127.0)(typescript@5.7.2) + '@remix-run/node': 2.15.3(typescript@5.7.2) + '@remix-run/react': 2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2) + '@remix-run/router': 1.23.0 react: 18.3.1 zod: 3.24.1 + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + require-like@0.1.2: {} + resedit@1.7.2: + dependencies: + pe-library: 0.4.1 + + resolve-alpn@1.2.1: {} + resolve-from@4.0.0: {} resolve-pkg-maps@1.0.0: {} resolve.exports@2.0.3: {} - resolve@1.22.10: + resolve@1.22.8: dependencies: - is-core-module: 2.16.1 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + responselike@2.0.1: + dependencies: + lowercase-keys: 2.0.0 + restore-cursor@3.1.0: dependencies: onetime: 5.1.2 @@ -13563,18 +15716,28 @@ snapshots: rgbcolor@1.0.1: optional: true + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + rimraf@4.4.1: + dependencies: + glob: 9.3.5 + ripemd160@2.0.2: dependencies: hash-base: 3.0.5 inherits: 2.0.4 - rollup-plugin-dts@5.3.1(rollup@3.29.5)(typescript@5.7.3): + roarr@2.15.4: dependencies: - magic-string: 0.30.17 - rollup: 3.29.5 - typescript: 5.7.3 - optionalDependencies: - '@babel/code-frame': 7.26.2 + boolean: 3.2.0 + detect-node: 2.1.0 + globalthis: 1.0.4 + json-stringify-safe: 5.0.1 + semver-compare: 1.0.0 + sprintf-js: 1.1.3 + optional: true rollup-plugin-inject@3.0.2: dependencies: @@ -13590,33 +15753,28 @@ snapshots: dependencies: estree-walker: 0.6.1 - rollup@3.29.5: - optionalDependencies: - fsevents: 2.3.3 - - rollup@4.34.6: + rollup@4.28.0: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.34.6 - '@rollup/rollup-android-arm64': 4.34.6 - '@rollup/rollup-darwin-arm64': 4.34.6 - '@rollup/rollup-darwin-x64': 4.34.6 - '@rollup/rollup-freebsd-arm64': 4.34.6 - '@rollup/rollup-freebsd-x64': 4.34.6 - '@rollup/rollup-linux-arm-gnueabihf': 4.34.6 - '@rollup/rollup-linux-arm-musleabihf': 4.34.6 - '@rollup/rollup-linux-arm64-gnu': 4.34.6 - '@rollup/rollup-linux-arm64-musl': 4.34.6 - '@rollup/rollup-linux-loongarch64-gnu': 4.34.6 - '@rollup/rollup-linux-powerpc64le-gnu': 4.34.6 - '@rollup/rollup-linux-riscv64-gnu': 4.34.6 - '@rollup/rollup-linux-s390x-gnu': 4.34.6 - '@rollup/rollup-linux-x64-gnu': 4.34.6 - '@rollup/rollup-linux-x64-musl': 4.34.6 - '@rollup/rollup-win32-arm64-msvc': 4.34.6 - '@rollup/rollup-win32-ia32-msvc': 4.34.6 - '@rollup/rollup-win32-x64-msvc': 4.34.6 + '@rollup/rollup-android-arm-eabi': 4.28.0 + '@rollup/rollup-android-arm64': 4.28.0 + '@rollup/rollup-darwin-arm64': 4.28.0 + '@rollup/rollup-darwin-x64': 4.28.0 + '@rollup/rollup-freebsd-arm64': 4.28.0 + '@rollup/rollup-freebsd-x64': 4.28.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.28.0 + '@rollup/rollup-linux-arm-musleabihf': 4.28.0 + '@rollup/rollup-linux-arm64-gnu': 4.28.0 + '@rollup/rollup-linux-arm64-musl': 4.28.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.28.0 + '@rollup/rollup-linux-riscv64-gnu': 4.28.0 + '@rollup/rollup-linux-s390x-gnu': 4.28.0 + '@rollup/rollup-linux-x64-gnu': 4.28.0 + '@rollup/rollup-linux-x64-musl': 4.28.0 + '@rollup/rollup-win32-arm64-msvc': 4.28.0 + '@rollup/rollup-win32-ia32-msvc': 4.28.0 + '@rollup/rollup-win32-x64-msvc': 4.28.0 fsevents: 2.3.3 rrweb-cssom@0.8.0: {} @@ -13637,77 +15795,75 @@ snapshots: safe-buffer@5.2.1: {} - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.3 - es-errors: 1.3.0 - is-regex: 1.2.1 - safer-buffer@2.1.2: {} - sass-embedded-android-arm64@1.83.4: - optional: true - - sass-embedded-android-arm@1.83.4: - optional: true - - sass-embedded-android-ia32@1.83.4: - optional: true - - sass-embedded-android-riscv64@1.83.4: - optional: true - - sass-embedded-android-x64@1.83.4: - optional: true - - sass-embedded-darwin-arm64@1.83.4: - optional: true - - sass-embedded-darwin-x64@1.83.4: - optional: true - - sass-embedded-linux-arm64@1.83.4: - optional: true - - sass-embedded-linux-arm@1.83.4: - optional: true - - sass-embedded-linux-ia32@1.83.4: - optional: true - - sass-embedded-linux-musl-arm64@1.83.4: - optional: true - - sass-embedded-linux-musl-arm@1.83.4: - optional: true - - sass-embedded-linux-musl-ia32@1.83.4: - optional: true - - sass-embedded-linux-musl-riscv64@1.83.4: - optional: true - - sass-embedded-linux-musl-x64@1.83.4: - optional: true - - sass-embedded-linux-riscv64@1.83.4: - optional: true - - sass-embedded-linux-x64@1.83.4: - optional: true - - sass-embedded-win32-arm64@1.83.4: - optional: true - - sass-embedded-win32-ia32@1.83.4: - optional: true - - sass-embedded-win32-x64@1.83.4: - optional: true - - sass-embedded@1.83.4: + sanitize-filename@1.6.3: dependencies: - '@bufbuild/protobuf': 2.2.3 + truncate-utf8-bytes: 1.0.2 + + sass-embedded-android-arm64@1.81.0: + optional: true + + sass-embedded-android-arm@1.81.0: + optional: true + + sass-embedded-android-ia32@1.81.0: + optional: true + + sass-embedded-android-riscv64@1.81.0: + optional: true + + sass-embedded-android-x64@1.81.0: + optional: true + + sass-embedded-darwin-arm64@1.81.0: + optional: true + + sass-embedded-darwin-x64@1.81.0: + optional: true + + sass-embedded-linux-arm64@1.81.0: + optional: true + + sass-embedded-linux-arm@1.81.0: + optional: true + + sass-embedded-linux-ia32@1.81.0: + optional: true + + sass-embedded-linux-musl-arm64@1.81.0: + optional: true + + sass-embedded-linux-musl-arm@1.81.0: + optional: true + + sass-embedded-linux-musl-ia32@1.81.0: + optional: true + + sass-embedded-linux-musl-riscv64@1.81.0: + optional: true + + sass-embedded-linux-musl-x64@1.81.0: + optional: true + + sass-embedded-linux-riscv64@1.81.0: + optional: true + + sass-embedded-linux-x64@1.81.0: + optional: true + + sass-embedded-win32-arm64@1.81.0: + optional: true + + sass-embedded-win32-ia32@1.81.0: + optional: true + + sass-embedded-win32-x64@1.81.0: + optional: true + + sass-embedded@1.81.0: + dependencies: + '@bufbuild/protobuf': 2.2.2 buffer-builder: 0.2.0 colorjs.io: 0.5.2 immutable: 5.0.3 @@ -13716,26 +15872,28 @@ snapshots: sync-child-process: 1.0.2 varint: 6.0.0 optionalDependencies: - sass-embedded-android-arm: 1.83.4 - sass-embedded-android-arm64: 1.83.4 - sass-embedded-android-ia32: 1.83.4 - sass-embedded-android-riscv64: 1.83.4 - sass-embedded-android-x64: 1.83.4 - sass-embedded-darwin-arm64: 1.83.4 - sass-embedded-darwin-x64: 1.83.4 - sass-embedded-linux-arm: 1.83.4 - sass-embedded-linux-arm64: 1.83.4 - sass-embedded-linux-ia32: 1.83.4 - sass-embedded-linux-musl-arm: 1.83.4 - sass-embedded-linux-musl-arm64: 1.83.4 - sass-embedded-linux-musl-ia32: 1.83.4 - sass-embedded-linux-musl-riscv64: 1.83.4 - sass-embedded-linux-musl-x64: 1.83.4 - sass-embedded-linux-riscv64: 1.83.4 - sass-embedded-linux-x64: 1.83.4 - sass-embedded-win32-arm64: 1.83.4 - sass-embedded-win32-ia32: 1.83.4 - sass-embedded-win32-x64: 1.83.4 + sass-embedded-android-arm: 1.81.0 + sass-embedded-android-arm64: 1.81.0 + sass-embedded-android-ia32: 1.81.0 + sass-embedded-android-riscv64: 1.81.0 + sass-embedded-android-x64: 1.81.0 + sass-embedded-darwin-arm64: 1.81.0 + sass-embedded-darwin-x64: 1.81.0 + sass-embedded-linux-arm: 1.81.0 + sass-embedded-linux-arm64: 1.81.0 + sass-embedded-linux-ia32: 1.81.0 + sass-embedded-linux-musl-arm: 1.81.0 + sass-embedded-linux-musl-arm64: 1.81.0 + sass-embedded-linux-musl-ia32: 1.81.0 + sass-embedded-linux-musl-riscv64: 1.81.0 + sass-embedded-linux-musl-x64: 1.81.0 + sass-embedded-linux-riscv64: 1.81.0 + sass-embedded-linux-x64: 1.81.0 + sass-embedded-win32-arm64: 1.81.0 + sass-embedded-win32-ia32: 1.81.0 + sass-embedded-win32-x64: 1.81.0 + + sax@1.4.1: {} saxes@6.0.0: dependencies: @@ -13747,9 +15905,17 @@ snapshots: secure-json-parse@2.7.0: {} + selfsigned@2.4.1: + dependencies: + '@types/node-forge': 1.3.11 + node-forge: 1.3.1 + + semver-compare@1.0.0: + optional: true + semver@6.3.1: {} - semver@7.7.1: {} + semver@7.6.3: {} send@0.19.0: dependencies: @@ -13769,6 +15935,11 @@ snapshots: transitivePeerDependencies: - supports-color + serialize-error@7.0.1: + dependencies: + type-fest: 0.13.1 + optional: true + serve-static@1.16.2: dependencies: encodeurl: 2.0.0 @@ -13778,6 +15949,8 @@ snapshots: transitivePeerDependencies: - supports-color + set-blocking@2.0.0: {} + set-cookie-parser@2.7.1: {} set-function-length@1.2.2: @@ -13785,8 +15958,8 @@ snapshots: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.7 - gopd: 1.2.0 + get-intrinsic: 1.2.4 + gopd: 1.1.0 has-property-descriptors: 1.0.2 setimmediate@1.0.5: {} @@ -13798,77 +15971,29 @@ snapshots: inherits: 2.0.4 safe-buffer: 5.2.1 - sharp@0.33.5: - dependencies: - color: 4.2.3 - detect-libc: 2.0.3 - semver: 7.7.1 - optionalDependencies: - '@img/sharp-darwin-arm64': 0.33.5 - '@img/sharp-darwin-x64': 0.33.5 - '@img/sharp-libvips-darwin-arm64': 1.0.4 - '@img/sharp-libvips-darwin-x64': 1.0.4 - '@img/sharp-libvips-linux-arm': 1.0.5 - '@img/sharp-libvips-linux-arm64': 1.0.4 - '@img/sharp-libvips-linux-s390x': 1.0.4 - '@img/sharp-libvips-linux-x64': 1.0.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - '@img/sharp-linux-arm': 0.33.5 - '@img/sharp-linux-arm64': 0.33.5 - '@img/sharp-linux-s390x': 0.33.5 - '@img/sharp-linux-x64': 0.33.5 - '@img/sharp-linuxmusl-arm64': 0.33.5 - '@img/sharp-linuxmusl-x64': 0.33.5 - '@img/sharp-wasm32': 0.33.5 - '@img/sharp-win32-ia32': 0.33.5 - '@img/sharp-win32-x64': 0.33.5 - optional: true - shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 shebang-regex@3.0.0: {} - shiki@1.29.2: + shell-quote@1.8.2: {} + + shiki@1.24.0: dependencies: - '@shikijs/core': 1.29.2 - '@shikijs/engine-javascript': 1.29.2 - '@shikijs/engine-oniguruma': 1.29.2 - '@shikijs/langs': 1.29.2 - '@shikijs/themes': 1.29.2 - '@shikijs/types': 1.29.2 - '@shikijs/vscode-textmate': 10.0.1 + '@shikijs/core': 1.24.0 + '@shikijs/engine-javascript': 1.24.0 + '@shikijs/engine-oniguruma': 1.24.0 + '@shikijs/types': 1.24.0 + '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 - side-channel-list@1.0.0: + side-channel@1.0.6: dependencies: + call-bind: 1.0.7 es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.7 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.7 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.0 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 + get-intrinsic: 1.2.4 + object-inspect: 1.13.3 siginfo@2.0.0: {} @@ -13884,10 +16009,9 @@ snapshots: once: 1.4.0 simple-concat: 1.0.1 - simple-swizzle@0.2.2: + simple-update-notifier@2.0.0: dependencies: - is-arrayish: 0.3.2 - optional: true + semver: 7.6.3 sirv@2.0.4: dependencies: @@ -13895,6 +16019,28 @@ snapshots: mrmime: 2.0.0 totalist: 3.0.1 + slice-ansi@3.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + optional: true + + smart-buffer@4.2.0: {} + + socks-proxy-agent@7.0.0: + dependencies: + agent-base: 6.0.2 + debug: 4.4.0 + socks: 2.8.3 + transitivePeerDependencies: + - supports-color + + socks@2.8.3: + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + source-map-js@1.2.1: {} source-map-support@0.5.21: @@ -13910,24 +16056,32 @@ snapshots: space-separated-tokens@2.0.2: {} + spawn-command@0.0.2: {} + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.21 + spdx-license-ids: 3.0.20 spdx-exceptions@2.5.0: {} spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.21 + spdx-license-ids: 3.0.20 - spdx-license-ids@3.0.21: {} + spdx-license-ids@3.0.20: {} + + sprintf-js@1.1.3: {} ssri@10.0.6: dependencies: minipass: 7.1.2 + ssri@9.0.1: + dependencies: + minipass: 3.3.6 + stackback@0.0.2: {} stackblur-canvas@2.7.0: @@ -13938,6 +16092,8 @@ snapshots: as-table: 1.0.55 get-source: 2.0.12 + stat-mode@1.0.0: {} + statuses@2.0.1: {} std-env@3.8.0: {} @@ -14007,6 +16163,8 @@ snapshots: strnum@1.0.5: {} + stubborn-fs@1.2.5: {} + style-mod@4.1.2: {} style-to-object@0.4.4: @@ -14017,6 +16175,12 @@ snapshots: dependencies: inline-style-parser: 0.2.4 + sumchecker@3.0.1: + dependencies: + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -14030,11 +16194,11 @@ snapshots: svg-pathdata@6.0.3: optional: true - swr@2.3.2(react@18.3.1): + swr@2.2.5(react@18.3.1): dependencies: - dequal: 2.0.3 + client-only: 0.0.1 react: 18.3.1 - use-sync-external-store: 1.4.0(react@18.3.1) + use-sync-external-store: 1.2.2(react@18.3.1) symbol-tree@3.2.4: {} @@ -14057,7 +16221,7 @@ snapshots: tailwind-merge@2.6.0: {} - tar-fs@2.1.2: + tar-fs@2.1.1: dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 @@ -14081,6 +16245,11 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 + temp-file@3.4.0: + dependencies: + async-exit-hook: 2.0.1 + fs-extra: 10.1.0 + text-segmentation@1.0.3: dependencies: utrie: 1.0.2 @@ -14103,9 +16272,11 @@ snapshots: tiny-invariant@1.3.3: {} + tiny-typed-emitter@2.1.0: {} + tinybench@2.9.0: {} - tinyexec@0.3.2: {} + tinyexec@0.3.1: {} tinypool@1.0.2: {} @@ -14113,11 +16284,17 @@ snapshots: tinyspy@3.0.2: {} - tldts-core@6.1.78: {} + tldts-core@6.1.83: {} - tldts@6.1.78: + tldts@6.1.83: dependencies: - tldts-core: 6.1.78 + tldts-core: 6.1.83 + + tmp-promise@3.0.3: + dependencies: + tmp: 0.2.3 + + tmp@0.2.3: {} to-regex-range@5.0.1: dependencies: @@ -14129,25 +16306,31 @@ snapshots: totalist@3.0.1: {} - tough-cookie@5.1.1: + tough-cookie@5.1.2: dependencies: - tldts: 6.1.78 + tldts: 6.1.83 tr46@5.0.0: dependencies: punycode: 2.3.1 + tree-kill@1.2.2: {} + trim-lines@3.0.1: {} trough@2.2.0: {} - ts-api-utils@2.0.1(typescript@5.7.3): + truncate-utf8-bytes@1.0.2: dependencies: - typescript: 5.7.3 + utf8-byte-length: 1.0.5 - tsconfck@3.1.5(typescript@5.7.3): + ts-api-utils@1.4.3(typescript@5.7.2): + dependencies: + typescript: 5.7.2 + + tsconfck@3.1.4(typescript@5.7.2): optionalDependencies: - typescript: 5.7.3 + typescript: 5.7.2 tsconfig-paths@4.2.0: dependencies: @@ -14160,7 +16343,7 @@ snapshots: tsx@4.19.2: dependencies: esbuild: 0.23.1 - get-tsconfig: 4.10.0 + get-tsconfig: 4.8.1 optionalDependencies: fsevents: 2.3.3 @@ -14172,27 +16355,33 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-fest@4.34.1: {} + type-fest@0.13.1: + optional: true + + type-fest@4.30.0: {} type-is@1.6.18: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 - typescript-eslint@8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3): + typescript-eslint@8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3))(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) - '@typescript-eslint/parser': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.0(eslint@9.20.1(jiti@1.21.7))(typescript@5.7.3) - eslint: 9.20.1(jiti@1.21.7) - typescript: 5.7.3 + '@typescript-eslint/eslint-plugin': 8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2))(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) + '@typescript-eslint/parser': 8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) + '@typescript-eslint/utils': 8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) + eslint: 9.16.0(jiti@1.21.6) + optionalDependencies: + typescript: 5.7.2 transitivePeerDependencies: - supports-color - typescript@5.7.3: {} + typescript@5.7.2: {} ufo@1.5.4: {} + uint8array-extras@1.4.0: {} + unconfig@0.5.5: dependencies: '@antfu/utils': 0.7.10 @@ -14201,18 +16390,19 @@ snapshots: transitivePeerDependencies: - supports-color + undici-types@6.19.8: {} + undici-types@6.20.0: {} - undici@5.28.5: + undici@5.28.4: dependencies: '@fastify/busboy': 2.1.1 - undici@6.21.1: {} + undici@6.21.0: {} - unenv@2.0.0-rc.1: + unenv-nightly@2.0.0-20241121-161142-806b5c0: dependencies: defu: 6.1.4 - mlly: 1.7.4 ohash: 1.1.4 pathe: 1.1.2 ufo: 1.5.4 @@ -14237,10 +16427,18 @@ snapshots: trough: 2.2.0 vfile: 6.0.3 + unique-filename@2.0.1: + dependencies: + unique-slug: 3.0.0 + unique-filename@3.0.0: dependencies: unique-slug: 4.0.0 + unique-slug@3.0.0: + dependencies: + imurmurhash: 0.1.4 + unique-slug@4.0.0: dependencies: imurmurhash: 0.1.4 @@ -14304,15 +16502,17 @@ snapshots: universal-user-agent@7.0.2: {} + universalify@0.1.2: {} + universalify@2.0.1: {} - unocss@0.61.9(postcss@8.5.2)(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)): + unocss@0.61.9(postcss@8.4.49)(rollup@4.28.0)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)): dependencies: - '@unocss/astro': 0.61.9(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) - '@unocss/cli': 0.61.9(rollup@3.29.5) + '@unocss/astro': 0.61.9(rollup@4.28.0)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)) + '@unocss/cli': 0.61.9(rollup@4.28.0) '@unocss/core': 0.61.9 '@unocss/extractor-arbitrary-variants': 0.61.9 - '@unocss/postcss': 0.61.9(postcss@8.5.2) + '@unocss/postcss': 0.61.9(postcss@8.4.49) '@unocss/preset-attributify': 0.61.9 '@unocss/preset-icons': 0.61.9 '@unocss/preset-mini': 0.61.9 @@ -14327,9 +16527,9 @@ snapshots: '@unocss/transformer-compile-class': 0.61.9 '@unocss/transformer-directives': 0.61.9 '@unocss/transformer-variant-group': 0.61.9 - '@unocss/vite': 0.61.9(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) + '@unocss/vite': 0.61.9(rollup@4.28.0)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)) optionalDependencies: - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) + vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) transitivePeerDependencies: - postcss - rollup @@ -14337,9 +16537,9 @@ snapshots: unpipe@1.0.0: {} - update-browserslist-db@1.1.2(browserslist@4.24.4): + update-browserslist-db@1.1.1(browserslist@4.24.2): dependencies: - browserslist: 4.24.4 + browserslist: 4.24.2 escalade: 3.2.0 picocolors: 1.1.1 @@ -14350,40 +16550,57 @@ snapshots: url@0.11.4: dependencies: punycode: 1.4.1 - qs: 6.14.0 + qs: 6.13.1 - use-callback-ref@1.3.3(@types/react@18.3.18)(react@18.3.1): + use-callback-ref@1.3.2(@types/react@18.3.12)(react@18.3.1): dependencies: react: 18.3.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.12 + + use-callback-ref@1.3.3(@types/react@18.3.12)(react@18.3.1): + dependencies: + react: 18.3.1 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.12 use-memo-one@1.1.3(react@18.3.1): dependencies: react: 18.3.1 - use-sidecar@1.1.3(@types/react@18.3.18)(react@18.3.1): + use-sidecar@1.1.2(@types/react@18.3.12)(react@18.3.1): dependencies: detect-node-es: 1.1.0 react: 18.3.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.12 - use-sync-external-store@1.4.0(react@18.3.1): + use-sidecar@1.1.3(@types/react@18.3.12)(react@18.3.1): + dependencies: + detect-node-es: 1.1.0 + react: 18.3.1 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.12 + + use-sync-external-store@1.2.2(react@18.3.1): dependencies: react: 18.3.1 + utf8-byte-length@1.0.5: {} + util-deprecate@1.0.2: {} util@0.12.5: dependencies: inherits: 2.0.4 - is-arguments: 1.2.0 - is-generator-function: 1.1.0 - is-typed-array: 1.1.15 - which-typed-array: 1.1.18 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.16 utils-merge@1.0.1: {} @@ -14401,9 +16618,9 @@ snapshots: kleur: 4.1.5 sade: 1.8.1 - valibot@0.41.0(typescript@5.7.3): + valibot@0.41.0(typescript@5.7.2): optionalDependencies: - typescript: 5.7.3 + typescript: 5.7.2 validate-npm-package-license@3.0.4: dependencies: @@ -14416,6 +16633,13 @@ snapshots: vary@1.1.2: {} + verror@1.10.1: + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.4.1 + optional: true + version-range@4.14.0: {} vfile-location@5.0.3: @@ -14445,13 +16669,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@1.6.1(@types/node@22.13.1)(sass-embedded@1.83.4): + vite-node@1.6.0(@types/node@22.10.1)(sass-embedded@1.81.0): dependencies: cac: 6.7.14 - debug: 4.4.0 + debug: 4.3.7 pathe: 1.1.2 picocolors: 1.1.1 - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) + vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) transitivePeerDependencies: - '@types/node' - less @@ -14463,13 +16687,31 @@ snapshots: - supports-color - terser - vite-node@2.1.9(@types/node@22.13.1)(sass-embedded@1.83.4): + vite-node@2.1.8(@types/node@22.10.1)(sass-embedded@1.81.0): + dependencies: + cac: 6.7.14 + debug: 4.3.7 + es-module-lexer: 1.5.4 + pathe: 1.1.2 + vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + vite-node@3.0.0-beta.2(@types/node@22.10.1)(sass-embedded@1.81.0): dependencies: cac: 6.7.14 debug: 4.4.0 - es-module-lexer: 1.6.0 + es-module-lexer: 1.5.4 pathe: 1.1.2 - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) + vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) transitivePeerDependencies: - '@types/node' - less @@ -14481,63 +16723,67 @@ snapshots: - supports-color - terser - vite-plugin-node-polyfills@0.22.0(rollup@3.29.5)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)): + vite-plugin-copy@0.1.6: dependencies: - '@rollup/plugin-inject': 5.0.5(rollup@3.29.5) - node-stdlib-browser: 1.3.1 - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) + fast-glob: 3.3.2 + + vite-plugin-node-polyfills@0.22.0(rollup@4.28.0)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)): + dependencies: + '@rollup/plugin-inject': 5.0.5(rollup@4.28.0) + node-stdlib-browser: 1.3.0 + vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) transitivePeerDependencies: - rollup - vite-plugin-optimize-css-modules@1.2.0(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)): + vite-plugin-optimize-css-modules@1.1.0(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)): dependencies: - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) + vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) - vite-tsconfig-paths@4.3.2(typescript@5.7.3)(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)): + vite-tsconfig-paths@4.3.2(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)): dependencies: - debug: 4.4.0 + debug: 4.3.7 globrex: 0.1.2 - tsconfck: 3.1.5(typescript@5.7.3) + tsconfck: 3.1.4(typescript@5.7.2) optionalDependencies: - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) + vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) transitivePeerDependencies: - supports-color - typescript - vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4): + vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0): dependencies: esbuild: 0.21.5 - postcss: 8.5.2 - rollup: 4.34.6 + postcss: 8.4.49 + rollup: 4.28.0 optionalDependencies: - '@types/node': 22.13.1 + '@types/node': 22.10.1 fsevents: 2.3.3 - sass-embedded: 1.83.4 + sass-embedded: 1.81.0 - vitest@2.1.9(@types/node@22.13.1)(jsdom@26.0.0)(sass-embedded@1.83.4): + vitest@2.1.8(@types/node@22.10.1)(jsdom@26.0.0)(sass-embedded@1.81.0): dependencies: - '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(vite@5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4)) - '@vitest/pretty-format': 2.1.9 - '@vitest/runner': 2.1.9 - '@vitest/snapshot': 2.1.9 - '@vitest/spy': 2.1.9 - '@vitest/utils': 2.1.9 + '@vitest/expect': 2.1.8 + '@vitest/mocker': 2.1.8(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)) + '@vitest/pretty-format': 2.1.8 + '@vitest/runner': 2.1.8 + '@vitest/snapshot': 2.1.8 + '@vitest/spy': 2.1.8 + '@vitest/utils': 2.1.8 chai: 5.1.2 - debug: 4.4.0 + debug: 4.3.7 expect-type: 1.1.0 - magic-string: 0.30.17 + magic-string: 0.30.14 pathe: 1.1.2 std-env: 3.8.0 tinybench: 2.9.0 - tinyexec: 0.3.2 + tinyexec: 0.3.1 tinypool: 1.0.2 tinyrainbow: 1.2.0 - vite: 5.4.14(@types/node@22.13.1)(sass-embedded@1.83.4) - vite-node: 2.1.9(@types/node@22.13.1)(sass-embedded@1.83.4) + vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) + vite-node: 2.1.8(@types/node@22.10.1)(sass-embedded@1.81.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.13.1 + '@types/node': 22.10.1 jsdom: 26.0.0 transitivePeerDependencies: - less @@ -14585,13 +16831,14 @@ snapshots: tr46: 5.0.0 webidl-conversions: 7.0.0 - which-typed-array@1.1.18: + when-exit@2.1.4: {} + + which-typed-array@1.1.16: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.3 - for-each: 0.3.5 - gopd: 1.2.0 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.1.0 has-tostringtag: 1.0.2 which@2.0.2: @@ -14607,33 +16854,47 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 + wide-align@1.1.5: + dependencies: + string-width: 4.2.3 + word-wrap@1.2.5: {} - workerd@1.20250204.0: + workerd@1.20241106.1: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20250204.0 - '@cloudflare/workerd-darwin-arm64': 1.20250204.0 - '@cloudflare/workerd-linux-64': 1.20250204.0 - '@cloudflare/workerd-linux-arm64': 1.20250204.0 - '@cloudflare/workerd-windows-64': 1.20250204.0 + '@cloudflare/workerd-darwin-64': 1.20241106.1 + '@cloudflare/workerd-darwin-arm64': 1.20241106.1 + '@cloudflare/workerd-linux-64': 1.20241106.1 + '@cloudflare/workerd-linux-arm64': 1.20241106.1 + '@cloudflare/workerd-windows-64': 1.20241106.1 - wrangler@3.108.0(@cloudflare/workers-types@4.20250204.0): + wrangler@3.91.0(@cloudflare/workers-types@4.20241127.0): dependencies: '@cloudflare/kv-asset-handler': 0.3.4 + '@cloudflare/workers-shared': 0.9.0 '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19) '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19) blake3-wasm: 2.1.5 + chokidar: 4.0.1 + date-fns: 4.1.0 esbuild: 0.17.19 - miniflare: 3.20250204.0 + itty-time: 1.0.6 + miniflare: 3.20241106.1 + nanoid: 3.3.8 path-to-regexp: 6.3.0 - unenv: 2.0.0-rc.1 - workerd: 1.20250204.0 + resolve: 1.22.8 + resolve.exports: 2.0.3 + selfsigned: 2.4.1 + source-map: 0.6.1 + unenv: unenv-nightly@2.0.0-20241121-161142-806b5c0 + workerd: 1.20241106.1 + xxhash-wasm: 1.1.0 optionalDependencies: - '@cloudflare/workers-types': 4.20250204.0 + '@cloudflare/workers-types': 4.20241127.0 fsevents: 2.3.3 - sharp: 0.33.5 transitivePeerDependencies: - bufferutil + - supports-color - utf-8-validate wrap-ansi@7.0.0: @@ -14656,36 +16917,63 @@ snapshots: xml-name-validator@5.0.0: {} + xmlbuilder@15.1.1: {} + xmlchars@2.2.0: {} xtend@4.0.2: {} + xxhash-wasm@1.1.0: {} + + y18n@5.0.8: {} + yallist@3.1.1: {} yallist@4.0.0: {} - yaml@2.7.0: {} + yaml@2.6.1: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 yocto-queue@0.1.0: {} - youch@3.2.3: + youch@3.3.4: dependencies: - cookie: 0.5.0 + cookie: 0.7.2 mustache: 4.2.0 stacktracey: 2.1.8 + zip-stream@4.1.1: + dependencies: + archiver-utils: 3.0.4 + compress-commons: 4.1.2 + readable-stream: 3.6.2 + zod-to-json-schema@3.24.1(zod@3.24.1): dependencies: zod: 3.24.1 - zod@3.22.3: {} - zod@3.24.1: {} - zustand@5.0.3(@types/react@18.3.18)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)): + zustand@5.0.3(@types/react@18.3.12)(react@18.3.1)(use-sync-external-store@1.2.2(react@18.3.1)): optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.12 react: 18.3.1 - use-sync-external-store: 1.4.0(react@18.3.1) + use-sync-external-store: 1.2.2(react@18.3.1) zwitch@2.0.4: {} diff --git a/tsconfig.json b/tsconfig.json index 22a37cf9..fce7b74a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,7 +5,8 @@ "@remix-run/cloudflare", "vite/client", "@cloudflare/workers-types/2023-07-01", - "@types/dom-speech-recognition" + "@types/dom-speech-recognition", + "electron" ], "isolatedModules": true, "esModuleInterop": true, @@ -23,7 +24,6 @@ "paths": { "~/*": ["./app/*"] }, - // vite takes care of building everything, not tsc "noEmit": true }, diff --git a/vite-electron.config.ts b/vite-electron.config.ts new file mode 100644 index 00000000..2c7b8183 --- /dev/null +++ b/vite-electron.config.ts @@ -0,0 +1,75 @@ +import { defineConfig } from 'vite'; +import { vitePlugin as remixVitePlugin } from '@remix-run/dev'; +import UnoCSS from 'unocss/vite'; +import { nodePolyfills } from 'vite-plugin-node-polyfills'; +import { optimizeCssModules } from 'vite-plugin-optimize-css-modules'; +import tsconfigPaths from 'vite-tsconfig-paths'; + +import { execSync } from 'child_process'; + +// Get git hash with fallback +const getGitHash = () => { + try { + return execSync('git rev-parse --short HEAD').toString().trim(); + } catch { + return 'no-git-info'; + } +}; + +export default defineConfig((config) => { + return { + define: { + __COMMIT_HASH: JSON.stringify(getGitHash()), + __APP_VERSION: JSON.stringify(process.env.npm_package_version), + }, + build: { + target: 'esnext', + }, + plugins: [ + nodePolyfills({ + include: ['path', 'buffer', 'process'], + }), + remixVitePlugin({ + future: { + v3_fetcherPersist: true, + v3_relativeSplatPath: true, + v3_throwAbortReason: true, + v3_lazyRouteDiscovery: true, + }, + serverModuleFormat: 'esm', + }), + UnoCSS(), + tsconfigPaths(), + config.mode === 'production' && optimizeCssModules({ apply: 'build' }), + { + name: 'replaceReactDomServerImport', + enforce: 'pre', + transform(code, id) { + if (id.endsWith('entry.server.tsx')) { + /* + * Hack: fix the issue with react-dom/server not being found in electron + * Replace the import from 'react-dom/server' with 'react-dom/server.browser', only for electron build + */ + return code.replace(/from 'react-dom\/server';?/g, "from 'react-dom/server.browser';"); + } + + return undefined; + }, + }, + ], + envPrefix: [ + 'VITE_', + 'OPENAI_LIKE_API_BASE_URL', + 'OLLAMA_API_BASE_URL', + 'LMSTUDIO_API_BASE_URL', + 'TOGETHER_API_BASE_URL', + ], + css: { + preprocessorOptions: { + scss: { + api: 'modern-compiler', + }, + }, + }, + }; +}); From 02974089def78c33edf82268b3823de7fef666c3 Mon Sep 17 00:00:00 2001 From: KevIsDev Date: Wed, 19 Mar 2025 23:11:31 +0000 Subject: [PATCH 029/115] feat: integrate Supabase for database operations and migrations Add support for Supabase database operations, including migrations and queries. Implement new Supabase-related types, actions, and components to handle database interactions. Enhance the prompt system to include Supabase-specific instructions and constraints. Ensure data integrity and security by enforcing row-level security and proper migration practices. --- app/components/chat/Artifact.tsx | 6 +- app/components/chat/BaseChat.tsx | 19 +- app/components/chat/Chat.client.tsx | 12 + app/components/chat/SupabaseAlert.tsx | 199 +++++++++++++ app/components/chat/SupabaseConnection.tsx | 324 +++++++++++++++++++++ app/lib/.server/llm/stream-text.ts | 11 +- app/lib/common/prompt-library.ts | 6 +- app/lib/common/prompts/prompts.ts | 194 +++++++++++- app/lib/hooks/useSupabaseConnection.ts | 111 +++++++ app/lib/runtime/action-runner.ts | 66 ++++- app/lib/runtime/message-parser.ts | 24 +- app/lib/stores/supabase.ts | 130 +++++++++ app/lib/stores/workbench.ts | 20 +- app/routes/api.chat.ts | 7 +- app/routes/api.supabase.query.ts | 92 ++++++ app/routes/api.supabase.ts | 67 +++++ app/types/actions.ts | 19 +- app/types/supabase.ts | 21 ++ 18 files changed, 1316 insertions(+), 12 deletions(-) create mode 100644 app/components/chat/SupabaseAlert.tsx create mode 100644 app/components/chat/SupabaseConnection.tsx create mode 100644 app/lib/hooks/useSupabaseConnection.ts create mode 100644 app/lib/stores/supabase.ts create mode 100644 app/routes/api.supabase.query.ts create mode 100644 app/routes/api.supabase.ts create mode 100644 app/types/supabase.ts diff --git a/app/components/chat/Artifact.tsx b/app/components/chat/Artifact.tsx index 5f0c9910..d164689a 100644 --- a/app/components/chat/Artifact.tsx +++ b/app/components/chat/Artifact.tsx @@ -35,7 +35,11 @@ export const Artifact = memo(({ messageId }: ArtifactProps) => { const actions = useStore( computed(artifact.runner.actions, (actions) => { - return Object.values(actions); + // Filter out Supabase actions except for migrations + return Object.values(actions).filter((action) => { + // Exclude actions with type 'supabase' or actions that contain 'supabase' in their content + return action.type !== 'supabase' && !(action.type === 'shell' && action.content?.includes('supabase')); + }); }), ); diff --git a/app/components/chat/BaseChat.tsx b/app/components/chat/BaseChat.tsx index b8712202..168fbed9 100644 --- a/app/components/chat/BaseChat.tsx +++ b/app/components/chat/BaseChat.tsx @@ -29,13 +29,15 @@ import type { ProviderInfo } from '~/types/model'; import { ScreenshotStateManager } from './ScreenshotStateManager'; import { toast } from 'react-toastify'; import StarterTemplates from './StarterTemplates'; -import type { ActionAlert } from '~/types/actions'; +import type { ActionAlert, SupabaseAlert } from '~/types/actions'; import ChatAlert from './ChatAlert'; import type { ModelInfo } from '~/lib/modules/llm/types'; import ProgressCompilation from './ProgressCompilation'; import type { ProgressAnnotation } from '~/types/context'; import type { ActionRunner } from '~/lib/runtime/action-runner'; import { LOCAL_PROVIDERS } from '~/lib/stores/settings'; +import { SupabaseChatAlert } from '~/components/chat/SupabaseAlert'; +import { SupabaseConnection } from './SupabaseConnection'; const TEXTAREA_MIN_HEIGHT = 76; @@ -69,6 +71,8 @@ interface BaseChatProps { setImageDataList?: (dataList: string[]) => void; actionAlert?: ActionAlert; clearAlert?: () => void; + supabaseAlert?: SupabaseAlert; + clearSupabaseAlert?: () => void; data?: JSONValue[] | undefined; actionRunner?: ActionRunner; } @@ -105,6 +109,8 @@ export const BaseChat = React.forwardRef( messages, actionAlert, clearAlert, + supabaseAlert, + clearSupabaseAlert, data, actionRunner, }, @@ -343,6 +349,16 @@ export const BaseChat = React.forwardRef( ) : null; }} + {supabaseAlert && ( + clearSupabaseAlert?.()} + postMessage={(message) => { + sendMessage?.({} as any, message); + clearSupabaseAlert?.(); + }} + /> + )}
( a new line
) : null} +
diff --git a/app/components/chat/Chat.client.tsx b/app/components/chat/Chat.client.tsx index 8ac5d286..af5f2f44 100644 --- a/app/components/chat/Chat.client.tsx +++ b/app/components/chat/Chat.client.tsx @@ -26,6 +26,7 @@ import { getTemplates, selectStarterTemplate } from '~/utils/selectStarterTempla import { logStore } from '~/lib/stores/logs'; import { streamingState } from '~/lib/stores/streaming'; import { filesToArtifacts } from '~/utils/fileUtils'; +import { supabaseConnection } from '~/lib/stores/supabase'; const toastAnimation = cssTransition({ enter: 'animated fadeInRight', @@ -123,6 +124,11 @@ export const ChatImpl = memo( const [fakeLoading, setFakeLoading] = useState(false); const files = useStore(workbenchStore.files); const actionAlert = useStore(workbenchStore.alert); + const supabaseConn = useStore(supabaseConnection); // Add this line to get Supabase connection + const selectedProject = supabaseConn.stats?.projects?.find( + (project) => project.id === supabaseConn.selectedProjectId, + ); + const supabaseAlert = useStore(workbenchStore.supabaseAlert); const { activeProviders, promptId, autoSelectTemplate, contextOptimizationEnabled } = useSettings(); const [model, setModel] = useState(() => { @@ -160,6 +166,10 @@ export const ChatImpl = memo( files, promptId, contextOptimization: contextOptimizationEnabled, + supabase: { + isConnected: supabaseConn.isConnected, + hasSelectedProject: !!selectedProject, + }, }, sendExtraMessageFields: true, onError: (e) => { @@ -544,6 +554,8 @@ export const ChatImpl = memo( setImageDataList={setImageDataList} actionAlert={actionAlert} clearAlert={() => workbenchStore.clearAlert()} + supabaseAlert={supabaseAlert} + clearSupabaseAlert={() => workbenchStore.clearSupabaseAlert()} data={chatData} /> ); diff --git a/app/components/chat/SupabaseAlert.tsx b/app/components/chat/SupabaseAlert.tsx new file mode 100644 index 00000000..d86e5e53 --- /dev/null +++ b/app/components/chat/SupabaseAlert.tsx @@ -0,0 +1,199 @@ +import { AnimatePresence, motion } from 'framer-motion'; +import type { SupabaseAlert } from '~/types/actions'; +import { classNames } from '~/utils/classNames'; +import { supabaseConnection } from '~/lib/stores/supabase'; +import { useStore } from '@nanostores/react'; +import { useState } from 'react'; + +interface Props { + alert: SupabaseAlert; + clearAlert: () => void; + postMessage: (message: string) => void; +} + +export function SupabaseChatAlert({ alert, clearAlert, postMessage }: Props) { + const { content } = alert; + const connection = useStore(supabaseConnection); + const [isExecuting, setIsExecuting] = useState(false); + const [isCollapsed, setIsCollapsed] = useState(true); + + // Determine connection state + const isConnected = !!(connection.token && connection.selectedProjectId); + + // Set title and description based on connection state + const title = isConnected ? 'Supabase Query' : 'Supabase Connection Required'; + const description = isConnected ? 'Execute database query' : 'Supabase connection required'; + const message = isConnected + ? 'Please review the proposed changes and apply them to your database.' + : 'Please connect to Supabase to continue with this operation.'; + + const handleConnectClick = () => { + // Dispatch an event to open the Supabase connection dialog + document.dispatchEvent(new CustomEvent('open-supabase-connection')); + }; + + // Determine if we should show the Connect button or Apply Changes button + const showConnectButton = !isConnected; + + const executeSupabaseAction = async (sql: string) => { + if (!connection.token || !connection.selectedProjectId) { + console.error('No Supabase token or project selected'); + return; + } + + setIsExecuting(true); + + try { + const response = await fetch('/api/supabase/query', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${connection.token}`, + }, + body: JSON.stringify({ + projectId: connection.selectedProjectId, + query: sql, + }), + }); + + if (!response.ok) { + const errorData = (await response.json()) as any; + throw new Error(`Supabase query failed: ${errorData.error?.message || response.statusText}`); + } + + const result = await response.json(); + console.log('Supabase query executed successfully:', result); + clearAlert(); + } catch (error) { + console.error('Failed to execute Supabase action:', error); + postMessage( + `*Error executing Supabase query please fix and return the query again*\n\`\`\`\n${error instanceof Error ? error.message : String(error)}\n\`\`\`\n`, + ); + } finally { + setIsExecuting(false); + } + }; + + const cleanSqlContent = (content: string) => { + if (!content) { + return ''; + } + + let cleaned = content.replace(/\/\*[\s\S]*?\*\//g, ''); + + cleaned = cleaned.replace(/(--).*$/gm, '').replace(/(#).*$/gm, ''); + + const statements = cleaned + .split(';') + .map((stmt) => stmt.trim()) + .filter((stmt) => stmt.length > 0) + .join(';\n\n'); + + return statements; + }; + + return ( + + + {/* Header */} +
+
+ +

{title}

+
+
+ + {/* SQL Content */} +
+ {!isConnected ? ( +
+ + You must first connect to Supabase and select a project. + +
+ ) : ( + <> +
setIsCollapsed(!isCollapsed)} + > +
+ + {description || 'Create table and setup auth'} + +
+
+ + {!isCollapsed && content && ( +
+
{cleanSqlContent(content)}
+
+ )} + + )} +
+ + {/* Message and Actions */} +
+

{message}

+ +
+ {showConnectButton ? ( + + ) : ( + + )} + +
+
+
+
+ ); +} diff --git a/app/components/chat/SupabaseConnection.tsx b/app/components/chat/SupabaseConnection.tsx new file mode 100644 index 00000000..2b03f442 --- /dev/null +++ b/app/components/chat/SupabaseConnection.tsx @@ -0,0 +1,324 @@ +import { useEffect } from 'react'; +import { useSupabaseConnection } from '~/lib/hooks/useSupabaseConnection'; +import { classNames } from '~/utils/classNames'; +import { useStore } from '@nanostores/react'; +import { chatId } from '~/lib/persistence/useChatHistory'; +import { fetchSupabaseStats } from '~/lib/stores/supabase'; +import { Dialog, DialogRoot, DialogClose, DialogTitle, DialogButton } from '~/components/ui/Dialog'; + +export function SupabaseConnection() { + const { + connection: supabaseConn, + connecting, + fetchingStats, + isProjectsExpanded, + setIsProjectsExpanded, + isDropdownOpen: isDialogOpen, + setIsDropdownOpen: setIsDialogOpen, + handleConnect, + handleDisconnect, + selectProject, + handleCreateProject, + updateToken, + isConnected, + } = useSupabaseConnection(); + + const currentChatId = useStore(chatId); + + // Add event listener for opening the connection dialog + useEffect(() => { + const handleOpenConnectionDialog = () => { + setIsDialogOpen(true); + }; + + document.addEventListener('open-supabase-connection', handleOpenConnectionDialog); + + return () => { + document.removeEventListener('open-supabase-connection', handleOpenConnectionDialog); + }; + }, [setIsDialogOpen]); + + // Load the selected project from localStorage when connected or chat changes + useEffect(() => { + if (isConnected && currentChatId) { + const savedProjectId = localStorage.getItem(`supabase-project-${currentChatId}`); + + /* + * If there's no saved project for this chat but there is a global selected project, + * use the global one instead of clearing it + */ + if (!savedProjectId && supabaseConn.selectedProjectId) { + // Save the current global project to this chat + localStorage.setItem(`supabase-project-${currentChatId}`, supabaseConn.selectedProjectId); + } else if (savedProjectId && savedProjectId !== supabaseConn.selectedProjectId) { + selectProject(savedProjectId); + } + } + }, [isConnected, currentChatId]); + + useEffect(() => { + if (currentChatId && supabaseConn.selectedProjectId) { + localStorage.setItem(`supabase-project-${currentChatId}`, supabaseConn.selectedProjectId); + } else if (currentChatId && !supabaseConn.selectedProjectId) { + localStorage.removeItem(`supabase-project-${currentChatId}`); + } + }, [currentChatId, supabaseConn.selectedProjectId]); + + useEffect(() => { + if (isConnected && supabaseConn.token) { + fetchSupabaseStats(supabaseConn.token).catch(console.error); + } + }, [isConnected, supabaseConn.token]); + + return ( +
+
+ +
+ + + {isDialogOpen && ( + + {!isConnected ? ( +
+ + + Connect to Supabase + + + + ) : ( +
+
+ + + Supabase Connection + +
+ +
+
+

{supabaseConn.user?.email}

+

Role: {supabaseConn.user?.role}

+
+
+ + {fetchingStats ? ( +
+
+ Fetching projects... +
+ ) : ( +
+
+ + +
+ + {isProjectsExpanded && ( + <> + {!supabaseConn.selectedProjectId && ( +
+ Select a project or create a new one for this chat +
+ )} + + {supabaseConn.stats?.projects?.length ? ( +
+ {supabaseConn.stats.projects.map((project) => ( +
+
+
+
+
+ {project.name} +
+
+ {project.region} +
+
+ +
+
+ ))} +
+ ) : ( +
+
+ No projects found +
+ )} + + )} +
+ )} + +
+ + Close + + +
+ Disconnect + +
+
+ )} + + )} + +
+ ); +} + +interface ButtonProps { + active?: boolean; + disabled?: boolean; + children?: any; + onClick?: VoidFunction; + className?: string; +} + +function Button({ active = false, disabled = false, children, onClick, className }: ButtonProps) { + return ( + + ); +} diff --git a/app/lib/.server/llm/stream-text.ts b/app/lib/.server/llm/stream-text.ts index 29579c9f..1958dfad 100644 --- a/app/lib/.server/llm/stream-text.ts +++ b/app/lib/.server/llm/stream-text.ts @@ -12,7 +12,12 @@ import { getFilePaths } from './select-context'; export type Messages = Message[]; -export type StreamingOptions = Omit[0], 'model'>; +export interface StreamingOptions extends Omit[0], 'model'> { + supabaseConnection?: { + isConnected: boolean; + hasSelectedProject: boolean; + }; +} const logger = createScopedLogger('stream-text'); @@ -97,6 +102,10 @@ export async function streamText(props: { cwd: WORK_DIR, allowedHtmlElements: allowedHTMLElements, modificationTagName: MODIFICATIONS_TAG_NAME, + supabase: { + isConnected: options?.supabaseConnection?.isConnected || false, + hasSelectedProject: options?.supabaseConnection?.hasSelectedProject || false, + }, }) ?? getSystemPrompt(); if (files && contextFiles && contextOptimization) { diff --git a/app/lib/common/prompt-library.ts b/app/lib/common/prompt-library.ts index 7513e811..084925b7 100644 --- a/app/lib/common/prompt-library.ts +++ b/app/lib/common/prompt-library.ts @@ -5,6 +5,10 @@ export interface PromptOptions { cwd: string; allowedHtmlElements: string[]; modificationTagName: string; + supabase?: { + isConnected: boolean; + hasSelectedProject: boolean; + }; } export class PromptLibrary { @@ -19,7 +23,7 @@ export class PromptLibrary { default: { label: 'Default Prompt', description: 'This is the battle tested default system Prompt', - get: (options) => getSystemPrompt(options.cwd), + get: (options) => getSystemPrompt(options.cwd, options.supabase), }, optimized: { label: 'Optimized Prompt (experimental)', diff --git a/app/lib/common/prompts/prompts.ts b/app/lib/common/prompts/prompts.ts index 1e9134ac..149f1b5f 100644 --- a/app/lib/common/prompts/prompts.ts +++ b/app/lib/common/prompts/prompts.ts @@ -2,7 +2,10 @@ import { WORK_DIR } from '~/utils/constants'; import { allowedHTMLElements } from '~/utils/markdown'; import { stripIndents } from '~/utils/stripIndent'; -export const getSystemPrompt = (cwd: string = WORK_DIR) => ` +export const getSystemPrompt = ( + cwd: string = WORK_DIR, + supabase?: { isConnected: boolean; hasSelectedProject: boolean }, +) => ` You are Bolt, an expert AI assistant and exceptional senior software developer with vast knowledge across multiple programming languages, frameworks, and best practices. @@ -59,6 +62,195 @@ You are Bolt, an expert AI assistant and exceptional senior software developer w - curl, head, sort, tail, clear, which, export, chmod, scho, hostname, kill, ln, xxd, alias, false, getconf, true, loadenv, wasm, xdg-open, command, exit, source + + The following instructions guide how you should handle database operations in projects. + + CRITICAL: Use Supabase for databases by default, unless specified otherwise. + + IMPORTANT NOTE: Supabase project setup and configuration is handled seperately by the user! ${ + supabase + ? !supabase.isConnected + ? 'You are not connected to Supabase. Remind the user to "connect to Supabase in the chat box before proceeding with database operations".' + : !supabase.hasSelectedProject + ? 'Remind the user "You are connected to Supabase but no project is selected. Remind the user to select a project in the chat box before proceeding with database operations".' + : '' + : '' + } + The environment variables for Supabase connection will be available in the project's \`.env\` file. + IMPORTANT: Create a .env file if it doesnt exist. + NEVER modify any Supabase configuration or \`.env\` files. + + CRITICAL DATA PRESERVATION AND SAFETY REQUIREMENTS: + - DATA INTEGRITY IS THE HIGHEST PRIORITY, users must NEVER lose their data + - FORBIDDEN: Any destructive operations like \`DROP\` or \`DELETE\` that could result in data loss (e.g., when dropping columns, changing column types, renaming tables, etc.) + - FORBIDDEN: Any transaction control statements (e.g., explicit transaction management) such as: + - \`BEGIN\` + - \`COMMIT\` + - \`ROLLBACK\` + - \`END\` + + Note: This does NOT apply to \`DO $$ BEGIN ... END $$\` blocks, which are PL/pgSQL anonymous blocks! + + Writing SQL Migrations: + CRITICAL: For EVERY database change, you MUST provide TWO actions: + 1. Migration File Creation: + + /* SQL migration content */ + + + 2. Immediate Query Execution: + + /* Same SQL content as migration */ + + + Example: + + + CREATE TABLE users ( + id uuid PRIMARY KEY DEFAULT gen_random_uuid(), + email text UNIQUE NOT NULL + ); + + + + CREATE TABLE users ( + id uuid PRIMARY KEY DEFAULT gen_random_uuid(), + email text UNIQUE NOT NULL + ); + + + + - IMPORTANT: The SQL content must be identical in both actions to ensure consistency between the migration file and the executed query. + - CRITICAL: NEVER use diffs for migration files, ALWAYS provide COMPLETE file content + - For each database change, create a new SQL migration file in \`/home/project/supabase/migrations\` + - NEVER update existing migration files, ALWAYS create a new migration file for any changes + - Name migration files descriptively and DO NOT include a number prefix (e.g., \`create_users.sql\`, \`add_posts_table.sql\`). + + - DO NOT worry about ordering as the files will be renamed correctly! + + - ALWAYS enable row level security (RLS) for new tables: + + + alter table users enable row level security; + + + - Add appropriate RLS policies for CRUD operations for each table + + - Use default values for columns: + - Set default values for columns where appropriate to ensure data consistency and reduce null handling + - Common default values include: + - Booleans: \`DEFAULT false\` or \`DEFAULT true\` + - Numbers: \`DEFAULT 0\` + - Strings: \`DEFAULT ''\` or meaningful defaults like \`'user'\` + - Dates/Timestamps: \`DEFAULT now()\` or \`DEFAULT CURRENT_TIMESTAMP\` + - Be cautious not to set default values that might mask problems; sometimes it's better to allow an error than to proceed with incorrect data + + - CRITICAL: Each migration file MUST follow these rules: + - ALWAYS Start with a markdown summary block (in a multi-line comment) that: + - Include a short, descriptive title (using a headline) that summarizes the changes (e.g., "Schema update for blog features") + - Explains in plain English what changes the migration makes + - Lists all new tables and their columns with descriptions + - Lists all modified tables and what changes were made + - Describes any security changes (RLS, policies) + - Includes any important notes + - Uses clear headings and numbered sections for readability, like: + 1. New Tables + 2. Security + 3. Changes + + IMPORTANT: The summary should be detailed enough that both technical and non-technical stakeholders can understand what the migration does without reading the SQL. + + - Include all necessary operations (e.g., table creation and updates, RLS, policies) + + Here is an example of a migration file: + + + /* + # Create users table + + 1. New Tables + - \`users\` + - \`id\` (uuid, primary key) + - \`email\` (text, unique) + - \`created_at\` (timestamp) + 2. Security + - Enable RLS on \`users\` table + - Add policy for authenticated users to read their own data + */ + + CREATE TABLE IF NOT EXISTS users ( + id uuid PRIMARY KEY DEFAULT gen_random_uuid(), + email text UNIQUE NOT NULL, + created_at timestamptz DEFAULT now() + ); + + ALTER TABLE users ENABLE ROW LEVEL SECURITY; + + CREATE POLICY "Users can read own data" + ON users + FOR SELECT + TO authenticated + USING (auth.uid() = id); + + + - Ensure SQL statements are safe and robust: + - Use \`IF EXISTS\` or \`IF NOT EXISTS\` to prevent errors when creating or altering database objects. Here are examples: + + + CREATE TABLE IF NOT EXISTS users ( + id uuid PRIMARY KEY DEFAULT gen_random_uuid(), + email text UNIQUE NOT NULL, + created_at timestamptz DEFAULT now() + ); + + + + DO $$ + BEGIN + IF NOT EXISTS ( + SELECT 1 FROM information_schema.columns + WHERE table_name = 'users' AND column_name = 'last_login' + ) THEN + ALTER TABLE users ADD COLUMN last_login timestamptz; + END IF; + END $$; + + + Client Setup: + - Use \`@supabase/supabase-js\` + - Create a singleton client instance + - Use the environment variables from the project's \`.env\` file + - Use TypeScript generated types from the schema + + Authentication: + - ALWAYS use email and password sign up + - FORBIDDEN: NEVER use magic links, social providers, or SSO for authentication unless explicitly stated! + - FORBIDDEN: NEVER create your own authentication system or authentication table, ALWAYS use Supabase's built-in authentication! + - Email confirmation is ALWAYS disabled unless explicitly stated! + + Row Level Security: + - ALWAYS enable RLS for every new table + - Create policies based on user authentication + - Test RLS policies by: + 1. Verifying authenticated users can only access their allowed data + 2. Confirming unauthenticated users cannot access protected data + 3. Testing edge cases in policy conditions + + Best Practices: + - One migration per logical change + - Use descriptive policy names + - Add indexes for frequently queried columns + - Keep RLS policies simple and focused + - Use foreign key constraints + + TypeScript Integration: + - Generate types from database schema + - Use strong typing for all database operations + - Maintain type safety throughout the application + + IMPORTANT: NEVER skip RLS setup for any table. Security is non-negotiable! + + Use 2 spaces for code indentation diff --git a/app/lib/hooks/useSupabaseConnection.ts b/app/lib/hooks/useSupabaseConnection.ts new file mode 100644 index 00000000..5bbe12ea --- /dev/null +++ b/app/lib/hooks/useSupabaseConnection.ts @@ -0,0 +1,111 @@ +import { useEffect, useState } from 'react'; +import { toast } from 'react-toastify'; +import { useStore } from '@nanostores/react'; +import { logStore } from '~/lib/stores/logs'; +import { supabaseConnection, isConnecting, isFetchingStats, updateSupabaseConnection } from '~/lib/stores/supabase'; + +export function useSupabaseConnection() { + const connection = useStore(supabaseConnection); + const connecting = useStore(isConnecting); + const fetchingStats = useStore(isFetchingStats); + const [isProjectsExpanded, setIsProjectsExpanded] = useState(false); + const [isDropdownOpen, setIsDropdownOpen] = useState(false); + + useEffect(() => { + const savedConnection = localStorage.getItem('supabase_connection'); + + if (savedConnection) { + const parsed = JSON.parse(savedConnection); + updateSupabaseConnection(parsed); + } + }, []); + + const handleConnect = async () => { + isConnecting.set(true); + + try { + const cleanToken = connection.token.trim(); + + const response = await fetch('/api/supabase', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + token: cleanToken, + }), + }); + + const data = (await response.json()) as any; + + if (!response.ok) { + throw new Error(data.error || 'Failed to connect'); + } + + updateSupabaseConnection({ + user: data.user, + token: connection.token, + stats: data.stats, + }); + + toast.success('Successfully connected to Supabase'); + + // Keep the dialog open and expand the projects section + setIsProjectsExpanded(true); + + return true; + } catch (error) { + console.error('Connection error:', error); + logStore.logError('Failed to authenticate with Supabase', { error }); + toast.error(error instanceof Error ? error.message : 'Failed to connect to Supabase'); + updateSupabaseConnection({ user: null, token: '' }); + + return false; + } finally { + isConnecting.set(false); + } + }; + + const handleDisconnect = () => { + updateSupabaseConnection({ user: null, token: '' }); + toast.success('Disconnected from Supabase'); + setIsDropdownOpen(false); + }; + + const selectProject = (projectId: string) => { + const currentState = supabaseConnection.get(); + let projectData = undefined; + + if (projectId && currentState.stats?.projects) { + projectData = currentState.stats.projects.find((project) => project.id === projectId); + } + + updateSupabaseConnection({ + selectedProjectId: projectId, + project: projectData, + }); + + toast.success('Project selected successfully'); + setIsDropdownOpen(false); + }; + + const handleCreateProject = async () => { + window.open('https://app.supabase.com/new/new-project', '_blank'); + }; + + return { + connection, + connecting, + fetchingStats, + isProjectsExpanded, + setIsProjectsExpanded, + isDropdownOpen, + setIsDropdownOpen, + handleConnect, + handleDisconnect, + selectProject, + handleCreateProject, + updateToken: (token: string) => updateSupabaseConnection({ ...connection, token }), + isConnected: !!(connection.user && connection.token), + }; +} diff --git a/app/lib/runtime/action-runner.ts b/app/lib/runtime/action-runner.ts index 013a9a77..a04a3de4 100644 --- a/app/lib/runtime/action-runner.ts +++ b/app/lib/runtime/action-runner.ts @@ -1,7 +1,7 @@ import type { WebContainer } from '@webcontainer/api'; import { path as nodePath } from '~/utils/path'; import { atom, map, type MapStore } from 'nanostores'; -import type { ActionAlert, BoltAction, FileHistory } from '~/types/actions'; +import type { ActionAlert, BoltAction, FileHistory, SupabaseAction, SupabaseAlert } from '~/types/actions'; import { createScopedLogger } from '~/utils/logger'; import { unreachable } from '~/utils/unreachable'; import type { ActionCallbackData } from './message-parser'; @@ -70,16 +70,19 @@ export class ActionRunner { runnerId = atom(`${Date.now()}`); actions: ActionsMap = map({}); onAlert?: (alert: ActionAlert) => void; + onSupabaseAlert?: (alert: SupabaseAlert) => void; buildOutput?: { path: string; exitCode: number; output: string }; constructor( webcontainerPromise: Promise, getShellTerminal: () => BoltShell, onAlert?: (alert: ActionAlert) => void, + onSupabaseAlert?: (alert: SupabaseAlert) => void, ) { this.#webcontainer = webcontainerPromise; this.#shellTerminal = getShellTerminal; this.onAlert = onAlert; + this.onSupabaseAlert = onSupabaseAlert; } addAction(data: ActionCallbackData) { @@ -157,6 +160,21 @@ export class ActionRunner { await this.#runFileAction(action); break; } + case 'supabase': { + try { + await this.handleSupabaseAction(action as SupabaseAction); + } catch (error: any) { + // Update action status + this.#updateAction(actionId, { + status: 'failed', + error: error instanceof Error ? error.message : 'Supabase action failed', + }); + + // Return early without re-throwing + return; + } + break; + } case 'build': { const buildOutput = await this.#runBuildAction(action); @@ -377,4 +395,50 @@ export class ActionRunner { output, }; } + async handleSupabaseAction(action: SupabaseAction) { + const { operation, content, filePath } = action; + logger.debug('[Supabase Action]:', { operation, filePath, content }); + + switch (operation) { + case 'migration': + if (!filePath) { + throw new Error('Migration requires a filePath'); + } + + // Show alert for migration action + this.onSupabaseAlert?.({ + type: 'info', + title: 'Supabase Migration', + description: `Create migration file: ${filePath}`, + content, + source: 'supabase', + }); + + // Only create the migration file + await this.#runFileAction({ + type: 'file', + filePath, + content, + changeSource: 'supabase', + } as any); + return { success: true }; + + case 'query': { + // Always show the alert and let the SupabaseAlert component handle connection state + this.onSupabaseAlert?.({ + type: 'info', + title: 'Supabase Query', + description: 'Execute database query', + content, + source: 'supabase', + }); + + // The actual execution will be triggered from SupabaseChatAlert + return { pending: true }; + } + + default: + throw new Error(`Unknown operation: ${operation}`); + } + } } diff --git a/app/lib/runtime/message-parser.ts b/app/lib/runtime/message-parser.ts index 3b41b6d6..17375480 100644 --- a/app/lib/runtime/message-parser.ts +++ b/app/lib/runtime/message-parser.ts @@ -1,4 +1,4 @@ -import type { ActionType, BoltAction, BoltActionData, FileAction, ShellAction } from '~/types/actions'; +import type { ActionType, BoltAction, BoltActionData, FileAction, ShellAction, SupabaseAction } from '~/types/actions'; import type { BoltArtifactData } from '~/types/artifact'; import { createScopedLogger } from '~/utils/logger'; import { unreachable } from '~/utils/unreachable'; @@ -293,7 +293,27 @@ export class StreamingMessageParser { content: '', }; - if (actionType === 'file') { + if (actionType === 'supabase') { + const operation = this.#extractAttribute(actionTag, 'operation'); + + if (!operation || !['migration', 'query'].includes(operation)) { + logger.warn(`Invalid or missing operation for Supabase action: ${operation}`); + throw new Error(`Invalid Supabase operation: ${operation}`); + } + + (actionAttributes as SupabaseAction).operation = operation as 'migration' | 'query'; + + if (operation === 'migration') { + const filePath = this.#extractAttribute(actionTag, 'filePath'); + + if (!filePath) { + logger.warn('Migration requires a filePath'); + throw new Error('Migration requires a filePath'); + } + + (actionAttributes as SupabaseAction).filePath = filePath; + } + } else if (actionType === 'file') { const filePath = this.#extractAttribute(actionTag, 'filePath') as string; if (!filePath) { diff --git a/app/lib/stores/supabase.ts b/app/lib/stores/supabase.ts new file mode 100644 index 00000000..9f624e5b --- /dev/null +++ b/app/lib/stores/supabase.ts @@ -0,0 +1,130 @@ +import { atom } from 'nanostores'; +import type { SupabaseUser, SupabaseStats } from '~/types/supabase'; + +export interface SupabaseProject { + id: string; + name: string; + region: string; + organization_id: string; + status: string; + database?: { + host: string; + version: string; + postgres_engine: string; + release_channel: string; + }; + created_at: string; +} + +export interface SupabaseConnectionState { + user: SupabaseUser | null; + token: string; + stats?: SupabaseStats; + selectedProjectId?: string; + isConnected?: boolean; + project?: SupabaseProject; // Add the selected project data +} + +// Init from localStorage if available +const savedConnection = typeof localStorage !== 'undefined' ? localStorage.getItem('supabase_connection') : null; + +const initialState: SupabaseConnectionState = savedConnection + ? JSON.parse(savedConnection) + : { + user: null, + token: '', + stats: undefined, + selectedProjectId: undefined, + isConnected: false, + project: undefined, // Initialize as undefined + }; + +export const supabaseConnection = atom(initialState); + +// After init, fetch stats if we have a token +if (initialState.token && !initialState.stats) { + fetchSupabaseStats(initialState.token).catch(console.error); +} + +export const isConnecting = atom(false); +export const isFetchingStats = atom(false); + +export function updateSupabaseConnection(connection: Partial) { + const currentState = supabaseConnection.get(); + + // Set isConnected based on user presence AND token + if (connection.user !== undefined || connection.token !== undefined) { + const newUser = connection.user !== undefined ? connection.user : currentState.user; + const newToken = connection.token !== undefined ? connection.token : currentState.token; + connection.isConnected = !!(newUser && newToken); + } + + // Update the project data when selectedProjectId changes + if (connection.selectedProjectId !== undefined) { + if (connection.selectedProjectId && currentState.stats?.projects) { + const selectedProject = currentState.stats.projects.find( + (project) => project.id === connection.selectedProjectId, + ); + + if (selectedProject) { + connection.project = selectedProject; + } else { + // If project not found in stats but ID is provided, set a minimal project object + connection.project = { + id: connection.selectedProjectId, + name: `Project ${connection.selectedProjectId.substring(0, 8)}...`, + region: 'unknown', + organization_id: '', + status: 'active', + created_at: new Date().toISOString(), + }; + } + } else if (connection.selectedProjectId === '') { + // Clear the project when selectedProjectId is empty + connection.project = undefined; + } + } + + const newState = { ...currentState, ...connection }; + supabaseConnection.set(newState); + + /* + * Always save the connection state to localStorage to persist across chats + * Always save the connection state to localStorage to persist across chats + */ + if (connection.user || connection.token || connection.selectedProjectId !== undefined) { + localStorage.setItem('supabase_connection', JSON.stringify(newState)); + } else { + localStorage.removeItem('supabase_connection'); + } +} + +export async function fetchSupabaseStats(token: string) { + isFetchingStats.set(true); + + try { + const response = await fetch('https://api.supabase.com/v1/projects', { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + + if (!response.ok) { + throw new Error('Failed to fetch projects'); + } + + const projects = (await response.json()) as any; + + updateSupabaseConnection({ + stats: { + projects, + totalProjects: projects.length, + }, + }); + } catch (error) { + console.error('Failed to fetch Supabase stats:', error); + throw error; + } finally { + isFetchingStats.set(false); + } +} diff --git a/app/lib/stores/workbench.ts b/app/lib/stores/workbench.ts index 870a9d6e..051d45aa 100644 --- a/app/lib/stores/workbench.ts +++ b/app/lib/stores/workbench.ts @@ -17,7 +17,7 @@ import { extractRelativePath } from '~/utils/diff'; import { description } from '~/lib/persistence'; import Cookies from 'js-cookie'; import { createSampler } from '~/utils/sampler'; -import type { ActionAlert } from '~/types/actions'; +import type { ActionAlert, SupabaseAlert } from '~/types/actions'; const { saveAs } = fileSaver; @@ -50,6 +50,8 @@ export class WorkbenchStore { unsavedFiles: WritableAtom> = import.meta.hot?.data.unsavedFiles ?? atom(new Set()); actionAlert: WritableAtom = import.meta.hot?.data.unsavedFiles ?? atom(undefined); + supabaseAlert: WritableAtom = + import.meta.hot?.data.unsavedFiles ?? atom(undefined); modifiedFiles = new Set(); artifactIdList: string[] = []; #globalExecutionQueue = Promise.resolve(); @@ -60,6 +62,7 @@ export class WorkbenchStore { import.meta.hot.data.showWorkbench = this.showWorkbench; import.meta.hot.data.currentView = this.currentView; import.meta.hot.data.actionAlert = this.actionAlert; + import.meta.hot.data.supabaseAlert = this.supabaseAlert; // Ensure binary files are properly preserved across hot reloads const filesMap = this.files.get(); @@ -114,6 +117,14 @@ export class WorkbenchStore { this.actionAlert.set(undefined); } + get SupabaseAlert() { + return this.supabaseAlert; + } + + clearSupabaseAlert() { + this.supabaseAlert.set(undefined); + } + toggleTerminal(value?: boolean) { this.#terminalStore.toggleTerminal(value); } @@ -405,6 +416,13 @@ export class WorkbenchStore { this.actionAlert.set(alert); }, + (alert) => { + if (this.#reloadedMessages.has(messageId)) { + return; + } + + this.supabaseAlert.set(alert); + }, ), }); } diff --git a/app/routes/api.chat.ts b/app/routes/api.chat.ts index bbecdae5..6861d15d 100644 --- a/app/routes/api.chat.ts +++ b/app/routes/api.chat.ts @@ -37,11 +37,15 @@ function parseCookies(cookieHeader: string): Record { } async function chatAction({ context, request }: ActionFunctionArgs) { - const { messages, files, promptId, contextOptimization } = await request.json<{ + const { messages, files, promptId, contextOptimization, supabase } = await request.json<{ messages: Messages; files: any; promptId?: string; contextOptimization: boolean; + supabase?: { + isConnected: boolean; + hasSelectedProject: boolean; + }; }>(); const cookieHeader = request.headers.get('Cookie'); @@ -181,6 +185,7 @@ async function chatAction({ context, request }: ActionFunctionArgs) { // Stream the text const options: StreamingOptions = { + supabaseConnection: supabase, toolChoice: 'none', onFinish: async ({ text: content, finishReason, usage }) => { logger.debug('usage', JSON.stringify(usage)); diff --git a/app/routes/api.supabase.query.ts b/app/routes/api.supabase.query.ts new file mode 100644 index 00000000..0b810754 --- /dev/null +++ b/app/routes/api.supabase.query.ts @@ -0,0 +1,92 @@ +import { type ActionFunctionArgs } from '@remix-run/cloudflare'; +import { createScopedLogger } from '~/utils/logger'; + +const logger = createScopedLogger('api.supabase.query'); + +export async function action({ request }: ActionFunctionArgs) { + if (request.method !== 'POST') { + return new Response('Method not allowed', { status: 405 }); + } + + const authHeader = request.headers.get('Authorization'); + + if (!authHeader) { + return new Response('No authorization token provided', { status: 401 }); + } + + try { + const { projectId, query } = (await request.json()) as any; + logger.debug('Executing query:', { projectId, query }); + + const response = await fetch(`https://api.supabase.com/v1/projects/${projectId}/database/query`, { + method: 'POST', + headers: { + Authorization: authHeader, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ query }), + }); + + if (!response.ok) { + const errorText = await response.text(); + let errorData; + + try { + errorData = JSON.parse(errorText); + } catch (e) { + console.log(e); + errorData = { message: errorText }; + } + + logger.error( + 'Supabase API error:', + JSON.stringify({ + status: response.status, + statusText: response.statusText, + error: errorData, + }), + ); + + return new Response( + JSON.stringify({ + error: { + status: response.status, + statusText: response.statusText, + message: errorData.message || errorData.error || errorText, + details: errorData, + }, + }), + { + status: response.status, + headers: { + 'Content-Type': 'application/json', + }, + }, + ); + } + + const result = await response.json(); + + return new Response(JSON.stringify(result), { + headers: { + 'Content-Type': 'application/json', + }, + }); + } catch (error) { + logger.error('Query execution error:', error); + return new Response( + JSON.stringify({ + error: { + message: error instanceof Error ? error.message : 'Query execution failed', + stack: error instanceof Error ? error.stack : undefined, + }, + }), + { + status: 500, + headers: { + 'Content-Type': 'application/json', + }, + }, + ); + } +} diff --git a/app/routes/api.supabase.ts b/app/routes/api.supabase.ts new file mode 100644 index 00000000..56d9f810 --- /dev/null +++ b/app/routes/api.supabase.ts @@ -0,0 +1,67 @@ +import { json } from '@remix-run/node'; +import type { ActionFunction } from '@remix-run/node'; +import type { SupabaseProject } from '~/types/supabase'; + +export const action: ActionFunction = async ({ request }) => { + if (request.method !== 'POST') { + return json({ error: 'Method not allowed' }, { status: 405 }); + } + + // Inside the action function + try { + const { token } = (await request.json()) as any; + + const projectsResponse = await fetch('https://api.supabase.com/v1/projects', { + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'application/json', + }, + }); + + if (!projectsResponse.ok) { + const errorText = await projectsResponse.text(); + console.error('Projects fetch failed:', errorText); + + return json({ error: 'Failed to fetch projects' }, { status: 401 }); + } + + const projects = (await projectsResponse.json()) as SupabaseProject[]; + + // Create a Map to store unique projects by ID + const uniqueProjectsMap = new Map(); + + // Only keep the latest version of each project + for (const project of projects) { + if (!uniqueProjectsMap.has(project.id)) { + uniqueProjectsMap.set(project.id, project); + } + } + + // Debug log to see unique projects + console.log( + 'Unique projects:', + Array.from(uniqueProjectsMap.values()).map((p) => ({ id: p.id, name: p.name })), + ); + + const uniqueProjects = Array.from(uniqueProjectsMap.values()); + + // Sort projects by creation date (newest first) + uniqueProjects.sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()); + + return json({ + user: { email: 'Connected', role: 'Admin' }, + stats: { + projects: uniqueProjects, + totalProjects: uniqueProjects.length, + }, + }); + } catch (error) { + console.error('Supabase API error:', error); + return json( + { + error: error instanceof Error ? error.message : 'Authentication failed', + }, + { status: 401 }, + ); + } +}; diff --git a/app/types/actions.ts b/app/types/actions.ts index 623c4979..63b84269 100644 --- a/app/types/actions.ts +++ b/app/types/actions.ts @@ -1,6 +1,6 @@ import type { Change } from 'diff'; -export type ActionType = 'file' | 'shell'; +export type ActionType = 'file' | 'shell' | 'supabase'; export interface BaseAction { content: string; @@ -23,7 +23,14 @@ export interface BuildAction extends BaseAction { type: 'build'; } -export type BoltAction = FileAction | ShellAction | StartAction | BuildAction; +export interface SupabaseAction extends BaseAction { + type: 'supabase'; + operation: 'migration' | 'query'; + filePath?: string; + projectId?: string; +} + +export type BoltAction = FileAction | ShellAction | StartAction | BuildAction | SupabaseAction; export type BoltActionData = BoltAction | BaseAction; @@ -35,6 +42,14 @@ export interface ActionAlert { source?: 'terminal' | 'preview'; // Add source to differentiate between terminal and preview errors } +export interface SupabaseAlert { + type: string; + title: string; + description: string; + content: string; + source?: 'supabase'; +} + export interface FileHistory { originalContent: string; lastModified: number; diff --git a/app/types/supabase.ts b/app/types/supabase.ts new file mode 100644 index 00000000..d16d50c2 --- /dev/null +++ b/app/types/supabase.ts @@ -0,0 +1,21 @@ +export interface SupabaseUser { + id: string; + email: string; + role: string; + created_at: string; + last_sign_in_at: string; +} + +export interface SupabaseProject { + id: string; + name: string; + organization_id: string; + region: string; + created_at: string; + status: string; +} + +export interface SupabaseStats { + projects: SupabaseProject[]; + totalProjects: number; +} From bc7e2c5821fd46dd0e477f61f02f002023808510 Mon Sep 17 00:00:00 2001 From: KevIsDev Date: Thu, 20 Mar 2025 11:17:27 +0000 Subject: [PATCH 030/115] feat(supabase): add credentials handling for Supabase API keys and URL This commit introduces the ability to fetch and store Supabase API keys and URL credentials when a project is selected. This enables the application to dynamically configure the Supabase connection environment variables, improving the integration with Supabase services. The changes include updates to the Supabase connection logic, new API endpoints, and modifications to the chat and prompt components to utilize the new credentials. --- app/components/chat/Chat.client.tsx | 4 + app/components/chat/SupabaseConnection.tsx | 9 ++- app/lib/.server/llm/stream-text.ts | 5 ++ app/lib/common/prompt-library.ts | 4 + app/lib/common/prompts/prompts.ts | 18 ++++- app/lib/hooks/useSupabaseConnection.ts | 44 ++++++++++- app/lib/stores/supabase.ts | 88 +++++++++++++++++----- app/routes/api.chat.ts | 5 +- app/routes/api.supabase.ts | 5 -- app/routes/api.supabase.variables.ts | 33 ++++++++ app/types/supabase.ts | 10 +++ 11 files changed, 192 insertions(+), 33 deletions(-) create mode 100644 app/routes/api.supabase.variables.ts diff --git a/app/components/chat/Chat.client.tsx b/app/components/chat/Chat.client.tsx index af5f2f44..4cf8c8ca 100644 --- a/app/components/chat/Chat.client.tsx +++ b/app/components/chat/Chat.client.tsx @@ -169,6 +169,10 @@ export const ChatImpl = memo( supabase: { isConnected: supabaseConn.isConnected, hasSelectedProject: !!selectedProject, + credentials: { + supabaseUrl: supabaseConn?.credentials?.supabaseUrl, + anonKey: supabaseConn?.credentials?.anonKey, + }, }, }, sendExtraMessageFields: true, diff --git a/app/components/chat/SupabaseConnection.tsx b/app/components/chat/SupabaseConnection.tsx index 2b03f442..6b2e34a0 100644 --- a/app/components/chat/SupabaseConnection.tsx +++ b/app/components/chat/SupabaseConnection.tsx @@ -21,11 +21,11 @@ export function SupabaseConnection() { handleCreateProject, updateToken, isConnected, + fetchProjectApiKeys, } = useSupabaseConnection(); const currentChatId = useStore(chatId); - // Add event listener for opening the connection dialog useEffect(() => { const handleOpenConnectionDialog = () => { setIsDialogOpen(true); @@ -38,7 +38,6 @@ export function SupabaseConnection() { }; }, [setIsDialogOpen]); - // Load the selected project from localStorage when connected or chat changes useEffect(() => { if (isConnected && currentChatId) { const savedProjectId = localStorage.getItem(`supabase-project-${currentChatId}`); @@ -70,6 +69,12 @@ export function SupabaseConnection() { } }, [isConnected, supabaseConn.token]); + useEffect(() => { + if (isConnected && supabaseConn.selectedProjectId && supabaseConn.token) { + fetchProjectApiKeys(supabaseConn.selectedProjectId).catch(console.error); + } + }, [isConnected, supabaseConn.selectedProjectId, supabaseConn.token]); + return (
diff --git a/app/lib/.server/llm/stream-text.ts b/app/lib/.server/llm/stream-text.ts index 1958dfad..7f5b4857 100644 --- a/app/lib/.server/llm/stream-text.ts +++ b/app/lib/.server/llm/stream-text.ts @@ -16,6 +16,10 @@ export interface StreamingOptions extends Omit[0] supabaseConnection?: { isConnected: boolean; hasSelectedProject: boolean; + credentials?: { + anonKey?: string; + supabaseUrl?: string; + }; }; } @@ -105,6 +109,7 @@ export async function streamText(props: { supabase: { isConnected: options?.supabaseConnection?.isConnected || false, hasSelectedProject: options?.supabaseConnection?.hasSelectedProject || false, + credentials: options?.supabaseConnection?.credentials || undefined, }, }) ?? getSystemPrompt(); diff --git a/app/lib/common/prompt-library.ts b/app/lib/common/prompt-library.ts index 084925b7..f4747d71 100644 --- a/app/lib/common/prompt-library.ts +++ b/app/lib/common/prompt-library.ts @@ -8,6 +8,10 @@ export interface PromptOptions { supabase?: { isConnected: boolean; hasSelectedProject: boolean; + credentials?: { + anonKey?: string; + supabaseUrl?: string; + }; }; } diff --git a/app/lib/common/prompts/prompts.ts b/app/lib/common/prompts/prompts.ts index 149f1b5f..eb7ec1a1 100644 --- a/app/lib/common/prompts/prompts.ts +++ b/app/lib/common/prompts/prompts.ts @@ -4,7 +4,11 @@ import { stripIndents } from '~/utils/stripIndent'; export const getSystemPrompt = ( cwd: string = WORK_DIR, - supabase?: { isConnected: boolean; hasSelectedProject: boolean }, + supabase?: { + isConnected: boolean; + hasSelectedProject: boolean; + credentials?: { anonKey?: string; supabaseUrl?: string }; + }, ) => ` You are Bolt, an expert AI assistant and exceptional senior software developer with vast knowledge across multiple programming languages, frameworks, and best practices. @@ -76,8 +80,16 @@ You are Bolt, an expert AI assistant and exceptional senior software developer w : '' : '' } - The environment variables for Supabase connection will be available in the project's \`.env\` file. - IMPORTANT: Create a .env file if it doesnt exist. + IMPORTANT: Create a .env file if it doesnt exist and include the following variables: + ${ + supabase?.isConnected && + supabase?.hasSelectedProject && + supabase?.credentials?.supabaseUrl && + supabase?.credentials?.anonKey + ? `VITE_SUPABASE_URL=${supabase.credentials.supabaseUrl} + VITE_SUPABASE_ANON_KEY=${supabase.credentials.anonKey}` + : 'SUPABASE_URL=your_supabase_url\nSUPABASE_ANON_KEY=your_supabase_anon_key' + } NEVER modify any Supabase configuration or \`.env\` files. CRITICAL DATA PRESERVATION AND SAFETY REQUIREMENTS: diff --git a/app/lib/hooks/useSupabaseConnection.ts b/app/lib/hooks/useSupabaseConnection.ts index 5bbe12ea..8a2f8118 100644 --- a/app/lib/hooks/useSupabaseConnection.ts +++ b/app/lib/hooks/useSupabaseConnection.ts @@ -2,21 +2,39 @@ import { useEffect, useState } from 'react'; import { toast } from 'react-toastify'; import { useStore } from '@nanostores/react'; import { logStore } from '~/lib/stores/logs'; -import { supabaseConnection, isConnecting, isFetchingStats, updateSupabaseConnection } from '~/lib/stores/supabase'; +import { + supabaseConnection, + isConnecting, + isFetchingStats, + isFetchingApiKeys, + updateSupabaseConnection, + fetchProjectApiKeys, +} from '~/lib/stores/supabase'; export function useSupabaseConnection() { const connection = useStore(supabaseConnection); const connecting = useStore(isConnecting); const fetchingStats = useStore(isFetchingStats); + const fetchingApiKeys = useStore(isFetchingApiKeys); const [isProjectsExpanded, setIsProjectsExpanded] = useState(false); const [isDropdownOpen, setIsDropdownOpen] = useState(false); useEffect(() => { const savedConnection = localStorage.getItem('supabase_connection'); + const savedCredentials = localStorage.getItem('supabaseCredentials'); if (savedConnection) { const parsed = JSON.parse(savedConnection); + + if (savedCredentials && !parsed.credentials) { + parsed.credentials = JSON.parse(savedCredentials); + } + updateSupabaseConnection(parsed); + + if (parsed.token && parsed.selectedProjectId && !parsed.credentials) { + fetchProjectApiKeys(parsed.selectedProjectId, parsed.token).catch(console.error); + } } }, []); @@ -50,7 +68,6 @@ export function useSupabaseConnection() { toast.success('Successfully connected to Supabase'); - // Keep the dialog open and expand the projects section setIsProjectsExpanded(true); return true; @@ -72,7 +89,7 @@ export function useSupabaseConnection() { setIsDropdownOpen(false); }; - const selectProject = (projectId: string) => { + const selectProject = async (projectId: string) => { const currentState = supabaseConnection.get(); let projectData = undefined; @@ -85,7 +102,18 @@ export function useSupabaseConnection() { project: projectData, }); - toast.success('Project selected successfully'); + if (projectId && currentState.token) { + try { + await fetchProjectApiKeys(projectId, currentState.token); + toast.success('Project selected successfully'); + } catch (error) { + console.error('Failed to fetch API keys:', error); + toast.error('Selected project but failed to fetch API keys'); + } + } else { + toast.success('Project selected successfully'); + } + setIsDropdownOpen(false); }; @@ -97,6 +125,7 @@ export function useSupabaseConnection() { connection, connecting, fetchingStats, + fetchingApiKeys, isProjectsExpanded, setIsProjectsExpanded, isDropdownOpen, @@ -107,5 +136,12 @@ export function useSupabaseConnection() { handleCreateProject, updateToken: (token: string) => updateSupabaseConnection({ ...connection, token }), isConnected: !!(connection.user && connection.token), + fetchProjectApiKeys: (projectId: string) => { + if (connection.token) { + return fetchProjectApiKeys(projectId, connection.token); + } + + return Promise.reject(new Error('No token available')); + }, }; } diff --git a/app/lib/stores/supabase.ts b/app/lib/stores/supabase.ts index 9f624e5b..3b8a5813 100644 --- a/app/lib/stores/supabase.ts +++ b/app/lib/stores/supabase.ts @@ -1,5 +1,5 @@ import { atom } from 'nanostores'; -import type { SupabaseUser, SupabaseStats } from '~/types/supabase'; +import type { SupabaseUser, SupabaseStats, SupabaseApiKey, SupabaseCredentials } from '~/types/supabase'; export interface SupabaseProject { id: string; @@ -22,10 +22,10 @@ export interface SupabaseConnectionState { stats?: SupabaseStats; selectedProjectId?: string; isConnected?: boolean; - project?: SupabaseProject; // Add the selected project data + project?: SupabaseProject; + credentials?: SupabaseCredentials; } -// Init from localStorage if available const savedConnection = typeof localStorage !== 'undefined' ? localStorage.getItem('supabase_connection') : null; const initialState: SupabaseConnectionState = savedConnection @@ -36,30 +36,28 @@ const initialState: SupabaseConnectionState = savedConnection stats: undefined, selectedProjectId: undefined, isConnected: false, - project: undefined, // Initialize as undefined + project: undefined, }; export const supabaseConnection = atom(initialState); -// After init, fetch stats if we have a token if (initialState.token && !initialState.stats) { fetchSupabaseStats(initialState.token).catch(console.error); } export const isConnecting = atom(false); export const isFetchingStats = atom(false); +export const isFetchingApiKeys = atom(false); export function updateSupabaseConnection(connection: Partial) { const currentState = supabaseConnection.get(); - // Set isConnected based on user presence AND token if (connection.user !== undefined || connection.token !== undefined) { const newUser = connection.user !== undefined ? connection.user : currentState.user; const newToken = connection.token !== undefined ? connection.token : currentState.token; connection.isConnected = !!(newUser && newToken); } - // Update the project data when selectedProjectId changes if (connection.selectedProjectId !== undefined) { if (connection.selectedProjectId && currentState.stats?.projects) { const selectedProject = currentState.stats.projects.find( @@ -69,7 +67,6 @@ export function updateSupabaseConnection(connection: Partial key.name === 'anon' || key.name === 'public'); + + if (anonKey) { + const supabaseUrl = `https://${projectId}.supabase.co`; + + updateSupabaseConnection({ + credentials: { + anonKey: anonKey.api_key, + supabaseUrl, + }, + }); + + return { anonKey: anonKey.api_key, supabaseUrl }; + } + + return null; + } catch (error) { + console.error('Failed to fetch project API keys:', error); + throw error; + } finally { + isFetchingApiKeys.set(false); + } +} diff --git a/app/routes/api.chat.ts b/app/routes/api.chat.ts index 6861d15d..5917dfc4 100644 --- a/app/routes/api.chat.ts +++ b/app/routes/api.chat.ts @@ -45,6 +45,10 @@ async function chatAction({ context, request }: ActionFunctionArgs) { supabase?: { isConnected: boolean; hasSelectedProject: boolean; + credentials?: { + anonKey?: string; + supabaseUrl?: string; + }; }; }>(); @@ -183,7 +187,6 @@ async function chatAction({ context, request }: ActionFunctionArgs) { // logger.debug('Code Files Selected'); } - // Stream the text const options: StreamingOptions = { supabaseConnection: supabase, toolChoice: 'none', diff --git a/app/routes/api.supabase.ts b/app/routes/api.supabase.ts index 56d9f810..955ae44e 100644 --- a/app/routes/api.supabase.ts +++ b/app/routes/api.supabase.ts @@ -7,7 +7,6 @@ export const action: ActionFunction = async ({ request }) => { return json({ error: 'Method not allowed' }, { status: 405 }); } - // Inside the action function try { const { token } = (await request.json()) as any; @@ -27,17 +26,14 @@ export const action: ActionFunction = async ({ request }) => { const projects = (await projectsResponse.json()) as SupabaseProject[]; - // Create a Map to store unique projects by ID const uniqueProjectsMap = new Map(); - // Only keep the latest version of each project for (const project of projects) { if (!uniqueProjectsMap.has(project.id)) { uniqueProjectsMap.set(project.id, project); } } - // Debug log to see unique projects console.log( 'Unique projects:', Array.from(uniqueProjectsMap.values()).map((p) => ({ id: p.id, name: p.name })), @@ -45,7 +41,6 @@ export const action: ActionFunction = async ({ request }) => { const uniqueProjects = Array.from(uniqueProjectsMap.values()); - // Sort projects by creation date (newest first) uniqueProjects.sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()); return json({ diff --git a/app/routes/api.supabase.variables.ts b/app/routes/api.supabase.variables.ts new file mode 100644 index 00000000..fd2d028f --- /dev/null +++ b/app/routes/api.supabase.variables.ts @@ -0,0 +1,33 @@ +import { json } from '@remix-run/node'; +import type { ActionFunctionArgs } from '@remix-run/node'; + +export async function action({ request }: ActionFunctionArgs) { + try { + // Add proper type assertion for the request body + const body = (await request.json()) as { projectId?: string; token?: string }; + const { projectId, token } = body; + + if (!projectId || !token) { + return json({ error: 'Project ID and token are required' }, { status: 400 }); + } + + const response = await fetch(`https://api.supabase.com/v1/projects/${projectId}/api-keys`, { + method: 'GET', + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'application/json', + }, + }); + + if (!response.ok) { + return json({ error: `Failed to fetch API keys: ${response.statusText}` }, { status: response.status }); + } + + const apiKeys = await response.json(); + + return json({ apiKeys }); + } catch (error) { + console.error('Error fetching project API keys:', error); + return json({ error: error instanceof Error ? error.message : 'Unknown error occurred' }, { status: 500 }); + } +} diff --git a/app/types/supabase.ts b/app/types/supabase.ts index d16d50c2..f99bbaf2 100644 --- a/app/types/supabase.ts +++ b/app/types/supabase.ts @@ -19,3 +19,13 @@ export interface SupabaseStats { projects: SupabaseProject[]; totalProjects: number; } + +export interface SupabaseApiKey { + name: string; + api_key: string; +} + +export interface SupabaseCredentials { + anonKey?: string; + supabaseUrl?: string; +} From c9c6f4e265d911697c680c78685e34c2cc221fdf Mon Sep 17 00:00:00 2001 From: KevIsDev Date: Thu, 20 Mar 2025 11:21:18 +0000 Subject: [PATCH 031/115] fix: add Supabase database instructions to optimized prompts Include detailed guidelines for handling database operations using Supabase, covering setup, migrations, security, and best practices. This ensures consistent and secure database interactions in projects. --- app/lib/common/prompts/optimized.ts | 199 +++++++++++++++++++++++++++- 1 file changed, 198 insertions(+), 1 deletion(-) diff --git a/app/lib/common/prompts/optimized.ts b/app/lib/common/prompts/optimized.ts index 33872088..4de3232b 100644 --- a/app/lib/common/prompts/optimized.ts +++ b/app/lib/common/prompts/optimized.ts @@ -1,7 +1,7 @@ import type { PromptOptions } from '~/lib/common/prompt-library'; export default (options: PromptOptions) => { - const { cwd, allowedHtmlElements } = options; + const { cwd, allowedHtmlElements, supabase } = options; return ` You are Bolt, an expert AI assistant and exceptional senior software developer with vast knowledge across multiple programming languages, frameworks, and best practices. @@ -18,6 +18,203 @@ You are Bolt, an expert AI assistant and exceptional senior software developer w Available shell commands: cat, cp, ls, mkdir, mv, rm, rmdir, touch, hostname, ps, pwd, uptime, env, node, python3, code, jq, curl, head, sort, tail, clear, which, export, chmod, scho, kill, ln, xxd, alias, getconf, loadenv, wasm, xdg-open, command, exit, source + + The following instructions guide how you should handle database operations in projects. + + CRITICAL: Use Supabase for databases by default, unless specified otherwise. + + IMPORTANT NOTE: Supabase project setup and configuration is handled seperately by the user! ${ + supabase + ? !supabase.isConnected + ? 'You are not connected to Supabase. Remind the user to "connect to Supabase in the chat box before proceeding with database operations".' + : !supabase.hasSelectedProject + ? 'Remind the user "You are connected to Supabase but no project is selected. Remind the user to select a project in the chat box before proceeding with database operations".' + : '' + : '' + } + IMPORTANT: Create a .env file if it doesnt exist and include the following variables: + ${ + supabase?.isConnected && + supabase?.hasSelectedProject && + supabase?.credentials?.supabaseUrl && + supabase?.credentials?.anonKey + ? `VITE_SUPABASE_URL=${supabase.credentials.supabaseUrl} + VITE_SUPABASE_ANON_KEY=${supabase.credentials.anonKey}` + : 'SUPABASE_URL=your_supabase_url\nSUPABASE_ANON_KEY=your_supabase_anon_key' + } + NEVER modify any Supabase configuration or \`.env\` files. + + CRITICAL DATA PRESERVATION AND SAFETY REQUIREMENTS: + - DATA INTEGRITY IS THE HIGHEST PRIORITY, users must NEVER lose their data + - FORBIDDEN: Any destructive operations like \`DROP\` or \`DELETE\` that could result in data loss (e.g., when dropping columns, changing column types, renaming tables, etc.) + - FORBIDDEN: Any transaction control statements (e.g., explicit transaction management) such as: + - \`BEGIN\` + - \`COMMIT\` + - \`ROLLBACK\` + - \`END\` + + Note: This does NOT apply to \`DO $$ BEGIN ... END $$\` blocks, which are PL/pgSQL anonymous blocks! + + Writing SQL Migrations: + CRITICAL: For EVERY database change, you MUST provide TWO actions: + 1. Migration File Creation: + + /* SQL migration content */ + + + 2. Immediate Query Execution: + + /* Same SQL content as migration */ + + + Example: + + + CREATE TABLE users ( + id uuid PRIMARY KEY DEFAULT gen_random_uuid(), + email text UNIQUE NOT NULL + ); + + + + CREATE TABLE users ( + id uuid PRIMARY KEY DEFAULT gen_random_uuid(), + email text UNIQUE NOT NULL + ); + + + + - IMPORTANT: The SQL content must be identical in both actions to ensure consistency between the migration file and the executed query. + - CRITICAL: NEVER use diffs for migration files, ALWAYS provide COMPLETE file content + - For each database change, create a new SQL migration file in \`/home/project/supabase/migrations\` + - NEVER update existing migration files, ALWAYS create a new migration file for any changes + - Name migration files descriptively and DO NOT include a number prefix (e.g., \`create_users.sql\`, \`add_posts_table.sql\`). + + - DO NOT worry about ordering as the files will be renamed correctly! + + - ALWAYS enable row level security (RLS) for new tables: + + + alter table users enable row level security; + + + - Add appropriate RLS policies for CRUD operations for each table + + - Use default values for columns: + - Set default values for columns where appropriate to ensure data consistency and reduce null handling + - Common default values include: + - Booleans: \`DEFAULT false\` or \`DEFAULT true\` + - Numbers: \`DEFAULT 0\` + - Strings: \`DEFAULT ''\` or meaningful defaults like \`'user'\` + - Dates/Timestamps: \`DEFAULT now()\` or \`DEFAULT CURRENT_TIMESTAMP\` + - Be cautious not to set default values that might mask problems; sometimes it's better to allow an error than to proceed with incorrect data + + - CRITICAL: Each migration file MUST follow these rules: + - ALWAYS Start with a markdown summary block (in a multi-line comment) that: + - Include a short, descriptive title (using a headline) that summarizes the changes (e.g., "Schema update for blog features") + - Explains in plain English what changes the migration makes + - Lists all new tables and their columns with descriptions + - Lists all modified tables and what changes were made + - Describes any security changes (RLS, policies) + - Includes any important notes + - Uses clear headings and numbered sections for readability, like: + 1. New Tables + 2. Security + 3. Changes + + IMPORTANT: The summary should be detailed enough that both technical and non-technical stakeholders can understand what the migration does without reading the SQL. + + - Include all necessary operations (e.g., table creation and updates, RLS, policies) + + Here is an example of a migration file: + + + /* + # Create users table + + 1. New Tables + - \`users\` + - \`id\` (uuid, primary key) + - \`email\` (text, unique) + - \`created_at\` (timestamp) + 2. Security + - Enable RLS on \`users\` table + - Add policy for authenticated users to read their own data + */ + + CREATE TABLE IF NOT EXISTS users ( + id uuid PRIMARY KEY DEFAULT gen_random_uuid(), + email text UNIQUE NOT NULL, + created_at timestamptz DEFAULT now() + ); + + ALTER TABLE users ENABLE ROW LEVEL SECURITY; + + CREATE POLICY "Users can read own data" + ON users + FOR SELECT + TO authenticated + USING (auth.uid() = id); + + + - Ensure SQL statements are safe and robust: + - Use \`IF EXISTS\` or \`IF NOT EXISTS\` to prevent errors when creating or altering database objects. Here are examples: + + + CREATE TABLE IF NOT EXISTS users ( + id uuid PRIMARY KEY DEFAULT gen_random_uuid(), + email text UNIQUE NOT NULL, + created_at timestamptz DEFAULT now() + ); + + + + DO $$ + BEGIN + IF NOT EXISTS ( + SELECT 1 FROM information_schema.columns + WHERE table_name = 'users' AND column_name = 'last_login' + ) THEN + ALTER TABLE users ADD COLUMN last_login timestamptz; + END IF; + END $$; + + + Client Setup: + - Use \`@supabase/supabase-js\` + - Create a singleton client instance + - Use the environment variables from the project's \`.env\` file + - Use TypeScript generated types from the schema + + Authentication: + - ALWAYS use email and password sign up + - FORBIDDEN: NEVER use magic links, social providers, or SSO for authentication unless explicitly stated! + - FORBIDDEN: NEVER create your own authentication system or authentication table, ALWAYS use Supabase's built-in authentication! + - Email confirmation is ALWAYS disabled unless explicitly stated! + + Row Level Security: + - ALWAYS enable RLS for every new table + - Create policies based on user authentication + - Test RLS policies by: + 1. Verifying authenticated users can only access their allowed data + 2. Confirming unauthenticated users cannot access protected data + 3. Testing edge cases in policy conditions + + Best Practices: + - One migration per logical change + - Use descriptive policy names + - Add indexes for frequently queried columns + - Keep RLS policies simple and focused + - Use foreign key constraints + + TypeScript Integration: + - Generate types from database schema + - Use strong typing for all database operations + - Maintain type safety throughout the application + + IMPORTANT: NEVER skip RLS setup for any table. Security is non-negotiable! + + Use 2 spaces for indentation From 6a79bc6e5bf312fb37367b3adb61132179ae0386 Mon Sep 17 00:00:00 2001 From: KevIsDev Date: Thu, 20 Mar 2025 12:32:10 +0000 Subject: [PATCH 032/115] fix: supabase button color to default --- app/components/chat/SupabaseConnection.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/chat/SupabaseConnection.tsx b/app/components/chat/SupabaseConnection.tsx index 6b2e34a0..7844fab6 100644 --- a/app/components/chat/SupabaseConnection.tsx +++ b/app/components/chat/SupabaseConnection.tsx @@ -315,7 +315,7 @@ function Button({ active = false, disabled = false, children, onClick, className { 'bg-bolt-elements-item-backgroundDefault hover:bg-bolt-elements-item-backgroundActive text-bolt-elements-textTertiary hover:text-bolt-elements-textPrimary': !active, - 'bg-bolt-elements-item-backgroundAccent text-bolt-elements-item-contentAccent': active && !disabled, + 'bg-bolt-elements-item-backgroundDefault text-bolt-elements-item-contentAccent': active && !disabled, 'bg-bolt-elements-item-backgroundDefault text-alpha-gray-20 dark:text-alpha-white-20 cursor-not-allowed': disabled, }, From a109fc127f3829727045a7c6c74a4e97b9906cd2 Mon Sep 17 00:00:00 2001 From: KevIsDev Date: Thu, 20 Mar 2025 14:22:35 +0000 Subject: [PATCH 033/115] fix: ensure supabase credentials are persistent on reloads --- app/components/chat/SupabaseConnection.tsx | 4 ++-- app/lib/common/prompts/prompts.ts | 19 ++++++++----------- app/lib/stores/supabase.ts | 9 +++++++++ 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/app/components/chat/SupabaseConnection.tsx b/app/components/chat/SupabaseConnection.tsx index 7844fab6..a9261f4d 100644 --- a/app/components/chat/SupabaseConnection.tsx +++ b/app/components/chat/SupabaseConnection.tsx @@ -70,10 +70,10 @@ export function SupabaseConnection() { }, [isConnected, supabaseConn.token]); useEffect(() => { - if (isConnected && supabaseConn.selectedProjectId && supabaseConn.token) { + if (isConnected && supabaseConn.selectedProjectId && supabaseConn.token && !supabaseConn.credentials) { fetchProjectApiKeys(supabaseConn.selectedProjectId).catch(console.error); } - }, [isConnected, supabaseConn.selectedProjectId, supabaseConn.token]); + }, [isConnected, supabaseConn.selectedProjectId, supabaseConn.token, supabaseConn.credentials]); return (
diff --git a/app/lib/common/prompts/prompts.ts b/app/lib/common/prompts/prompts.ts index eb7ec1a1..7d245475 100644 --- a/app/lib/common/prompts/prompts.ts +++ b/app/lib/common/prompts/prompts.ts @@ -80,17 +80,14 @@ You are Bolt, an expert AI assistant and exceptional senior software developer w : '' : '' } - IMPORTANT: Create a .env file if it doesnt exist and include the following variables: - ${ - supabase?.isConnected && - supabase?.hasSelectedProject && - supabase?.credentials?.supabaseUrl && - supabase?.credentials?.anonKey - ? `VITE_SUPABASE_URL=${supabase.credentials.supabaseUrl} - VITE_SUPABASE_ANON_KEY=${supabase.credentials.anonKey}` - : 'SUPABASE_URL=your_supabase_url\nSUPABASE_ANON_KEY=your_supabase_anon_key' - } - NEVER modify any Supabase configuration or \`.env\` files. + IMPORTANT: Create a .env file and ALWAYS populate the variables${ + supabase?.credentials?.supabaseUrl && supabase?.credentials?.anonKey + ? ` and include the following variables: + VITE_SUPABASE_URL=${supabase.credentials.supabaseUrl} + VITE_SUPABASE_ANON_KEY=${supabase.credentials.anonKey}` + : '.' + } + NEVER modify any Supabase configuration or \`.env\` files apart from creating the \`.env\`. CRITICAL DATA PRESERVATION AND SAFETY REQUIREMENTS: - DATA INTEGRITY IS THE HIGHEST PRIORITY, users must NEVER lose their data diff --git a/app/lib/stores/supabase.ts b/app/lib/stores/supabase.ts index 3b8a5813..72540914 100644 --- a/app/lib/stores/supabase.ts +++ b/app/lib/stores/supabase.ts @@ -27,6 +27,7 @@ export interface SupabaseConnectionState { } const savedConnection = typeof localStorage !== 'undefined' ? localStorage.getItem('supabase_connection') : null; +const savedCredentials = typeof localStorage !== 'undefined' ? localStorage.getItem('supabaseCredentials') : null; const initialState: SupabaseConnectionState = savedConnection ? JSON.parse(savedConnection) @@ -39,6 +40,14 @@ const initialState: SupabaseConnectionState = savedConnection project: undefined, }; +if (savedCredentials && !initialState.credentials) { + try { + initialState.credentials = JSON.parse(savedCredentials); + } catch (e) { + console.error('Failed to parse saved credentials:', e); + } +} + export const supabaseConnection = atom(initialState); if (initialState.token && !initialState.stats) { From d53acdadda5ebde25407ac78d7c6df273cc5841f Mon Sep 17 00:00:00 2001 From: KevIsDev Date: Thu, 20 Mar 2025 14:25:31 +0000 Subject: [PATCH 034/115] fix: ensure supabase credentials are populating the env file by default --- app/lib/common/prompts/prompts.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/lib/common/prompts/prompts.ts b/app/lib/common/prompts/prompts.ts index 7d245475..26610b78 100644 --- a/app/lib/common/prompts/prompts.ts +++ b/app/lib/common/prompts/prompts.ts @@ -80,8 +80,11 @@ You are Bolt, an expert AI assistant and exceptional senior software developer w : '' : '' } - IMPORTANT: Create a .env file and ALWAYS populate the variables${ - supabase?.credentials?.supabaseUrl && supabase?.credentials?.anonKey + IMPORTANT: Create a .env file if it doesnt exist${ + supabase?.isConnected && + supabase?.hasSelectedProject && + supabase?.credentials?.supabaseUrl && + supabase?.credentials?.anonKey ? ` and include the following variables: VITE_SUPABASE_URL=${supabase.credentials.supabaseUrl} VITE_SUPABASE_ANON_KEY=${supabase.credentials.anonKey}` From bc9948062efeacb619af875045ff1fa7cde15d89 Mon Sep 17 00:00:00 2001 From: KevIsDev Date: Fri, 21 Mar 2025 13:20:14 +0000 Subject: [PATCH 035/115] fix: add instruction to avoid generating types for supabase --- app/lib/common/prompts/prompts.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/lib/common/prompts/prompts.ts b/app/lib/common/prompts/prompts.ts index 26610b78..8fcacfd7 100644 --- a/app/lib/common/prompts/prompts.ts +++ b/app/lib/common/prompts/prompts.ts @@ -92,6 +92,8 @@ You are Bolt, an expert AI assistant and exceptional senior software developer w } NEVER modify any Supabase configuration or \`.env\` files apart from creating the \`.env\`. + Do not try to generate types for supabase. + CRITICAL DATA PRESERVATION AND SAFETY REQUIREMENTS: - DATA INTEGRITY IS THE HIGHEST PRIORITY, users must NEVER lose their data - FORBIDDEN: Any destructive operations like \`DROP\` or \`DELETE\` that could result in data loss (e.g., when dropping columns, changing column types, renaming tables, etc.) From 1660971cc363a99717783168cef26d1b9b61a821 Mon Sep 17 00:00:00 2001 From: Derek Wang Date: Sun, 23 Mar 2025 15:31:16 -0700 Subject: [PATCH 036/115] ci: give electron action permission --- .github/workflows/electron.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/electron.yml b/.github/workflows/electron.yml index 29ff2a67..7517f6ce 100644 --- a/.github/workflows/electron.yml +++ b/.github/workflows/electron.yml @@ -8,13 +8,16 @@ on: tags: - 'v*' +permissions: + contents: write + jobs: build: runs-on: ${{ matrix.os }} strategy: matrix: - os: [macos-latest, ubuntu-latest, windows-latest] + os: [ubuntu-latest, windows-latest] # TODO: add back macos-latest when notarize is figured out node-version: [18.18.0] fail-fast: false @@ -80,7 +83,7 @@ jobs: - name: Create Release uses: softprops/action-gh-release@v2 with: - draft: ${{ github.ref_type == 'branch' }} + draft: ${{ github.event_name == 'workflow_dispatch' || github.ref_type == 'branch' }} files: | dist/*.exe dist/*.dmg From 418fbf13e02d19dc0bc5eec37eb54bfe7a97253e Mon Sep 17 00:00:00 2001 From: KevIsDev Date: Tue, 25 Mar 2025 13:54:15 +0000 Subject: [PATCH 037/115] refactor: remove debug log and improve button layout in SupabaseConnection Remove console.log statement for debugging purposes in the API route and enhance the layout of buttons in the SupabaseConnection component by grouping them and adding a refresh button --- app/components/chat/SupabaseConnection.tsx | 24 +++++++++++++++------- app/routes/api.supabase.ts | 5 ----- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/app/components/chat/SupabaseConnection.tsx b/app/components/chat/SupabaseConnection.tsx index a9261f4d..dc73973a 100644 --- a/app/components/chat/SupabaseConnection.tsx +++ b/app/components/chat/SupabaseConnection.tsx @@ -214,13 +214,23 @@ export function SupabaseConnection() { )} /> - +
+ + +
{isProjectsExpanded && ( diff --git a/app/routes/api.supabase.ts b/app/routes/api.supabase.ts index 955ae44e..f21da60f 100644 --- a/app/routes/api.supabase.ts +++ b/app/routes/api.supabase.ts @@ -34,11 +34,6 @@ export const action: ActionFunction = async ({ request }) => { } } - console.log( - 'Unique projects:', - Array.from(uniqueProjectsMap.values()).map((p) => ({ id: p.id, name: p.name })), - ); - const uniqueProjects = Array.from(uniqueProjectsMap.values()); uniqueProjects.sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime()); From 687b03ba7467e3432303b174d29f9507f970baad Mon Sep 17 00:00:00 2001 From: KevIsDev Date: Thu, 27 Mar 2025 00:06:10 +0000 Subject: [PATCH 038/115] feat: add Vercel integration for project deployment This commit introduces Vercel integration, enabling users to deploy projects directly to Vercel. It includes: - New Vercel types and store for managing connections and stats. - A VercelConnection component for managing Vercel account connections. - A VercelDeploymentLink component for displaying deployment links. - API routes for handling Vercel deployments. - Updates to the HeaderActionButtons component to support Vercel deployment. The integration allows users to connect their Vercel accounts, view project stats, and deploy projects with ease. --- .../tabs/connections/ConnectionsTab.tsx | 4 + .../tabs/connections/VercelConnection.tsx | 289 ++++++++++++++++++ .../chat/NetlifyDeploymentLink.client.tsx | 4 +- .../chat/VercelDeploymentLink.client.tsx | 158 ++++++++++ .../header/HeaderActionButtons.client.tsx | 165 ++++++++-- app/lib/stores/vercel.ts | 94 ++++++ .../{api.deploy.ts => api.netlify-deploy.ts} | 0 app/routes/api.vercel-deploy.ts | 248 +++++++++++++++ app/types/vercel.ts | 40 +++ 9 files changed, 982 insertions(+), 20 deletions(-) create mode 100644 app/components/@settings/tabs/connections/VercelConnection.tsx create mode 100644 app/components/chat/VercelDeploymentLink.client.tsx create mode 100644 app/lib/stores/vercel.ts rename app/routes/{api.deploy.ts => api.netlify-deploy.ts} (100%) create mode 100644 app/routes/api.vercel-deploy.ts create mode 100644 app/types/vercel.ts diff --git a/app/components/@settings/tabs/connections/ConnectionsTab.tsx b/app/components/@settings/tabs/connections/ConnectionsTab.tsx index 72ff6434..defd7aeb 100644 --- a/app/components/@settings/tabs/connections/ConnectionsTab.tsx +++ b/app/components/@settings/tabs/connections/ConnectionsTab.tsx @@ -1,5 +1,6 @@ import { motion } from 'framer-motion'; import React, { Suspense } from 'react'; +import VercelConnection from './VercelConnection'; // Use React.lazy for dynamic imports const GithubConnection = React.lazy(() => import('./GithubConnection')); @@ -39,6 +40,9 @@ export default function ConnectionsTab() { }> + }> + +
); diff --git a/app/components/@settings/tabs/connections/VercelConnection.tsx b/app/components/@settings/tabs/connections/VercelConnection.tsx new file mode 100644 index 00000000..4a442a08 --- /dev/null +++ b/app/components/@settings/tabs/connections/VercelConnection.tsx @@ -0,0 +1,289 @@ +import React, { useEffect, useState } from 'react'; +import { motion } from 'framer-motion'; +import { toast } from 'react-toastify'; +import { useStore } from '@nanostores/react'; +import { logStore } from '~/lib/stores/logs'; +import { classNames } from '~/utils/classNames'; +import { + vercelConnection, + isConnecting, + isFetchingStats, + updateVercelConnection, + fetchVercelStats, +} from '~/lib/stores/vercel'; + +export default function VercelConnection() { + const connection = useStore(vercelConnection); + const connecting = useStore(isConnecting); + const fetchingStats = useStore(isFetchingStats); + const [isProjectsExpanded, setIsProjectsExpanded] = useState(false); + + useEffect(() => { + const fetchProjects = async () => { + if (connection.user && connection.token) { + await fetchVercelStats(connection.token); + } + }; + fetchProjects(); + }, [connection.user, connection.token]); + + const handleConnect = async (event: React.FormEvent) => { + event.preventDefault(); + isConnecting.set(true); + + try { + const response = await fetch('https://api.vercel.com/v2/user', { + headers: { + Authorization: `Bearer ${connection.token}`, + 'Content-Type': 'application/json', + }, + }); + + if (!response.ok) { + throw new Error('Invalid token or unauthorized'); + } + + const userData = (await response.json()) as any; + updateVercelConnection({ + user: userData.user || userData, // Handle both possible structures + token: connection.token, + }); + + await fetchVercelStats(connection.token); + toast.success('Successfully connected to Vercel'); + } catch (error) { + console.error('Auth error:', error); + logStore.logError('Failed to authenticate with Vercel', { error }); + toast.error('Failed to connect to Vercel'); + updateVercelConnection({ user: null, token: '' }); + } finally { + isConnecting.set(false); + } + }; + + const handleDisconnect = () => { + updateVercelConnection({ user: null, token: '' }); + toast.success('Disconnected from Vercel'); + }; + + console.log('connection', connection); + + return ( + +
+
+
+ +

Vercel Connection

+
+
+ + {!connection.user ? ( +
+
+ + updateVercelConnection({ ...connection, token: e.target.value })} + disabled={connecting} + placeholder="Enter your Vercel personal access token" + className={classNames( + 'w-full px-3 py-2 rounded-lg text-sm', + 'bg-[#F8F8F8] dark:bg-[#1A1A1A]', + 'border border-[#E5E5E5] dark:border-[#333333]', + 'text-bolt-elements-textPrimary placeholder-bolt-elements-textTertiary', + 'focus:outline-none focus:ring-1 focus:ring-bolt-elements-borderColorActive', + 'disabled:opacity-50', + )} + /> + + + +
+ ) : ( +
+
+
+ + +
+ Connected to Vercel + +
+
+ +
+ {/* Debug output */} +
{JSON.stringify(connection.user, null, 2)}
+ + User Avatar +
+

+ {connection.user?.username || connection.user?.user?.username || 'Vercel User'} +

+

+ {connection.user?.email || connection.user?.user?.email || 'No email available'} +

+
+
+ + {fetchingStats ? ( +
+
+ Fetching Vercel projects... +
+ ) : ( +
+ + {isProjectsExpanded && connection.stats?.projects?.length ? ( +
+ {connection.stats.projects.map((project) => ( + +
+
+
+
+ {project.name} +
+
+ {project.targets?.production?.alias && project.targets.production.alias.length > 0 ? ( + <> + a.endsWith('.vercel.app') && !a.includes('-projects.vercel.app')) || project.targets.production.alias[0]}`} + target="_blank" + rel="noopener noreferrer" + className="hover:text-bolt-elements-borderColorActive" + > + {project.targets.production.alias.find( + (a: string) => a.endsWith('.vercel.app') && !a.includes('-projects.vercel.app'), + ) || project.targets.production.alias[0]} + + β€’ + +
+ {new Date(project.createdAt).toLocaleDateString()} + + + ) : project.latestDeployments && project.latestDeployments.length > 0 ? ( + <> + + {project.latestDeployments[0].url} + + β€’ + +
+ {new Date(project.latestDeployments[0].created).toLocaleDateString()} + + + ) : null} +
+
+ {project.framework && ( +
+ +
+ {project.framework} + +
+ )} +
+ + ))} +
+ ) : isProjectsExpanded ? ( +
+
+ No projects found in your Vercel account +
+ ) : null} +
+ )} +
+ )} +
+ + ); +} diff --git a/app/components/chat/NetlifyDeploymentLink.client.tsx b/app/components/chat/NetlifyDeploymentLink.client.tsx index da8e0b41..4e60793f 100644 --- a/app/components/chat/NetlifyDeploymentLink.client.tsx +++ b/app/components/chat/NetlifyDeploymentLink.client.tsx @@ -30,10 +30,10 @@ export function NetlifyDeploymentLink() { rel="noopener noreferrer" className="inline-flex items-center justify-center w-8 h-8 rounded hover:bg-bolt-elements-item-backgroundActive text-bolt-elements-textSecondary hover:text-[#00AD9F] z-50" onClick={(e) => { - e.stopPropagation(); // Add this to prevent click from bubbling up + e.stopPropagation(); // This is to prevent click from bubbling up }} > -
+
diff --git a/app/components/chat/VercelDeploymentLink.client.tsx b/app/components/chat/VercelDeploymentLink.client.tsx new file mode 100644 index 00000000..ecb5a587 --- /dev/null +++ b/app/components/chat/VercelDeploymentLink.client.tsx @@ -0,0 +1,158 @@ +import { useStore } from '@nanostores/react'; +import { vercelConnection } from '~/lib/stores/vercel'; +import { chatId } from '~/lib/persistence/useChatHistory'; +import * as Tooltip from '@radix-ui/react-tooltip'; +import { useEffect, useState } from 'react'; + +export function VercelDeploymentLink() { + const connection = useStore(vercelConnection); + const currentChatId = useStore(chatId); + const [deploymentUrl, setDeploymentUrl] = useState(null); + const [isLoading, setIsLoading] = useState(false); + + useEffect(() => { + async function fetchProjectData() { + if (!connection.token || !currentChatId) { + return; + } + + // Check if we have a stored project ID for this chat + const projectId = localStorage.getItem(`vercel-project-${currentChatId}`); + + if (!projectId) { + return; + } + + setIsLoading(true); + + try { + // Fetch projects directly from the API + const projectsResponse = await fetch('https://api.vercel.com/v9/projects', { + headers: { + Authorization: `Bearer ${connection.token}`, + 'Content-Type': 'application/json', + }, + cache: 'no-store', + }); + + if (!projectsResponse.ok) { + throw new Error(`Failed to fetch projects: ${projectsResponse.status}`); + } + + const projectsData = (await projectsResponse.json()) as any; + const projects = projectsData.projects || []; + + // Extract the chat number from currentChatId + const chatNumber = currentChatId.split('-')[0]; + + // Find project by matching the chat number in the name + const project = projects.find((p: { name: string | string[] }) => p.name.includes(`bolt-diy-${chatNumber}`)); + + if (project) { + // Fetch project details including deployments + const projectDetailsResponse = await fetch(`https://api.vercel.com/v9/projects/${project.id}`, { + headers: { + Authorization: `Bearer ${connection.token}`, + 'Content-Type': 'application/json', + }, + cache: 'no-store', + }); + + if (projectDetailsResponse.ok) { + const projectDetails = (await projectDetailsResponse.json()) as any; + + // Try to get URL from production aliases first + if (projectDetails.targets?.production?.alias && projectDetails.targets.production.alias.length > 0) { + // Find the clean URL (without -projects.vercel.app) + const cleanUrl = projectDetails.targets.production.alias.find( + (a: string) => a.endsWith('.vercel.app') && !a.includes('-projects.vercel.app'), + ); + + if (cleanUrl) { + setDeploymentUrl(`https://${cleanUrl}`); + return; + } else { + // If no clean URL found, use the first alias + setDeploymentUrl(`https://${projectDetails.targets.production.alias[0]}`); + return; + } + } + } + + // If no aliases or project details failed, try fetching deployments + const deploymentsResponse = await fetch( + `https://api.vercel.com/v6/deployments?projectId=${project.id}&limit=1`, + { + headers: { + Authorization: `Bearer ${connection.token}`, + 'Content-Type': 'application/json', + }, + cache: 'no-store', + }, + ); + + if (deploymentsResponse.ok) { + const deploymentsData = (await deploymentsResponse.json()) as any; + + if (deploymentsData.deployments && deploymentsData.deployments.length > 0) { + setDeploymentUrl(`https://${deploymentsData.deployments[0].url}`); + return; + } + } + } + + // Fallback to API call if not found in fetched projects + const fallbackResponse = await fetch(`/api/vercel-deploy?projectId=${projectId}&token=${connection.token}`, { + method: 'GET', + }); + + const data = await fallbackResponse.json(); + + if ((data as { deploy?: { url?: string } }).deploy?.url) { + setDeploymentUrl((data as { deploy: { url: string } }).deploy.url); + } else if ((data as { project?: { url?: string } }).project?.url) { + setDeploymentUrl((data as { project: { url: string } }).project.url); + } + } catch (err) { + console.error('Error fetching Vercel deployment:', err); + } finally { + setIsLoading(false); + } + } + + fetchProjectData(); + }, [connection.token, currentChatId]); + + if (!deploymentUrl) { + return null; + } + + return ( + + + + { + e.stopPropagation(); + }} + > +
+ + + + + {deploymentUrl} + + + + + + ); +} diff --git a/app/components/header/HeaderActionButtons.client.tsx b/app/components/header/HeaderActionButtons.client.tsx index d6273f57..56945c9e 100644 --- a/app/components/header/HeaderActionButtons.client.tsx +++ b/app/components/header/HeaderActionButtons.client.tsx @@ -3,26 +3,30 @@ import { toast } from 'react-toastify'; import useViewport from '~/lib/hooks'; import { chatStore } from '~/lib/stores/chat'; import { netlifyConnection } from '~/lib/stores/netlify'; +import { vercelConnection } from '~/lib/stores/vercel'; import { workbenchStore } from '~/lib/stores/workbench'; import { webcontainer } from '~/lib/webcontainer'; import { classNames } from '~/utils/classNames'; import { path } from '~/utils/path'; import { useEffect, useRef, useState } from 'react'; import type { ActionCallbackData } from '~/lib/runtime/message-parser'; -import { chatId } from '~/lib/persistence/useChatHistory'; // Add this import +import { chatId } from '~/lib/persistence/useChatHistory'; import { streamingState } from '~/lib/stores/streaming'; import { NetlifyDeploymentLink } from '~/components/chat/NetlifyDeploymentLink.client'; +import { VercelDeploymentLink } from '~/components/chat/VercelDeploymentLink.client'; interface HeaderActionButtonsProps {} export function HeaderActionButtons({}: HeaderActionButtonsProps) { const showWorkbench = useStore(workbenchStore.showWorkbench); const { showChat } = useStore(chatStore); - const connection = useStore(netlifyConnection); + const netlifyConn = useStore(netlifyConnection); + const vercelConn = useStore(vercelConnection); const [activePreviewIndex] = useState(0); const previews = useStore(workbenchStore.previews); const activePreview = previews[activePreviewIndex]; const [isDeploying, setIsDeploying] = useState(false); + const [deployingTo, setDeployingTo] = useState<'netlify' | 'vercel' | null>(null); const isSmallViewport = useViewport(1024); const canHideChat = showWorkbench || !showChat; const [isDropdownOpen, setIsDropdownOpen] = useState(false); @@ -42,8 +46,8 @@ export function HeaderActionButtons({}: HeaderActionButtonsProps) { const currentChatId = useStore(chatId); - const handleDeploy = async () => { - if (!connection.user || !connection.token) { + const handleNetlifyDeploy = async () => { + if (!netlifyConn.user || !netlifyConn.token) { toast.error('Please connect to Netlify first in the settings tab!'); return; } @@ -118,7 +122,7 @@ export function HeaderActionButtons({}: HeaderActionButtonsProps) { const existingSiteId = localStorage.getItem(`netlify-site-${currentChatId}`); // Deploy using the API route with file contents - const response = await fetch('/api/deploy', { + const response = await fetch('/api/netlify-deploy', { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -126,7 +130,7 @@ export function HeaderActionButtons({}: HeaderActionButtonsProps) { body: JSON.stringify({ siteId: existingSiteId || undefined, files: fileContents, - token: connection.token, + token: netlifyConn.token, chatId: currentChatId, // Use chatId instead of artifact.id }), }); @@ -149,7 +153,7 @@ export function HeaderActionButtons({}: HeaderActionButtonsProps) { `https://api.netlify.com/api/v1/sites/${data.site.id}/deploys/${data.deploy.id}`, { headers: { - Authorization: `Bearer ${connection.token}`, + Authorization: `Bearer ${netlifyConn.token}`, }, }, ); @@ -203,6 +207,125 @@ export function HeaderActionButtons({}: HeaderActionButtonsProps) { } }; + const handleVercelDeploy = async () => { + if (!vercelConn.user || !vercelConn.token) { + toast.error('Please connect to Vercel first in the settings tab!'); + return; + } + + if (!currentChatId) { + toast.error('No active chat found'); + return; + } + + try { + setIsDeploying(true); + setDeployingTo('vercel'); + + const artifact = workbenchStore.firstArtifact; + + if (!artifact) { + throw new Error('No active project found'); + } + + const actionId = 'build-' + Date.now(); + const actionData: ActionCallbackData = { + messageId: 'vercel build', + artifactId: artifact.id, + actionId, + action: { + type: 'build' as const, + content: 'npm run build', + }, + }; + + // Add the action first + artifact.runner.addAction(actionData); + + // Then run it + await artifact.runner.runAction(actionData); + + if (!artifact.runner.buildOutput) { + throw new Error('Build failed'); + } + + // Get the build files + const container = await webcontainer; + + // Remove /home/project from buildPath if it exists + const buildPath = artifact.runner.buildOutput.path.replace('/home/project', ''); + + // Get all files recursively + async function getAllFiles(dirPath: string): Promise> { + const files: Record = {}; + const entries = await container.fs.readdir(dirPath, { withFileTypes: true }); + + for (const entry of entries) { + const fullPath = path.join(dirPath, entry.name); + + if (entry.isFile()) { + const content = await container.fs.readFile(fullPath, 'utf-8'); + + // Remove /dist prefix from the path + const deployPath = fullPath.replace(buildPath, ''); + files[deployPath] = content; + } else if (entry.isDirectory()) { + const subFiles = await getAllFiles(fullPath); + Object.assign(files, subFiles); + } + } + + return files; + } + + const fileContents = await getAllFiles(buildPath); + + // Use chatId instead of artifact.id + const existingProjectId = localStorage.getItem(`vercel-project-${currentChatId}`); + + // Deploy using the API route with file contents + const response = await fetch('/api/vercel-deploy', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + projectId: existingProjectId || undefined, + files: fileContents, + token: vercelConn.token, + chatId: currentChatId, + }), + }); + + const data = (await response.json()) as any; + + if (!response.ok || !data.deploy || !data.project) { + console.error('Invalid deploy response:', data); + throw new Error(data.error || 'Invalid deployment response'); + } + + // Store the project ID if it's a new project + if (data.project) { + localStorage.setItem(`vercel-project-${currentChatId}`, data.project.id); + } + + toast.success( +
+ Deployed successfully to Vercel!{' '} + + View site + +
, + ); + } catch (error) { + console.error('Vercel deploy error:', error); + toast.error(error instanceof Error ? error.message : 'Vercel deployment failed'); + } finally { + setIsDeploying(false); + setDeployingTo(null); + } + }; + return (
@@ -213,7 +336,7 @@ export function HeaderActionButtons({}: HeaderActionButtonsProps) { onClick={() => setIsDropdownOpen(!isDropdownOpen)} className="px-4 hover:bg-bolt-elements-item-backgroundActive flex items-center gap-2" > - {isDeploying ? 'Deploying...' : 'Deploy'} + {isDeploying ? `Deploying to ${deployingTo}...` : 'Deploy'}
@@ -225,10 +348,10 @@ export function HeaderActionButtons({}: HeaderActionButtonsProps) { diff --git a/app/lib/stores/vercel.ts b/app/lib/stores/vercel.ts new file mode 100644 index 00000000..3258642c --- /dev/null +++ b/app/lib/stores/vercel.ts @@ -0,0 +1,94 @@ +import { atom } from 'nanostores'; +import type { VercelConnection } from '~/types/vercel'; +import { logStore } from './logs'; +import { toast } from 'react-toastify'; + +// Initialize with stored connection or defaults +const storedConnection = typeof window !== 'undefined' ? localStorage.getItem('vercel_connection') : null; +const initialConnection: VercelConnection = storedConnection + ? JSON.parse(storedConnection) + : { + user: null, + token: '', + stats: undefined, + }; + +export const vercelConnection = atom(initialConnection); +export const isConnecting = atom(false); +export const isFetchingStats = atom(false); + +export const updateVercelConnection = (updates: Partial) => { + const currentState = vercelConnection.get(); + const newState = { ...currentState, ...updates }; + vercelConnection.set(newState); + + // Persist to localStorage + if (typeof window !== 'undefined') { + localStorage.setItem('vercel_connection', JSON.stringify(newState)); + } +}; + +export async function fetchVercelStats(token: string) { + try { + isFetchingStats.set(true); + + const projectsResponse = await fetch('https://api.vercel.com/v9/projects', { + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'application/json', + }, + }); + + if (!projectsResponse.ok) { + throw new Error(`Failed to fetch projects: ${projectsResponse.status}`); + } + + const projectsData = (await projectsResponse.json()) as any; + const projects = projectsData.projects || []; + + // Fetch latest deployment for each project + const projectsWithDeployments = await Promise.all( + projects.map(async (project: any) => { + try { + const deploymentsResponse = await fetch( + `https://api.vercel.com/v6/deployments?projectId=${project.id}&limit=1`, + { + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'application/json', + }, + }, + ); + + if (deploymentsResponse.ok) { + const deploymentsData = (await deploymentsResponse.json()) as any; + return { + ...project, + latestDeployments: deploymentsData.deployments || [], + }; + } + + return project; + } catch (error) { + console.error(`Error fetching deployments for project ${project.id}:`, error); + return project; + } + }), + ); + + const currentState = vercelConnection.get(); + updateVercelConnection({ + ...currentState, + stats: { + projects: projectsWithDeployments, + totalProjects: projectsWithDeployments.length, + }, + }); + } catch (error) { + console.error('Vercel API Error:', error); + logStore.logError('Failed to fetch Vercel stats', { error }); + toast.error('Failed to fetch Vercel statistics'); + } finally { + isFetchingStats.set(false); + } +} diff --git a/app/routes/api.deploy.ts b/app/routes/api.netlify-deploy.ts similarity index 100% rename from app/routes/api.deploy.ts rename to app/routes/api.netlify-deploy.ts diff --git a/app/routes/api.vercel-deploy.ts b/app/routes/api.vercel-deploy.ts new file mode 100644 index 00000000..c9f6909d --- /dev/null +++ b/app/routes/api.vercel-deploy.ts @@ -0,0 +1,248 @@ +import { type ActionFunctionArgs, type LoaderFunctionArgs, json } from '@remix-run/cloudflare'; +import type { VercelProjectInfo } from '~/types/vercel'; + +// Add loader function to handle GET requests +export async function loader({ request }: LoaderFunctionArgs) { + const url = new URL(request.url); + const projectId = url.searchParams.get('projectId'); + const token = url.searchParams.get('token'); + + if (!projectId || !token) { + return json({ error: 'Missing projectId or token' }, { status: 400 }); + } + + try { + // Get project info + const projectResponse = await fetch(`https://api.vercel.com/v9/projects/${projectId}`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + + if (!projectResponse.ok) { + return json({ error: 'Failed to fetch project' }, { status: 400 }); + } + + const projectData = (await projectResponse.json()) as any; + + // Get latest deployment + const deploymentsResponse = await fetch(`https://api.vercel.com/v6/deployments?projectId=${projectId}&limit=1`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + + if (!deploymentsResponse.ok) { + return json({ error: 'Failed to fetch deployments' }, { status: 400 }); + } + + const deploymentsData = (await deploymentsResponse.json()) as any; + + const latestDeployment = deploymentsData.deployments?.[0]; + + return json({ + project: { + id: projectData.id, + name: projectData.name, + url: `https://${projectData.name}.vercel.app`, + }, + deploy: latestDeployment + ? { + id: latestDeployment.id, + state: latestDeployment.state, + url: latestDeployment.url ? `https://${latestDeployment.url}` : `https://${projectData.name}.vercel.app`, + } + : null, + }); + } catch (error) { + console.error('Error fetching Vercel deployment:', error); + return json({ error: 'Failed to fetch deployment' }, { status: 500 }); + } +} + +interface DeployRequestBody { + projectId?: string; + files: Record; + chatId: string; +} + +// Existing action function for POST requests +export async function action({ request }: ActionFunctionArgs) { + try { + const { projectId, files, token, chatId } = (await request.json()) as DeployRequestBody & { token: string }; + + if (!token) { + return json({ error: 'Not connected to Vercel' }, { status: 401 }); + } + + let targetProjectId = projectId; + let projectInfo: VercelProjectInfo | undefined; + + // If no projectId provided, create a new project + if (!targetProjectId) { + const projectName = `bolt-diy-${chatId}-${Date.now()}`; + const createProjectResponse = await fetch('https://api.vercel.com/v9/projects', { + method: 'POST', + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + name: projectName, + framework: null, + }), + }); + + if (!createProjectResponse.ok) { + const errorData = (await createProjectResponse.json()) as any; + return json( + { error: `Failed to create project: ${errorData.error?.message || 'Unknown error'}` }, + { status: 400 }, + ); + } + + const newProject = (await createProjectResponse.json()) as any; + targetProjectId = newProject.id; + projectInfo = { + id: newProject.id, + name: newProject.name, + url: `https://${newProject.name}.vercel.app`, + chatId, + }; + } else { + // Get existing project info + const projectResponse = await fetch(`https://api.vercel.com/v9/projects/${targetProjectId}`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + + if (projectResponse.ok) { + const existingProject = (await projectResponse.json()) as any; + projectInfo = { + id: existingProject.id, + name: existingProject.name, + url: `https://${existingProject.name}.vercel.app`, + chatId, + }; + } else { + // If project doesn't exist, create a new one + const projectName = `bolt-diy-${chatId}-${Date.now()}`; + const createProjectResponse = await fetch('https://api.vercel.com/v9/projects', { + method: 'POST', + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + name: projectName, + framework: null, + }), + }); + + if (!createProjectResponse.ok) { + const errorData = (await createProjectResponse.json()) as any; + return json( + { error: `Failed to create project: ${errorData.error?.message || 'Unknown error'}` }, + { status: 400 }, + ); + } + + const newProject = (await createProjectResponse.json()) as any; + targetProjectId = newProject.id; + projectInfo = { + id: newProject.id, + name: newProject.name, + url: `https://${newProject.name}.vercel.app`, + chatId, + }; + } + } + + // Prepare files for deployment + const deploymentFiles = []; + + for (const [filePath, content] of Object.entries(files)) { + // Ensure file path doesn't start with a slash for Vercel + const normalizedPath = filePath.startsWith('/') ? filePath.substring(1) : filePath; + deploymentFiles.push({ + file: normalizedPath, + data: content, + }); + } + + // Create a new deployment + const deployResponse = await fetch(`https://api.vercel.com/v13/deployments`, { + method: 'POST', + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + name: projectInfo.name, + project: targetProjectId, + target: 'production', + files: deploymentFiles, + routes: [{ src: '/(.*)', dest: '/$1' }], + }), + }); + + if (!deployResponse.ok) { + const errorData = (await deployResponse.json()) as any; + return json( + { error: `Failed to create deployment: ${errorData.error?.message || 'Unknown error'}` }, + { status: 400 }, + ); + } + + const deployData = (await deployResponse.json()) as any; + + // Poll for deployment status + let retryCount = 0; + const maxRetries = 60; + let deploymentUrl = ''; + let deploymentState = ''; + + while (retryCount < maxRetries) { + const statusResponse = await fetch(`https://api.vercel.com/v13/deployments/${deployData.id}`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + + if (statusResponse.ok) { + const status = (await statusResponse.json()) as any; + deploymentState = status.readyState; + deploymentUrl = status.url ? `https://${status.url}` : ''; + + if (status.readyState === 'READY' || status.readyState === 'ERROR') { + break; + } + } + + retryCount++; + await new Promise((resolve) => setTimeout(resolve, 2000)); + } + + if (deploymentState === 'ERROR') { + return json({ error: 'Deployment failed' }, { status: 500 }); + } + + if (retryCount >= maxRetries) { + return json({ error: 'Deployment timed out' }, { status: 500 }); + } + + return json({ + success: true, + deploy: { + id: deployData.id, + state: deploymentState, + url: deploymentUrl || projectInfo.url, + }, + project: projectInfo, + }); + } catch (error) { + console.error('Vercel deploy error:', error); + return json({ error: 'Deployment failed' }, { status: 500 }); + } +} diff --git a/app/types/vercel.ts b/app/types/vercel.ts new file mode 100644 index 00000000..5a7d8db8 --- /dev/null +++ b/app/types/vercel.ts @@ -0,0 +1,40 @@ +export interface VercelUser { + user: any; + id: string; + username: string; + email: string; + name: string; + avatar?: string; +} + +export interface VercelProject { + createdAt: string | number | Date; + targets: any; + id: string; + name: string; + framework?: string; + latestDeployments?: Array<{ + id: string; + url: string; + created: number; + state: string; + }>; +} + +export interface VercelStats { + projects: VercelProject[]; + totalProjects: number; +} + +export interface VercelConnection { + user: VercelUser | null; + token: string; + stats?: VercelStats; +} + +export interface VercelProjectInfo { + id: string; + name: string; + url: string; + chatId: string; +} From 95dcd0261a6c3cfcb3d9c84f1a632918a5168737 Mon Sep 17 00:00:00 2001 From: KevIsDev Date: Thu, 27 Mar 2025 16:24:12 +0000 Subject: [PATCH 039/115] refactor: consolidate imports in supabase API routes change over to cloudflare. --- app/routes/api.supabase.ts | 3 +-- app/routes/api.supabase.variables.ts | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/app/routes/api.supabase.ts b/app/routes/api.supabase.ts index f21da60f..804d3b7a 100644 --- a/app/routes/api.supabase.ts +++ b/app/routes/api.supabase.ts @@ -1,5 +1,4 @@ -import { json } from '@remix-run/node'; -import type { ActionFunction } from '@remix-run/node'; +import { json, type ActionFunction } from '@remix-run/cloudflare'; import type { SupabaseProject } from '~/types/supabase'; export const action: ActionFunction = async ({ request }) => { diff --git a/app/routes/api.supabase.variables.ts b/app/routes/api.supabase.variables.ts index fd2d028f..55e796cf 100644 --- a/app/routes/api.supabase.variables.ts +++ b/app/routes/api.supabase.variables.ts @@ -1,5 +1,4 @@ -import { json } from '@remix-run/node'; -import type { ActionFunctionArgs } from '@remix-run/node'; +import { json, type ActionFunctionArgs } from '@remix-run/node'; export async function action({ request }: ActionFunctionArgs) { try { From 4b0eaf25ce17ca6d28c01ac1380d672c83024514 Mon Sep 17 00:00:00 2001 From: KevIsDev Date: Thu, 27 Mar 2025 18:52:13 +0000 Subject: [PATCH 040/115] add: add env masking extension for .env files Introduce a new extension for CodeMirror that masks sensitive values in .env files. This ensures that sensitive information like API keys or passwords is not displayed in plain text within the editor. The extension dynamically applies masking to values in lines matching the KEY=VALUE format, improving security during development. --- .../editor/codemirror/CodeMirrorEditor.tsx | 6 ++ .../editor/codemirror/EnvMasking.ts | 80 +++++++++++++++++++ app/routes/api.supabase.variables.ts | 2 +- 3 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 app/components/editor/codemirror/EnvMasking.ts diff --git a/app/components/editor/codemirror/CodeMirrorEditor.tsx b/app/components/editor/codemirror/CodeMirrorEditor.tsx index 8e9f3a3f..e222eabb 100644 --- a/app/components/editor/codemirror/CodeMirrorEditor.tsx +++ b/app/components/editor/codemirror/CodeMirrorEditor.tsx @@ -25,6 +25,7 @@ import { BinaryContent } from './BinaryContent'; import { getTheme, reconfigureTheme } from './cm-theme'; import { indentKeyBinding } from './indent'; import { getLanguage } from './languages'; +import { createEnvMaskingExtension } from './EnvMasking'; const logger = createScopedLogger('CodeMirrorEditor'); @@ -134,6 +135,9 @@ export const CodeMirrorEditor = memo( const [languageCompartment] = useState(new Compartment()); + // Add a compartment for the env masking extension + const [envMaskingCompartment] = useState(new Compartment()); + const containerRef = useRef(null); const viewRef = useRef(); const themeRef = useRef(); @@ -214,6 +218,7 @@ export const CodeMirrorEditor = memo( if (!doc) { const state = newEditorState('', theme, settings, onScrollRef, debounceScroll, onSaveRef, [ languageCompartment.of([]), + envMaskingCompartment.of([]), ]); view.setState(state); @@ -236,6 +241,7 @@ export const CodeMirrorEditor = memo( if (!state) { state = newEditorState(doc.value, theme, settings, onScrollRef, debounceScroll, onSaveRef, [ languageCompartment.of([]), + envMaskingCompartment.of([createEnvMaskingExtension(() => docRef.current?.filePath)]), ]); editorStates.set(doc.filePath, state); diff --git a/app/components/editor/codemirror/EnvMasking.ts b/app/components/editor/codemirror/EnvMasking.ts new file mode 100644 index 00000000..5c9077d4 --- /dev/null +++ b/app/components/editor/codemirror/EnvMasking.ts @@ -0,0 +1,80 @@ +import { EditorView, Decoration, type DecorationSet, ViewPlugin, WidgetType } from '@codemirror/view'; + +// Create a proper WidgetType class for the masked text +class MaskedTextWidget extends WidgetType { + constructor(private readonly _value: string) { + super(); + } + + eq(other: MaskedTextWidget) { + return other._value === this._value; + } + + toDOM() { + const span = document.createElement('span'); + span.textContent = '*'.repeat(this._value.length); + span.className = 'cm-masked-text'; + + return span; + } + + ignoreEvent() { + return false; + } +} + +export function createEnvMaskingExtension(getFilePath: () => string | undefined) { + return ViewPlugin.fromClass( + class { + decorations: DecorationSet; + + constructor(view: EditorView) { + this.decorations = this.buildDecorations(view); + } + + update(update: { docChanged: boolean; view: EditorView; viewportChanged: boolean }) { + if (update.docChanged || update.viewportChanged) { + this.decorations = this.buildDecorations(update.view); + } + } + + buildDecorations(view: EditorView) { + const filePath = getFilePath(); + const isEnvFile = filePath?.endsWith('.env') || filePath?.includes('.env.') || filePath?.includes('/.env'); + + if (!isEnvFile) { + return Decoration.none; + } + + const decorations: any[] = []; + const doc = view.state.doc; + + for (let i = 1; i <= doc.lines; i++) { + const line = doc.line(i); + const text = line.text; + + // Match lines with KEY=VALUE format + const match = text.match(/^([^=]+)=(.+)$/); + + if (match && !text.trim().startsWith('#')) { + const [, key, value] = match; + const valueStart = line.from + key.length + 1; + + // Create a decoration that replaces the value with asterisks + decorations.push( + Decoration.replace({ + inclusive: true, + widget: new MaskedTextWidget(value), + }).range(valueStart, line.to), + ); + } + } + + return Decoration.set(decorations); + } + }, + { + decorations: (v) => v.decorations, + }, + ); +} diff --git a/app/routes/api.supabase.variables.ts b/app/routes/api.supabase.variables.ts index 55e796cf..45eccb23 100644 --- a/app/routes/api.supabase.variables.ts +++ b/app/routes/api.supabase.variables.ts @@ -1,4 +1,4 @@ -import { json, type ActionFunctionArgs } from '@remix-run/node'; +import { json, type ActionFunctionArgs } from '@remix-run/cloudflare'; export async function action({ request }: ActionFunctionArgs) { try { From 47444970e8856441b4f6913c072626343ef7787a Mon Sep 17 00:00:00 2001 From: Stijnus <72551117+Stijnus@users.noreply.github.com> Date: Sat, 29 Mar 2025 10:26:42 +0100 Subject: [PATCH 041/115] feat: bugfix for : Problem Temporarily Solved, Not Fix: Error building my application #1414 (#1567) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * V1 ## [Unreleased] - 2025-03-28 ### βœ… Fixed - Fixed deployment errors on Cloudflare Pages caused by: - Missing or outdated `compatibility_date` and `compatibility_flags` in `wrangler.toml` - Use of Node.js built-ins (`crypto`, `stream`) in functions without proper polyfilling - Invalid Wrangler CLI options (`--log-level`) used during deployment - Type error when importing the Remix server build ### πŸ›  Changed - `wrangler.toml` updated: ```toml name = "bolt" compatibility_date = "2025-03-28" compatibility_flags = ["nodejs_compat"] pages_build_output_dir = "./build/client" send_metrics = false ``` - `functions/[[path]].ts` updated: ```ts import type { ServerBuild } from '@remix-run/cloudflare'; import { createPagesFunctionHandler } from '@remix-run/cloudflare-pages'; import * as serverBuild from '../build/server'; export const onRequest = createPagesFunctionHandler({ build: serverBuild as unknown as ServerBuild, }); ``` ### πŸš€ Deployment - Successful deployment to: - Preview: https://979e2ca9.bolt-55b.pages.dev - Production: https://main.bolt-55b.pages.dev * V1 ## [Unreleased] - 2025-03-28 ### βœ… Fixed - Fixed deployment errors on Cloudflare Pages caused by: - Missing or outdated `compatibility_date` and `compatibility_flags` in `wrangler.toml` - Use of Node.js built-ins (`crypto`, `stream`) in functions without proper polyfilling - Invalid Wrangler CLI options (`--log-level`) used during deployment - Type error when importing the Remix server build ### πŸ›  Changed - `wrangler.toml` updated: ```toml name = "bolt" compatibility_date = "2025-03-28" compatibility_flags = ["nodejs_compat"] pages_build_output_dir = "./build/client" send_metrics = false ``` - `functions/[[path]].ts` updated: ```ts import type { ServerBuild } from '@remix-run/cloudflare'; import { createPagesFunctionHandler } from '@remix-run/cloudflare-pages'; import * as serverBuild from '../build/server'; export const onRequest = createPagesFunctionHandler({ build: serverBuild as unknown as ServerBuild, }); ``` ### πŸš€ Deployment - Successful deployment to: - Preview: https://979e2ca9.bolt-55b.pages.dev - Production: https://main.bolt-55b.pages.dev * feat: small bugfix --- .gitignore | 8 + functions/[[path]].ts | 13 +- package.json | 6 +- pnpm-lock.yaml | 822 ++++++++++++++++++++++++++++++++---------- vite.config.ts | 10 +- wrangler.toml | 4 +- 6 files changed, 659 insertions(+), 204 deletions(-) diff --git a/.gitignore b/.gitignore index e74023ef..17fd39e5 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,11 @@ changelogUI.md docs/instructions/Roadmap.md .cursorrules *.md +<<<<<<< Updated upstream +======= +.qodo +exponent.txt +<<<<<<< Updated upstream +>>>>>>> Stashed changes +======= +>>>>>>> Stashed changes diff --git a/functions/[[path]].ts b/functions/[[path]].ts index 4f196604..c4d09d37 100644 --- a/functions/[[path]].ts +++ b/functions/[[path]].ts @@ -1,9 +1,12 @@ import type { ServerBuild } from '@remix-run/cloudflare'; import { createPagesFunctionHandler } from '@remix-run/cloudflare-pages'; -// @ts-ignore because the server build file is generated by `remix vite:build` -import * as serverBuild from '../build/server'; +export const onRequest: PagesFunction = async (context) => { + const serverBuild = (await import('../build/server')) as unknown as ServerBuild; -export const onRequest = createPagesFunctionHandler({ - build: serverBuild as unknown as ServerBuild, -}); + const handler = createPagesFunctionHandler({ + build: serverBuild, + }); + + return handler(context); +}; diff --git a/package.json b/package.json index e3a15c5c..39f095a6 100644 --- a/package.json +++ b/package.json @@ -170,11 +170,12 @@ "@types/path-browserify": "^1.0.3", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", + "@vitejs/plugin-react": "^4.3.4", "concurrently": "^8.2.2", "cross-env": "^7.0.3", + "crypto-browserify": "^3.12.1", "electron": "^33.2.0", "electron-builder": "^25.1.8", - "@vitejs/plugin-react": "^4.3.4", "fast-glob": "^3.3.2", "husky": "9.1.7", "is-ci": "^3.0.1", @@ -184,6 +185,7 @@ "prettier": "^3.4.1", "rimraf": "^4.4.1", "sass-embedded": "^1.81.0", + "stream-browserify": "^3.0.0", "typescript": "^5.7.2", "unified": "^11.0.5", "unocss": "^0.61.9", @@ -192,7 +194,7 @@ "vite-plugin-optimize-css-modules": "^1.1.0", "vite-tsconfig-paths": "^4.3.2", "vitest": "^2.1.7", - "wrangler": "^3.91.0" + "wrangler": "^4.5.1" }, "resolutions": { "@typescript-eslint/utils": "^8.0.0-alpha.30" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 04f2ce93..0add4ff5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -338,7 +338,7 @@ importers: version: 2.0.0 '@remix-run/dev': specifier: ^2.15.2 - version: 2.16.0(@remix-run/react@2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2))(@remix-run/serve@2.16.0(typescript@5.7.2))(@types/node@22.10.1)(sass-embedded@1.81.0)(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0))(wrangler@3.91.0(@cloudflare/workers-types@4.20241127.0)) + version: 2.16.0(@remix-run/react@2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2))(@remix-run/serve@2.16.0(typescript@5.7.2))(@types/node@22.10.1)(sass-embedded@1.81.0)(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0))(wrangler@4.5.1(@cloudflare/workers-types@4.20241127.0)) '@remix-run/serve': specifier: ^2.15.2 version: 2.16.0(typescript@5.7.2) @@ -381,6 +381,9 @@ importers: cross-env: specifier: ^7.0.3 version: 7.0.3 + crypto-browserify: + specifier: ^3.12.1 + version: 3.12.1 electron: specifier: ^33.2.0 version: 33.3.2 @@ -414,6 +417,9 @@ importers: sass-embedded: specifier: ^1.81.0 version: 1.81.0 + stream-browserify: + specifier: ^3.0.0 + version: 3.0.0 typescript: specifier: ^5.7.2 version: 5.7.2 @@ -439,8 +445,8 @@ importers: specifier: ^2.1.7 version: 2.1.8(@types/node@22.10.1)(jsdom@26.0.0)(sass-embedded@1.81.0) wrangler: - specifier: ^3.91.0 - version: 3.91.0(@cloudflare/workers-types@4.20241127.0) + specifier: ^4.5.1 + version: 4.5.1(@cloudflare/workers-types@4.20241127.0) packages: @@ -892,44 +898,49 @@ packages: '@cloudflare/kv-asset-handler@0.1.3': resolution: {integrity: sha512-FNcunDuTmEfQTLRLtA6zz+buIXUHj1soPvSWzzQFBC+n2lsy+CGf/NIrR3SEPCmsVNQj70/Jx2lViCpq+09YpQ==} - '@cloudflare/kv-asset-handler@0.3.4': - resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==} - engines: {node: '>=16.13'} + '@cloudflare/kv-asset-handler@0.4.0': + resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} + engines: {node: '>=18.0.0'} - '@cloudflare/workerd-darwin-64@1.20241106.1': - resolution: {integrity: sha512-zxvaToi1m0qzAScrxFt7UvFVqU8DxrCO2CinM1yQkv5no7pA1HolpIrwZ0xOhR3ny64Is2s/J6BrRjpO5dM9Zw==} + '@cloudflare/unenv-preset@2.3.1': + resolution: {integrity: sha512-Xq57Qd+ADpt6hibcVBO0uLG9zzRgyRhfCUgBT9s+g3+3Ivg5zDyVgLFy40ES1VdNcu8rPNSivm9A+kGP5IVaPg==} + peerDependencies: + unenv: 2.0.0-rc.15 + workerd: ^1.20250320.0 + peerDependenciesMeta: + workerd: + optional: true + + '@cloudflare/workerd-darwin-64@1.20250321.0': + resolution: {integrity: sha512-y273GfLaNCxkL8hTfo0c8FZKkOPdq+CPZAKJXPWB+YpS1JCOULu6lNTptpD7ZtF14dTYPkn5Weug31TTlviJmw==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20241106.1': - resolution: {integrity: sha512-j3dg/42D/bPgfNP3cRUBxF+4waCKO/5YKwXNj+lnVOwHxDu+ne5pFw9TIkKYcWTcwn0ZUkbNZNM5rhJqRn4xbg==} + '@cloudflare/workerd-darwin-arm64@1.20250321.0': + resolution: {integrity: sha512-qvf7/gkkQq7fAsoMlntJSimN/WfwQqxi2oL0aWZMGodTvs/yRHO2I4oE0eOihVdK1BXyBHJXNxEvNDBjF0+Yuw==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@cloudflare/workerd-linux-64@1.20241106.1': - resolution: {integrity: sha512-Ih+Ye8E1DMBXcKrJktGfGztFqHKaX1CeByqshmTbODnWKHt6O65ax3oTecUwyC0+abuyraOpAtdhHNpFMhUkmw==} + '@cloudflare/workerd-linux-64@1.20250321.0': + resolution: {integrity: sha512-AEp3xjWFrNPO/h0StCOgOb0bWCcNThnkESpy91Wf4mfUF2p7tOCdp37Nk/1QIRqSxnfv4Hgxyi7gcWud9cJuMw==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20241106.1': - resolution: {integrity: sha512-mdQFPk4+14Yywn7n1xIzI+6olWM8Ybz10R7H3h+rk0XulMumCWUCy1CzIDauOx6GyIcSgKIibYMssVHZR30ObA==} + '@cloudflare/workerd-linux-arm64@1.20250321.0': + resolution: {integrity: sha512-wRWyMIoPIS1UBXCisW0FYTgGsfZD4AVS0hXA5nuLc0c21CvzZpmmTjqEWMcwPFenwy/MNL61NautVOC4qJqQ3Q==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@cloudflare/workerd-windows-64@1.20241106.1': - resolution: {integrity: sha512-4rtcss31E/Rb/PeFocZfr+B9i1MdrkhsTBWizh8siNR4KMmkslU2xs2wPaH1z8+ErxkOsHrKRa5EPLh5rIiFeg==} + '@cloudflare/workerd-windows-64@1.20250321.0': + resolution: {integrity: sha512-8vYP3QYO0zo2faUDfWl88jjfUvz7Si9GS3mUYaTh/TR9LcAUtsO7muLxPamqEyoxNFtbQgy08R4rTid94KRi3w==} engines: {node: '>=16'} cpu: [x64] os: [win32] - '@cloudflare/workers-shared@0.9.0': - resolution: {integrity: sha512-eP6Ir45uPbKnpADVzUCtkRUYxYxjB1Ew6n/whTJvHu8H4m93USHAceCMm736VBZdlxuhXXUjEP3fCUxKPn+cfw==} - engines: {node: '>=16.7.0'} - '@cloudflare/workers-types@4.20241127.0': resolution: {integrity: sha512-UqlvtqV8eI0CdPR7nxlbVlE52+lcjHvGdbYXEPwisy23+39RsFV7OOy0da0moJAhqnL2OhDmWTOaKdsVcPHiJQ==} @@ -1052,19 +1063,12 @@ packages: resolution: {integrity: sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA==} engines: {node: '>=16.4'} + '@emnapi/runtime@1.3.1': + resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + '@emotion/hash@0.9.2': resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} - '@esbuild-plugins/node-globals-polyfill@0.2.3': - resolution: {integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==} - peerDependencies: - esbuild: '*' - - '@esbuild-plugins/node-modules-polyfill@0.2.2': - resolution: {integrity: sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==} - peerDependencies: - esbuild: '*' - '@esbuild/aix-ppc64@0.21.5': resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} @@ -1077,6 +1081,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.24.2': + resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.17.19': resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} engines: {node: '>=12'} @@ -1101,6 +1111,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.24.2': + resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.17.19': resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} engines: {node: '>=12'} @@ -1125,6 +1141,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.24.2': + resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.17.19': resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} engines: {node: '>=12'} @@ -1149,6 +1171,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.24.2': + resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.17.19': resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} engines: {node: '>=12'} @@ -1173,6 +1201,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.24.2': + resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.17.19': resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} engines: {node: '>=12'} @@ -1197,6 +1231,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.24.2': + resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.17.19': resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} engines: {node: '>=12'} @@ -1221,6 +1261,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.24.2': + resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.17.19': resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} engines: {node: '>=12'} @@ -1245,6 +1291,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.24.2': + resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.17.19': resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} engines: {node: '>=12'} @@ -1269,6 +1321,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.24.2': + resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.17.19': resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} engines: {node: '>=12'} @@ -1293,6 +1351,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.24.2': + resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.17.19': resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} engines: {node: '>=12'} @@ -1317,6 +1381,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.24.2': + resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.17.19': resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} engines: {node: '>=12'} @@ -1341,6 +1411,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.24.2': + resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.17.19': resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} engines: {node: '>=12'} @@ -1365,6 +1441,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.24.2': + resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.17.19': resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} engines: {node: '>=12'} @@ -1389,6 +1471,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.24.2': + resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.17.19': resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} engines: {node: '>=12'} @@ -1413,6 +1501,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.24.2': + resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.17.19': resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} engines: {node: '>=12'} @@ -1437,6 +1531,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.24.2': + resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.17.19': resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} engines: {node: '>=12'} @@ -1461,6 +1561,18 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.24.2': + resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.24.2': + resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-x64@0.17.19': resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} engines: {node: '>=12'} @@ -1485,12 +1597,24 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.24.2': + resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-arm64@0.23.1': resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.24.2': + resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.17.19': resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} engines: {node: '>=12'} @@ -1515,6 +1639,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.24.2': + resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/sunos-x64@0.17.19': resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} engines: {node: '>=12'} @@ -1539,6 +1669,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.24.2': + resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.17.19': resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} engines: {node: '>=12'} @@ -1563,6 +1699,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.24.2': + resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.17.19': resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} engines: {node: '>=12'} @@ -1587,6 +1729,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.24.2': + resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.17.19': resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} engines: {node: '>=12'} @@ -1611,6 +1759,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.24.2': + resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.4.1': resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1712,6 +1866,111 @@ packages: '@iconify/utils@2.1.33': resolution: {integrity: sha512-jP9h6v/g0BIZx0p7XGJJVtkVnydtbgTgt9mVNcGDYwaa7UhdHdI9dvoq+gKj9sijMSJKxUPEG2JyjsgXjxL7Kw==} + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.33.5': + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.0.4': + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.0.4': + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.33.5': + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-s390x@0.33.5': + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.33.5': + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.33.5': + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.33.5': + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.33.5': + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-ia32@0.33.5': + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.33.5': + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -3115,9 +3374,6 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node-forge@1.3.11': - resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} - '@types/node@20.17.16': resolution: {integrity: sha512-vOTpLduLkZXePLxHiHsBLp98mHGnl8RptV4YAO3HfKO5UHjDvySGbxKtpYfy8Sx5+WKcgc45qNreJJRVM3L6mw==} @@ -3416,8 +3672,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} engines: {node: '>=0.4.0'} acorn@8.14.0: @@ -3776,9 +4032,6 @@ packages: resolution: {integrity: sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==} engines: {node: '>=10.0.0'} - capnp-ts@0.7.0: - resolution: {integrity: sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==} - ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -3822,10 +4075,6 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} - chokidar@4.0.1: - resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} - engines: {node: '>= 14.16.0'} - chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} @@ -3891,10 +4140,17 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + color-support@1.1.3: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} hasBin: true + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} @@ -3981,6 +4237,10 @@ packages: resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} engines: {node: '>=6.6.0'} + cookie@0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + cookie@0.6.0: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} @@ -3989,10 +4249,6 @@ packages: resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} engines: {node: '>= 0.6'} - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - core-js@3.41.0: resolution: {integrity: sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==} @@ -4093,9 +4349,6 @@ packages: date-fns@3.6.0: resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} - date-fns@4.1.0: - resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} - debounce-fn@6.0.0: resolution: {integrity: sha512-rBMW+F2TXryBwB54Q0d8drNEI+TfoS9JpNTAoVpukbWEhjXQq4rySFYLaqXMFXwdv61Zb2OHtj5bviSoimqxRQ==} engines: {node: '>=18'} @@ -4399,6 +4652,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.24.2: + resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -4583,6 +4841,9 @@ packages: resolution: {integrity: sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==} engines: {node: '>= 0.10.0'} + exsolve@1.0.4: + resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==} + extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -5081,6 +5342,9 @@ packages: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -5202,9 +5466,6 @@ packages: resolution: {integrity: sha512-5mbUj3SiZXCuRf9fT3ibzbSSEWiy63gFfksmGfdOzujPjW3k+z8WvIBxcJHBoQNlaZaiyB25deviif2+osLmLw==} engines: {node: '>=4'} - itty-time@1.0.6: - resolution: {integrity: sha512-+P8IZaLLBtFv8hCkIjcymZOp4UJ+xW6bSlQsXGqrkmJh7vSiMFSlNne0mCYagEE0N7HDNR5jJBRxwN0oYv61Rw==} - jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} @@ -5776,9 +6037,9 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - miniflare@3.20241106.1: - resolution: {integrity: sha512-dM3RBlJE8rUFxnqlPCaFCq0E7qQqEQvKbYX7W/APGCK+rLcyLmEBzC4GQR/niXdNM/oV6gdg9AA50ghnn2ALuw==} - engines: {node: '>=16.13'} + miniflare@4.20250321.1: + resolution: {integrity: sha512-pQuVtF6vQ1zMvPCo3Z19mzSFjgnlEnybzNzAJZipsqIk6kMXpYBZq+d8cWmeQFkBYlgeZKeKJ4EBKT6KapfTNg==} + engines: {node: '>=18.0.0'} hasBin: true minimalistic-assert@1.0.1: @@ -5938,10 +6199,6 @@ packages: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} - engines: {node: '>= 6.13.0'} - node-gyp@9.4.1: resolution: {integrity: sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==} engines: {node: ^12.13 || ^14.13 || >=16} @@ -6022,8 +6279,8 @@ packages: ofetch@1.4.1: resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} - ohash@1.1.4: - resolution: {integrity: sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==} + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} ollama-ai-provider@0.15.2: resolution: {integrity: sha512-bMDUlYmohulD87Xrv6meuftQdmFTygtrQywy6/gqdf1bTsJFP1VCx3MrisLFBzb4mMOj02NER7yZhiGIlAx30w==} @@ -6154,6 +6411,9 @@ packages: pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + pathval@2.0.0: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} @@ -6585,10 +6845,6 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} - readdirp@4.0.2: - resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} - engines: {node: '>= 14.16.0'} - redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} @@ -6933,10 +7189,6 @@ packages: secure-json-parse@2.7.0: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} - selfsigned@2.4.1: - resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} - engines: {node: '>=10'} - semver-compare@1.0.0: resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} @@ -6981,6 +7233,10 @@ packages: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} hasBin: true + sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -7016,6 +7272,9 @@ packages: simple-get@4.0.1: resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + simple-update-notifier@2.0.0: resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} engines: {node: '>=10'} @@ -7421,16 +7680,16 @@ packages: undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} - undici@5.28.4: - resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} + undici@5.29.0: + resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} engines: {node: '>=14.0'} undici@6.21.0: resolution: {integrity: sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==} engines: {node: '>=18.17'} - unenv-nightly@2.0.0-20241121-161142-806b5c0: - resolution: {integrity: sha512-RnFOasE/O0Q55gBkNB1b84OgKttgLEijGO0JCWpbn+O4XxpyCQg89NmcqQ5RGUiy4y+rMIrKzePTquQcLQF5pQ==} + unenv@2.0.0-rc.15: + resolution: {integrity: sha512-J/rEIZU8w6FOfLNz/hNKsnY+fFHWnu9MH4yRbSZF3xbbGHovcetXPs7sD+9p8L6CeNC//I9bhRYAOsBt2u7/OA==} unified@10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} @@ -7814,17 +8073,17 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - workerd@1.20241106.1: - resolution: {integrity: sha512-1GdKl0kDw8rrirr/ThcK66Kbl4/jd4h8uHx5g7YHBrnenY5SX1UPuop2cnCzYUxlg55kPjzIqqYslz1muRFgFw==} + workerd@1.20250321.0: + resolution: {integrity: sha512-vyuz9pdJ+7o1lC79vQ2UVRLXPARa2Lq94PbTfqEcYQeSxeR9X+YqhNq2yysv8Zs5vpokmexLCtMniPp9u+2LVQ==} engines: {node: '>=16'} hasBin: true - wrangler@3.91.0: - resolution: {integrity: sha512-Hdzn6wbY9cz5kL85ZUvWLwLIH7nPaEVRblfms40jhRf4qQO/Zf74aFlku8rQFbe8/2aVZFaxJVfBd6JQMeMSBQ==} - engines: {node: '>=16.17.0'} + wrangler@4.5.1: + resolution: {integrity: sha512-7ct52LPiKnjqtC6SteKr0aherOS6CmvEurGXxGoDjgIOuoAPjN7jjYAw3eEIReGPlcQXmhpPLuunVFkWNhCoZA==} + engines: {node: '>=18.0.0'} hasBin: true peerDependencies: - '@cloudflare/workers-types': ^4.20241106.0 + '@cloudflare/workers-types': ^4.20250321.0 peerDependenciesMeta: '@cloudflare/workers-types': optional: true @@ -7879,9 +8138,6 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} - xxhash-wasm@1.1.0: - resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} - y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -7912,8 +8168,8 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - youch@3.3.4: - resolution: {integrity: sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==} + youch@3.2.3: + resolution: {integrity: sha512-ZBcWz/uzZaQVdCvfV4uk616Bbpf2ee+F/AvuKDR5EwX/Y4v06xWdtMluqTD7+KlZdM93lLm9gMZYo0sKBS0pgw==} zip-stream@4.1.1: resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==} @@ -7924,6 +8180,9 @@ packages: peerDependencies: zod: ^3.24.1 + zod@3.22.3: + resolution: {integrity: sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==} + zod@3.24.1: resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} @@ -8762,29 +9021,30 @@ snapshots: dependencies: mime: 2.6.0 - '@cloudflare/kv-asset-handler@0.3.4': + '@cloudflare/kv-asset-handler@0.4.0': dependencies: mime: 3.0.0 - '@cloudflare/workerd-darwin-64@1.20241106.1': - optional: true - - '@cloudflare/workerd-darwin-arm64@1.20241106.1': - optional: true - - '@cloudflare/workerd-linux-64@1.20241106.1': - optional: true - - '@cloudflare/workerd-linux-arm64@1.20241106.1': - optional: true - - '@cloudflare/workerd-windows-64@1.20241106.1': - optional: true - - '@cloudflare/workers-shared@0.9.0': + '@cloudflare/unenv-preset@2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250321.0)': dependencies: - mime: 3.0.0 - zod: 3.24.1 + unenv: 2.0.0-rc.15 + optionalDependencies: + workerd: 1.20250321.0 + + '@cloudflare/workerd-darwin-64@1.20250321.0': + optional: true + + '@cloudflare/workerd-darwin-arm64@1.20250321.0': + optional: true + + '@cloudflare/workerd-linux-64@1.20250321.0': + optional: true + + '@cloudflare/workerd-linux-arm64@1.20250321.0': + optional: true + + '@cloudflare/workerd-windows-64@1.20250321.0': + optional: true '@cloudflare/workers-types@4.20241127.0': {} @@ -9019,24 +9279,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@emnapi/runtime@1.3.1': + dependencies: + tslib: 2.8.1 + optional: true + '@emotion/hash@0.9.2': {} - '@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.17.19)': - dependencies: - esbuild: 0.17.19 - - '@esbuild-plugins/node-modules-polyfill@0.2.2(esbuild@0.17.19)': - dependencies: - esbuild: 0.17.19 - escape-string-regexp: 4.0.0 - rollup-plugin-node-polyfills: 0.2.1 - '@esbuild/aix-ppc64@0.21.5': optional: true '@esbuild/aix-ppc64@0.23.1': optional: true + '@esbuild/aix-ppc64@0.24.2': + optional: true + '@esbuild/android-arm64@0.17.19': optional: true @@ -9049,6 +9307,9 @@ snapshots: '@esbuild/android-arm64@0.23.1': optional: true + '@esbuild/android-arm64@0.24.2': + optional: true + '@esbuild/android-arm@0.17.19': optional: true @@ -9061,6 +9322,9 @@ snapshots: '@esbuild/android-arm@0.23.1': optional: true + '@esbuild/android-arm@0.24.2': + optional: true + '@esbuild/android-x64@0.17.19': optional: true @@ -9073,6 +9337,9 @@ snapshots: '@esbuild/android-x64@0.23.1': optional: true + '@esbuild/android-x64@0.24.2': + optional: true + '@esbuild/darwin-arm64@0.17.19': optional: true @@ -9085,6 +9352,9 @@ snapshots: '@esbuild/darwin-arm64@0.23.1': optional: true + '@esbuild/darwin-arm64@0.24.2': + optional: true + '@esbuild/darwin-x64@0.17.19': optional: true @@ -9097,6 +9367,9 @@ snapshots: '@esbuild/darwin-x64@0.23.1': optional: true + '@esbuild/darwin-x64@0.24.2': + optional: true + '@esbuild/freebsd-arm64@0.17.19': optional: true @@ -9109,6 +9382,9 @@ snapshots: '@esbuild/freebsd-arm64@0.23.1': optional: true + '@esbuild/freebsd-arm64@0.24.2': + optional: true + '@esbuild/freebsd-x64@0.17.19': optional: true @@ -9121,6 +9397,9 @@ snapshots: '@esbuild/freebsd-x64@0.23.1': optional: true + '@esbuild/freebsd-x64@0.24.2': + optional: true + '@esbuild/linux-arm64@0.17.19': optional: true @@ -9133,6 +9412,9 @@ snapshots: '@esbuild/linux-arm64@0.23.1': optional: true + '@esbuild/linux-arm64@0.24.2': + optional: true + '@esbuild/linux-arm@0.17.19': optional: true @@ -9145,6 +9427,9 @@ snapshots: '@esbuild/linux-arm@0.23.1': optional: true + '@esbuild/linux-arm@0.24.2': + optional: true + '@esbuild/linux-ia32@0.17.19': optional: true @@ -9157,6 +9442,9 @@ snapshots: '@esbuild/linux-ia32@0.23.1': optional: true + '@esbuild/linux-ia32@0.24.2': + optional: true + '@esbuild/linux-loong64@0.17.19': optional: true @@ -9169,6 +9457,9 @@ snapshots: '@esbuild/linux-loong64@0.23.1': optional: true + '@esbuild/linux-loong64@0.24.2': + optional: true + '@esbuild/linux-mips64el@0.17.19': optional: true @@ -9181,6 +9472,9 @@ snapshots: '@esbuild/linux-mips64el@0.23.1': optional: true + '@esbuild/linux-mips64el@0.24.2': + optional: true + '@esbuild/linux-ppc64@0.17.19': optional: true @@ -9193,6 +9487,9 @@ snapshots: '@esbuild/linux-ppc64@0.23.1': optional: true + '@esbuild/linux-ppc64@0.24.2': + optional: true + '@esbuild/linux-riscv64@0.17.19': optional: true @@ -9205,6 +9502,9 @@ snapshots: '@esbuild/linux-riscv64@0.23.1': optional: true + '@esbuild/linux-riscv64@0.24.2': + optional: true + '@esbuild/linux-s390x@0.17.19': optional: true @@ -9217,6 +9517,9 @@ snapshots: '@esbuild/linux-s390x@0.23.1': optional: true + '@esbuild/linux-s390x@0.24.2': + optional: true + '@esbuild/linux-x64@0.17.19': optional: true @@ -9229,6 +9532,12 @@ snapshots: '@esbuild/linux-x64@0.23.1': optional: true + '@esbuild/linux-x64@0.24.2': + optional: true + + '@esbuild/netbsd-arm64@0.24.2': + optional: true + '@esbuild/netbsd-x64@0.17.19': optional: true @@ -9241,9 +9550,15 @@ snapshots: '@esbuild/netbsd-x64@0.23.1': optional: true + '@esbuild/netbsd-x64@0.24.2': + optional: true + '@esbuild/openbsd-arm64@0.23.1': optional: true + '@esbuild/openbsd-arm64@0.24.2': + optional: true + '@esbuild/openbsd-x64@0.17.19': optional: true @@ -9256,6 +9571,9 @@ snapshots: '@esbuild/openbsd-x64@0.23.1': optional: true + '@esbuild/openbsd-x64@0.24.2': + optional: true + '@esbuild/sunos-x64@0.17.19': optional: true @@ -9268,6 +9586,9 @@ snapshots: '@esbuild/sunos-x64@0.23.1': optional: true + '@esbuild/sunos-x64@0.24.2': + optional: true + '@esbuild/win32-arm64@0.17.19': optional: true @@ -9280,6 +9601,9 @@ snapshots: '@esbuild/win32-arm64@0.23.1': optional: true + '@esbuild/win32-arm64@0.24.2': + optional: true + '@esbuild/win32-ia32@0.17.19': optional: true @@ -9292,6 +9616,9 @@ snapshots: '@esbuild/win32-ia32@0.23.1': optional: true + '@esbuild/win32-ia32@0.24.2': + optional: true + '@esbuild/win32-x64@0.17.19': optional: true @@ -9304,6 +9631,9 @@ snapshots: '@esbuild/win32-x64@0.23.1': optional: true + '@esbuild/win32-x64@0.24.2': + optional: true + '@eslint-community/eslint-utils@4.4.1(eslint@9.16.0(jiti@1.21.6))': dependencies: eslint: 9.16.0(jiti@1.21.6) @@ -9416,6 +9746,81 @@ snapshots: transitivePeerDependencies: - supports-color + '@img/sharp-darwin-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.4 + optional: true + + '@img/sharp-darwin-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.0.5': + optional: true + + '@img/sharp-libvips-linux-s390x@1.0.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + optional: true + + '@img/sharp-linux-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.4 + optional: true + + '@img/sharp-linux-arm@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.5 + optional: true + + '@img/sharp-linux-s390x@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.0.4 + optional: true + + '@img/sharp-linux-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + optional: true + + '@img/sharp-wasm32@0.33.5': + dependencies: + '@emnapi/runtime': 1.3.1 + optional: true + + '@img/sharp-win32-ia32@0.33.5': + optional: true + + '@img/sharp-win32-x64@0.33.5': + optional: true + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -10330,7 +10735,7 @@ snapshots: optionalDependencies: typescript: 5.7.2 - '@remix-run/dev@2.16.0(@remix-run/react@2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2))(@remix-run/serve@2.16.0(typescript@5.7.2))(@types/node@22.10.1)(sass-embedded@1.81.0)(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0))(wrangler@3.91.0(@cloudflare/workers-types@4.20241127.0))': + '@remix-run/dev@2.16.0(@remix-run/react@2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2))(@remix-run/serve@2.16.0(typescript@5.7.2))(@types/node@22.10.1)(sass-embedded@1.81.0)(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0))(wrangler@4.5.1(@cloudflare/workers-types@4.20241127.0))': dependencies: '@babel/core': 7.26.0 '@babel/generator': 7.26.2 @@ -10393,7 +10798,7 @@ snapshots: '@remix-run/serve': 2.16.0(typescript@5.7.2) typescript: 5.7.2 vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) - wrangler: 3.91.0(@cloudflare/workers-types@4.20241127.0) + wrangler: 4.5.1(@cloudflare/workers-types@4.20241127.0) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -11083,10 +11488,6 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node-forge@1.3.11': - dependencies: - '@types/node': 22.10.1 - '@types/node@20.17.16': dependencies: undici-types: 6.19.8 @@ -11541,9 +11942,7 @@ snapshots: dependencies: acorn: 8.14.0 - acorn-walk@8.3.4: - dependencies: - acorn: 8.14.0 + acorn-walk@8.3.2: {} acorn@8.14.0: {} @@ -12029,13 +12428,6 @@ snapshots: svg-pathdata: 6.0.3 optional: true - capnp-ts@0.7.0: - dependencies: - debug: 4.3.7 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - ccount@2.0.1: {} chai@5.1.2: @@ -12084,10 +12476,6 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - chokidar@4.0.1: - dependencies: - readdirp: 4.0.2 - chownr@1.1.4: {} chownr@2.0.0: {} @@ -12143,8 +12531,20 @@ snapshots: color-name@1.1.4: {} + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + optional: true + color-support@1.1.3: {} + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + optional: true + colorette@2.0.20: {} colorjs.io@0.5.2: {} @@ -12237,12 +12637,12 @@ snapshots: cookie-signature@1.2.2: {} + cookie@0.5.0: {} + cookie@0.6.0: {} cookie@0.7.1: {} - cookie@0.7.2: {} - core-js@3.41.0: optional: true @@ -12358,8 +12758,6 @@ snapshots: date-fns@3.6.0: {} - date-fns@4.1.0: {} - debounce-fn@6.0.0: dependencies: mimic-function: 5.0.1 @@ -12762,6 +13160,34 @@ snapshots: '@esbuild/win32-ia32': 0.23.1 '@esbuild/win32-x64': 0.23.1 + esbuild@0.24.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.24.2 + '@esbuild/android-arm': 0.24.2 + '@esbuild/android-arm64': 0.24.2 + '@esbuild/android-x64': 0.24.2 + '@esbuild/darwin-arm64': 0.24.2 + '@esbuild/darwin-x64': 0.24.2 + '@esbuild/freebsd-arm64': 0.24.2 + '@esbuild/freebsd-x64': 0.24.2 + '@esbuild/linux-arm': 0.24.2 + '@esbuild/linux-arm64': 0.24.2 + '@esbuild/linux-ia32': 0.24.2 + '@esbuild/linux-loong64': 0.24.2 + '@esbuild/linux-mips64el': 0.24.2 + '@esbuild/linux-ppc64': 0.24.2 + '@esbuild/linux-riscv64': 0.24.2 + '@esbuild/linux-s390x': 0.24.2 + '@esbuild/linux-x64': 0.24.2 + '@esbuild/netbsd-arm64': 0.24.2 + '@esbuild/netbsd-x64': 0.24.2 + '@esbuild/openbsd-arm64': 0.24.2 + '@esbuild/openbsd-x64': 0.24.2 + '@esbuild/sunos-x64': 0.24.2 + '@esbuild/win32-arm64': 0.24.2 + '@esbuild/win32-ia32': 0.24.2 + '@esbuild/win32-x64': 0.24.2 + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -12996,6 +13422,8 @@ snapshots: transitivePeerDependencies: - supports-color + exsolve@1.0.4: {} + extend@3.0.2: {} extract-zip@2.0.1: @@ -13630,6 +14058,9 @@ snapshots: call-bind: 1.0.7 has-tostringtag: 1.0.2 + is-arrayish@0.3.2: + optional: true + is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 @@ -13728,8 +14159,6 @@ snapshots: editions: 6.21.0 textextensions: 6.11.0 - itty-time@1.0.6: {} - jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 @@ -14702,23 +15131,21 @@ snapshots: min-indent@1.0.1: {} - miniflare@3.20241106.1: + miniflare@4.20250321.1: dependencies: '@cspotcode/source-map-support': 0.8.1 acorn: 8.14.0 - acorn-walk: 8.3.4 - capnp-ts: 0.7.0 + acorn-walk: 8.3.2 exit-hook: 2.2.1 glob-to-regexp: 0.4.1 stoppable: 1.1.0 - undici: 5.28.4 - workerd: 1.20241106.1 + undici: 5.29.0 + workerd: 1.20250321.0 ws: 8.18.0 - youch: 3.3.4 - zod: 3.24.1 + youch: 3.2.3 + zod: 3.22.3 transitivePeerDependencies: - bufferutil - - supports-color - utf-8-validate minimalistic-assert@1.0.1: {} @@ -14858,8 +15285,6 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 - node-forge@1.3.1: {} - node-gyp@9.4.1: dependencies: env-paths: 2.2.1 @@ -14981,7 +15406,7 @@ snapshots: node-fetch-native: 1.6.4 ufo: 1.5.4 - ohash@1.1.4: {} + ohash@2.0.11: {} ollama-ai-provider@0.15.2(zod@3.24.1): dependencies: @@ -15117,6 +15542,8 @@ snapshots: pathe@1.1.2: {} + pathe@2.0.3: {} + pathval@2.0.0: {} pbkdf2@3.1.2: @@ -15551,8 +15978,6 @@ snapshots: dependencies: picomatch: 2.3.1 - readdirp@4.0.2: {} - redent@3.0.0: dependencies: indent-string: 4.0.0 @@ -15905,11 +16330,6 @@ snapshots: secure-json-parse@2.7.0: {} - selfsigned@2.4.1: - dependencies: - '@types/node-forge': 1.3.11 - node-forge: 1.3.1 - semver-compare@1.0.0: optional: true @@ -15971,6 +16391,33 @@ snapshots: inherits: 2.0.4 safe-buffer: 5.2.1 + sharp@0.33.5: + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + semver: 7.6.3 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-s390x': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-linuxmusl-arm64': 0.33.5 + '@img/sharp-linuxmusl-x64': 0.33.5 + '@img/sharp-wasm32': 0.33.5 + '@img/sharp-win32-ia32': 0.33.5 + '@img/sharp-win32-x64': 0.33.5 + optional: true + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -16009,6 +16456,11 @@ snapshots: once: 1.4.0 simple-concat: 1.0.1 + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + optional: true + simple-update-notifier@2.0.0: dependencies: semver: 7.6.3 @@ -16394,17 +16846,18 @@ snapshots: undici-types@6.20.0: {} - undici@5.28.4: + undici@5.29.0: dependencies: '@fastify/busboy': 2.1.1 undici@6.21.0: {} - unenv-nightly@2.0.0-20241121-161142-806b5c0: + unenv@2.0.0-rc.15: dependencies: defu: 6.1.4 - ohash: 1.1.4 - pathe: 1.1.2 + exsolve: 1.0.4 + ohash: 2.0.11 + pathe: 2.0.3 ufo: 1.5.4 unified@10.1.2: @@ -16860,41 +17313,30 @@ snapshots: word-wrap@1.2.5: {} - workerd@1.20241106.1: + workerd@1.20250321.0: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20241106.1 - '@cloudflare/workerd-darwin-arm64': 1.20241106.1 - '@cloudflare/workerd-linux-64': 1.20241106.1 - '@cloudflare/workerd-linux-arm64': 1.20241106.1 - '@cloudflare/workerd-windows-64': 1.20241106.1 + '@cloudflare/workerd-darwin-64': 1.20250321.0 + '@cloudflare/workerd-darwin-arm64': 1.20250321.0 + '@cloudflare/workerd-linux-64': 1.20250321.0 + '@cloudflare/workerd-linux-arm64': 1.20250321.0 + '@cloudflare/workerd-windows-64': 1.20250321.0 - wrangler@3.91.0(@cloudflare/workers-types@4.20241127.0): + wrangler@4.5.1(@cloudflare/workers-types@4.20241127.0): dependencies: - '@cloudflare/kv-asset-handler': 0.3.4 - '@cloudflare/workers-shared': 0.9.0 - '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19) - '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19) + '@cloudflare/kv-asset-handler': 0.4.0 + '@cloudflare/unenv-preset': 2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250321.0) blake3-wasm: 2.1.5 - chokidar: 4.0.1 - date-fns: 4.1.0 - esbuild: 0.17.19 - itty-time: 1.0.6 - miniflare: 3.20241106.1 - nanoid: 3.3.8 + esbuild: 0.24.2 + miniflare: 4.20250321.1 path-to-regexp: 6.3.0 - resolve: 1.22.8 - resolve.exports: 2.0.3 - selfsigned: 2.4.1 - source-map: 0.6.1 - unenv: unenv-nightly@2.0.0-20241121-161142-806b5c0 - workerd: 1.20241106.1 - xxhash-wasm: 1.1.0 + unenv: 2.0.0-rc.15 + workerd: 1.20250321.0 optionalDependencies: '@cloudflare/workers-types': 4.20241127.0 fsevents: 2.3.3 + sharp: 0.33.5 transitivePeerDependencies: - bufferutil - - supports-color - utf-8-validate wrap-ansi@7.0.0: @@ -16923,8 +17365,6 @@ snapshots: xtend@4.0.2: {} - xxhash-wasm@1.1.0: {} - y18n@5.0.8: {} yallist@3.1.1: {} @@ -16952,9 +17392,9 @@ snapshots: yocto-queue@0.1.0: {} - youch@3.3.4: + youch@3.2.3: dependencies: - cookie: 0.7.2 + cookie: 0.5.0 mustache: 4.2.0 stacktracey: 2.1.8 @@ -16968,6 +17408,8 @@ snapshots: dependencies: zod: 3.24.1 + zod@3.22.3: {} + zod@3.24.1: {} zustand@5.0.3(@types/react@18.3.12)(react@18.3.1)(use-sync-external-store@1.2.2(react@18.3.1)): diff --git a/vite.config.ts b/vite.config.ts index a9351c12..6d23a96c 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -11,7 +11,6 @@ import { join } from 'path'; dotenv.config(); -// Get detailed git info with fallbacks const getGitInfo = () => { try { return { @@ -40,7 +39,6 @@ const getGitInfo = () => { } }; -// Read package.json with detailed dependency info const getPackageJson = () => { try { const pkgPath = join(process.cwd(), 'package.json'); @@ -89,7 +87,6 @@ export default defineConfig((config) => { __PKG_DEV_DEPENDENCIES: JSON.stringify(pkg.devDependencies), __PKG_PEER_DEPENDENCIES: JSON.stringify(pkg.peerDependencies), __PKG_OPTIONAL_DEPENDENCIES: JSON.stringify(pkg.optionalDependencies), - // Define global values 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV), }, build: { @@ -113,18 +110,19 @@ export default defineConfig((config) => { resolve: { alias: { buffer: 'vite-plugin-node-polyfills/polyfills/buffer', + crypto: 'crypto-browserify', + stream: 'stream-browserify', }, }, plugins: [ nodePolyfills({ - include: ['buffer', 'process', 'util', 'stream'], + include: ['buffer', 'process', 'util', 'stream', 'crypto'], globals: { Buffer: true, process: true, global: true, }, protocolImports: true, - // Exclude Node.js modules that shouldn't be polyfilled in Cloudflare exclude: ['child_process', 'fs', 'path'], }), { @@ -136,6 +134,8 @@ export default defineConfig((config) => { map: null, }; } + + return null; }, }, config.mode !== 'test' && remixCloudflareDevProxy(), diff --git a/wrangler.toml b/wrangler.toml index addd1007..72fdc2f4 100644 --- a/wrangler.toml +++ b/wrangler.toml @@ -1,6 +1,6 @@ #:schema node_modules/wrangler/config-schema.json name = "bolt" compatibility_flags = ["nodejs_compat"] -compatibility_date = "2024-07-01" +compatibility_date = "2025-03-28" pages_build_output_dir = "./build/client" -send_metrics = false \ No newline at end of file +send_metrics = false From b86fd637007a9dd4ee1c0da9634de27e66a37e5c Mon Sep 17 00:00:00 2001 From: Stijnus <72551117+Stijnus@users.noreply.github.com> Date: Sat, 29 Mar 2025 20:43:07 +0100 Subject: [PATCH 042/115] feat: bolt dyi datatab (#1570) * Update DataTab.tsx ## API Key Import Fix We identified and fixed an issue with the API key import functionality in the DataTab component. The problem was that API keys were being stored in localStorage instead of cookies, and the key format was being incorrectly processed. ### Changes Made: 1. **Updated `handleImportAPIKeys` function**: - Changed to store API keys in cookies instead of localStorage - Modified to use provider names directly as keys (e.g., "OpenAI", "Google") - Added logic to skip comment fields (keys starting with "_") - Added page reload after successful import to apply changes immediately 2. **Updated `handleDownloadTemplate` function**: - Changed template format to use provider names as keys - Added explanatory comment in the template - Removed URL-related keys that weren't being used properly 3. **Fixed template format**: - Template now uses the correct format with provider names as keys - Added support for all available providers including Hyperbolic These changes ensure that when users download the template, fill it with their API keys, and import it back, the keys are properly stored in cookies with the correct format that the application expects. * backwards compatible old import template * Update the export / import settings Settings Export/Import Improvements We've completely redesigned the settings export and import functionality to ensure all application settings are properly backed up and restored: Key Improvements Comprehensive Export Format: Now captures ALL settings from both localStorage and cookies, organized into logical categories (core, providers, features, UI, connections, debug, updates) Robust Import System: Automatically detects format version and handles both new and legacy formats with detailed error handling Complete Settings Coverage: Properly exports and imports settings from ALL tabs including: Local provider configurations (Ollama, LMStudio, etc.) Cloud provider API keys (OpenAI, Anthropic, etc.) Feature toggles and preferences UI configurations and tab settings Connection settings (GitHub, Netlify) Debug configurations and logs Technical Details Added version tracking to export files for better compatibility Implemented fallback mechanisms if primary import methods fail Added detailed logging for troubleshooting import/export issues Created helper functions for safer data handling Maintained backward compatibility with older export formats Feature Settings: Feature flags and viewed features Developer mode settings Energy saver mode configurations User Preferences: User profile information Theme settings Tab configurations Connection Settings: Netlify connections Git authentication credentials Any other service connections Debug and System Settings: Debug flags and acknowledged issues Error logs and event logs Update settings and preferences * Update DataTab.tsx * Update GithubConnection.tsx revert the code back as asked * feat: enhance style to match the project * feat:small improvements * feat: add major improvements * Update Dialog.tsx * Delete DataTab.tsx.bak * feat: small updates * Update DataVisualization.tsx * feat: dark mode fix --- .gitignore | 7 - .../@settings/core/ControlPanel.tsx | 4 +- .../@settings/tabs/data/DataTab.tsx | 1164 +-- .../@settings/tabs/data/DataVisualization.tsx | 384 + .../@settings/tabs/debug/DebugTab.tsx | 135 +- app/components/ui/Checkbox.tsx | 25 + app/components/ui/Dialog.tsx | 345 +- app/lib/hooks/useDataOperations.ts | 966 +++ app/lib/hooks/useIndexedDB.ts | 58 + app/lib/persistence/chats.ts | 140 + app/lib/services/importExportService.ts | 695 ++ app/routes/api.export-api-keys.ts | 44 + app/styles/diff-view.css | 2 +- package.json | 4 + pnpm-lock.yaml | 6665 ++++++++--------- 15 files changed, 6698 insertions(+), 3940 deletions(-) create mode 100644 app/components/@settings/tabs/data/DataVisualization.tsx create mode 100644 app/components/ui/Checkbox.tsx create mode 100644 app/lib/hooks/useDataOperations.ts create mode 100644 app/lib/hooks/useIndexedDB.ts create mode 100644 app/lib/persistence/chats.ts create mode 100644 app/lib/services/importExportService.ts create mode 100644 app/routes/api.export-api-keys.ts diff --git a/.gitignore b/.gitignore index 17fd39e5..168f84c2 100644 --- a/.gitignore +++ b/.gitignore @@ -44,11 +44,4 @@ changelogUI.md docs/instructions/Roadmap.md .cursorrules *.md -<<<<<<< Updated upstream -======= .qodo -exponent.txt -<<<<<<< Updated upstream ->>>>>>> Stashed changes -======= ->>>>>>> Stashed changes diff --git a/app/components/@settings/core/ControlPanel.tsx b/app/components/@settings/core/ControlPanel.tsx index 0d90975c..925bce1d 100644 --- a/app/components/@settings/core/ControlPanel.tsx +++ b/app/components/@settings/core/ControlPanel.tsx @@ -29,7 +29,7 @@ import ProfileTab from '~/components/@settings/tabs/profile/ProfileTab'; import SettingsTab from '~/components/@settings/tabs/settings/SettingsTab'; import NotificationsTab from '~/components/@settings/tabs/notifications/NotificationsTab'; import FeaturesTab from '~/components/@settings/tabs/features/FeaturesTab'; -import DataTab from '~/components/@settings/tabs/data/DataTab'; +import { DataTab } from '~/components/@settings/tabs/data/DataTab'; import DebugTab from '~/components/@settings/tabs/debug/DebugTab'; import { EventLogsTab } from '~/components/@settings/tabs/event-logs/EventLogsTab'; import UpdateTab from '~/components/@settings/tabs/update/UpdateTab'; @@ -416,7 +416,7 @@ export const ControlPanel = ({ open, onClose }: ControlPanelProps) => {
(null); + const [isLoading, setIsLoading] = useState(true); + const [error, setError] = useState(null); + + useEffect(() => { + const initDB = async () => { + try { + setIsLoading(true); + + const database = await openDatabase(); + setDb(database || null); + setIsLoading(false); + } catch (err) { + setError(err instanceof Error ? err : new Error('Unknown error initializing database')); + setIsLoading(false); + } + }; + + initDB(); + + return () => { + if (db) { + db.close(); + } + }; + }, []); + + return { db, isLoading, error }; +} + +// Extend the Chat interface to include the missing properties +interface ExtendedChat extends Chat { + title?: string; + updatedAt?: number; +} + +// Helper function to create a chat label and description +function createChatItem(chat: Chat): ChatItem { + return { + id: chat.id, + + // Use description as title if available, or format a short ID + label: (chat as ExtendedChat).title || chat.description || `Chat ${chat.id.slice(0, 8)}`, + + // Format the description with message count and timestamp + description: `${chat.messages.length} messages - Last updated: ${new Date((chat as ExtendedChat).updatedAt || Date.parse(chat.timestamp)).toLocaleString()}`, + }; +} + +interface SettingsCategory { + id: string; + label: string; + description: string; +} + +interface ChatItem { + id: string; + label: string; + description: string; +} + +export function DataTab() { + // Use our custom hook for the boltHistory database + const { db, isLoading: dbLoading } = useBoltHistoryDB(); const fileInputRef = useRef(null); const apiKeyFileInputRef = useRef(null); + const chatFileInputRef = useRef(null); - const handleExportAllChats = async () => { - try { - if (!db) { - throw new Error('Database not initialized'); + // State for confirmation dialogs + const [showResetInlineConfirm, setShowResetInlineConfirm] = useState(false); + const [showDeleteInlineConfirm, setShowDeleteInlineConfirm] = useState(false); + const [showSettingsSelection, setShowSettingsSelection] = useState(false); + const [showChatsSelection, setShowChatsSelection] = useState(false); + + // State for settings categories and available chats + const [settingsCategories] = useState([ + { id: 'core', label: 'Core Settings', description: 'User profile and main settings' }, + { id: 'providers', label: 'Providers', description: 'API keys and provider configurations' }, + { id: 'features', label: 'Features', description: 'Feature flags and settings' }, + { id: 'ui', label: 'UI', description: 'UI configuration and preferences' }, + { id: 'connections', label: 'Connections', description: 'External service connections' }, + { id: 'debug', label: 'Debug', description: 'Debug settings and logs' }, + { id: 'updates', label: 'Updates', description: 'Update settings and notifications' }, + ]); + + const [availableChats, setAvailableChats] = useState([]); + const [chatItems, setChatItems] = useState([]); + + // Data operations hook with boltHistory database + const { + isExporting, + isImporting, + isResetting, + isDownloadingTemplate, + handleExportSettings, + handleExportSelectedSettings, + handleExportAllChats, + handleExportSelectedChats, + handleImportSettings, + handleImportChats, + handleResetSettings, + handleResetChats, + handleDownloadTemplate, + handleImportAPIKeys, + handleExportAPIKeys, + handleUndo, + lastOperation, + } = useDataOperations({ + customDb: db || undefined, // Pass the boltHistory database, converting null to undefined + onReloadSettings: () => window.location.reload(), + onReloadChats: () => { + // Reload chats after reset + if (db) { + getAllChats(db).then((chats) => { + // Cast to ExtendedChat to handle additional properties + const extendedChats = chats as ExtendedChat[]; + setAvailableChats(extendedChats); + setChatItems(extendedChats.map((chat) => createChatItem(chat))); + }); } + }, + onResetSettings: () => setShowResetInlineConfirm(false), + onResetChats: () => setShowDeleteInlineConfirm(false), + }); - // Get all chats from IndexedDB - const allChats = await getAll(db); - const exportData = { - chats: allChats, - exportDate: new Date().toISOString(), - }; + // Loading states for operations not provided by the hook + const [isDeleting, setIsDeleting] = useState(false); + const [isImportingKeys, setIsImportingKeys] = useState(false); - // Download as JSON - const blob = new Blob([JSON.stringify(exportData, null, 2)], { type: 'application/json' }); - const url = URL.createObjectURL(blob); - const a = document.createElement('a'); - a.href = url; - a.download = `bolt-chats-${new Date().toISOString()}.json`; - document.body.appendChild(a); - a.click(); - document.body.removeChild(a); - URL.revokeObjectURL(url); - - toast.success('Chats exported successfully'); - } catch (error) { - console.error('Export error:', error); - toast.error('Failed to export chats'); - } - }; - - const handleExportSettings = () => { - try { - const settings = { - userProfile: localStorage.getItem('bolt_user_profile'), - settings: localStorage.getItem('bolt_settings'), - exportDate: new Date().toISOString(), - }; - - const blob = new Blob([JSON.stringify(settings, null, 2)], { type: 'application/json' }); - const url = URL.createObjectURL(blob); - const a = document.createElement('a'); - a.href = url; - a.download = `bolt-settings-${new Date().toISOString()}.json`; - document.body.appendChild(a); - a.click(); - document.body.removeChild(a); - URL.revokeObjectURL(url); - - toast.success('Settings exported successfully'); - } catch (error) { - console.error('Export error:', error); - toast.error('Failed to export settings'); - } - }; - - const handleImportSettings = async (event: React.ChangeEvent) => { - const file = event.target.files?.[0]; - - if (!file) { - return; - } - - try { - const content = await file.text(); - const settings = JSON.parse(content); - - if (settings.userProfile) { - localStorage.setItem('bolt_user_profile', settings.userProfile); - } - - if (settings.settings) { - localStorage.setItem('bolt_settings', settings.settings); - } - - window.location.reload(); // Reload to apply settings - toast.success('Settings imported successfully'); - } catch (error) { - console.error('Import error:', error); - toast.error('Failed to import settings'); - } - }; - - const handleImportAPIKeys = async (event: React.ChangeEvent) => { - const file = event.target.files?.[0]; - - if (!file) { - return; - } - - setIsImportingKeys(true); - - try { - const content = await file.text(); - const keys = JSON.parse(content); - - // Validate and save each key - Object.entries(keys).forEach(([key, value]) => { - if (typeof value !== 'string') { - throw new Error(`Invalid value for key: ${key}`); - } - - localStorage.setItem(`bolt_${key.toLowerCase()}`, value); + // Load available chats + useEffect(() => { + if (db) { + console.log('Loading chats from boltHistory database', { + name: db.name, + version: db.version, + objectStoreNames: Array.from(db.objectStoreNames), }); - toast.success('API keys imported successfully'); - } catch (error) { - console.error('Error importing API keys:', error); - toast.error('Failed to import API keys'); - } finally { - setIsImportingKeys(false); + getAllChats(db) + .then((chats) => { + console.log('Found chats:', chats.length); - if (apiKeyFileInputRef.current) { - apiKeyFileInputRef.current.value = ''; + // Cast to ExtendedChat to handle additional properties + const extendedChats = chats as ExtendedChat[]; + setAvailableChats(extendedChats); + + // Create ChatItems for selection dialog + setChatItems(extendedChats.map((chat) => createChatItem(chat))); + }) + .catch((error) => { + console.error('Error loading chats:', error); + toast.error('Failed to load chats: ' + (error instanceof Error ? error.message : 'Unknown error')); + }); + } + }, [db]); + + // Handle file input changes + const handleFileInputChange = useCallback( + (event: React.ChangeEvent) => { + const file = event.target.files?.[0]; + + if (file) { + handleImportSettings(file); } - } - }; + }, + [handleImportSettings], + ); - const handleDownloadTemplate = () => { - setIsDownloadingTemplate(true); + const handleAPIKeyFileInputChange = useCallback( + (event: React.ChangeEvent) => { + const file = event.target.files?.[0]; - try { - const template = { - Anthropic_API_KEY: '', - OpenAI_API_KEY: '', - Google_API_KEY: '', - Groq_API_KEY: '', - HuggingFace_API_KEY: '', - OpenRouter_API_KEY: '', - Deepseek_API_KEY: '', - Mistral_API_KEY: '', - OpenAILike_API_KEY: '', - Together_API_KEY: '', - xAI_API_KEY: '', - Perplexity_API_KEY: '', - Cohere_API_KEY: '', - AzureOpenAI_API_KEY: '', - OPENAI_LIKE_API_BASE_URL: '', - LMSTUDIO_API_BASE_URL: '', - OLLAMA_API_BASE_URL: '', - TOGETHER_API_BASE_URL: '', - }; - - const blob = new Blob([JSON.stringify(template, null, 2)], { type: 'application/json' }); - const url = URL.createObjectURL(blob); - const a = document.createElement('a'); - a.href = url; - a.download = 'bolt-api-keys-template.json'; - document.body.appendChild(a); - a.click(); - document.body.removeChild(a); - URL.revokeObjectURL(url); - - toast.success('Template downloaded successfully'); - } catch (error) { - console.error('Error downloading template:', error); - toast.error('Failed to download template'); - } finally { - setIsDownloadingTemplate(false); - } - }; - - const handleResetSettings = async () => { - setIsResetting(true); - - try { - // Clear all stored settings from localStorage - localStorage.removeItem('bolt_user_profile'); - localStorage.removeItem('bolt_settings'); - localStorage.removeItem('bolt_chat_history'); - - // Clear all data from IndexedDB - if (!db) { - throw new Error('Database not initialized'); + if (file) { + setIsImportingKeys(true); + handleImportAPIKeys(file).finally(() => setIsImportingKeys(false)); } + }, + [handleImportAPIKeys], + ); - // Get all chats and delete them - const chats = await getAll(db as IDBDatabase); - const deletePromises = chats.map((chat) => deleteById(db as IDBDatabase, chat.id)); - await Promise.all(deletePromises); + const handleChatFileInputChange = useCallback( + (event: React.ChangeEvent) => { + const file = event.target.files?.[0]; - // Close the dialog first - setShowResetInlineConfirm(false); + if (file) { + handleImportChats(file); + } + }, + [handleImportChats], + ); - // Then reload and show success message - window.location.reload(); - toast.success('Settings reset successfully'); - } catch (error) { - console.error('Reset error:', error); - setShowResetInlineConfirm(false); - toast.error('Failed to reset settings'); - } finally { - setIsResetting(false); - } - }; - - const handleDeleteAllChats = async () => { + // Wrapper for reset chats to handle loading state + const handleResetChatsWithState = useCallback(() => { setIsDeleting(true); - - try { - // Clear chat history from localStorage - localStorage.removeItem('bolt_chat_history'); - - // Clear chats from IndexedDB - if (!db) { - throw new Error('Database not initialized'); - } - - // Get all chats and delete them one by one - const chats = await getAll(db as IDBDatabase); - const deletePromises = chats.map((chat) => deleteById(db as IDBDatabase, chat.id)); - await Promise.all(deletePromises); - - // Close the dialog first - setShowDeleteInlineConfirm(false); - - // Then show the success message - toast.success('Chat history deleted successfully'); - } catch (error) { - console.error('Delete error:', error); - setShowDeleteInlineConfirm(false); - toast.error('Failed to delete chat history'); - } finally { - setIsDeleting(false); - } - }; + handleResetChats().finally(() => setIsDeleting(false)); + }, [handleResetChats]); return ( -
- - {/* Reset Settings Dialog */} - - -
-
-
- Reset All Settings? -
-

- This will reset all your settings to their default values. This action cannot be undone. -

-
- - - - - {isResetting ? ( -
- ) : ( -
- )} - Reset Settings - -
+
+ {/* Hidden file inputs */} + + + + + {/* Reset Settings Confirmation Dialog */} + setShowResetInlineConfirm(false)} + title="Reset All Settings?" + description="This will reset all your settings to their default values. This action cannot be undone." + confirmLabel="Reset Settings" + cancelLabel="Cancel" + variant="destructive" + isLoading={isResetting} + onConfirm={handleResetSettings} + /> + + {/* Delete Chats Confirmation Dialog */} + setShowDeleteInlineConfirm(false)} + title="Delete All Chats?" + description="This will permanently delete all your chat history. This action cannot be undone." + confirmLabel="Delete All" + cancelLabel="Cancel" + variant="destructive" + isLoading={isDeleting} + onConfirm={handleResetChatsWithState} + /> + + {/* Settings Selection Dialog */} + setShowSettingsSelection(false)} + title="Select Settings to Export" + items={settingsCategories} + onConfirm={(selectedIds) => { + handleExportSelectedSettings(selectedIds); + setShowSettingsSelection(false); + }} + confirmLabel="Export Selected" + /> + + {/* Chats Selection Dialog */} + setShowChatsSelection(false)} + title="Select Chats to Export" + items={chatItems} + onConfirm={(selectedIds) => { + handleExportSelectedChats(selectedIds); + setShowChatsSelection(false); + }} + confirmLabel="Export Selected" + /> + + {/* Chats Section */} +
+

Chats

+ {dbLoading ? ( +
+
+ Loading chats database...
-
-
+ ) : ( +
+ + +
+ +
+ + + Export All Chats + +
+ Export all your chats to a JSON file. + + + + - - - {isDeleting ? ( -
- ) : ( -
- )} - Delete All - -
+ console.log('Database information:', { + name: db.name, + version: db.version, + objectStoreNames: Array.from(db.objectStoreNames), + }); + + if (availableChats.length === 0) { + toast.warning('No chats available to export'); + return; + } + + await handleExportAllChats(); + } catch (error) { + console.error('Error exporting chats:', error); + toast.error( + `Failed to export chats: ${error instanceof Error ? error.message : 'Unknown error'}`, + ); + } + }} + disabled={isExporting || availableChats.length === 0} + variant="outline" + size="sm" + className={classNames( + 'hover:text-bolt-elements-item-contentAccent hover:border-bolt-elements-item-backgroundAccent hover:bg-bolt-elements-item-backgroundAccent transition-colors w-full justify-center', + isExporting || availableChats.length === 0 ? 'cursor-not-allowed' : '', + )} + > + {isExporting ? ( + <> +
+ Exporting... + + ) : availableChats.length === 0 ? ( + 'No Chats to Export' + ) : ( + 'Export All' + )} + + + + + + + +
+ +
+ + + Export Selected Chats + +
+ Choose specific chats to export. + + + + + + + + + + +
+ +
+ + + Import Chats + +
+ Import chats from a JSON file. + + + + + + + + + + +
+ +
+ + + Delete All Chats + +
+ Delete all your chat history. + + + + + + +
- - + )} +
- {/* Chat History Section */} - -
-
-

Chat History

-
-

Export or delete all your chat history.

-
- -
- Export All Chats - - setShowDeleteInlineConfirm(true)} - > -
- Delete All Chats - -
- + {/* Settings Section */} +
+

Settings

+
+ + +
+ +
+ + + Export All Settings + +
+ Export all your settings to a JSON file. + + + + + + + - {/* Settings Backup Section */} - -
-
-

Settings Backup

-
-

- Export your settings to a JSON file or import settings from a previously exported file. -

-
- -
- Export Settings - - fileInputRef.current?.click()} - > -
- Import Settings - - setShowResetInlineConfirm(true)} - > -
- Reset Settings - -
- + + +
+ +
+ + + Export Selected Settings + +
+ Choose specific settings to export. + + + + + + + - {/* API Keys Management Section */} - -
-
-

API Keys Management

+ + +
+ +
+ + + Import Settings + +
+ Import settings from a JSON file. + + + + + + + + + + +
+ +
+ + + Reset All Settings + +
+ Reset all settings to their default values. + + + + + + +
-

- Import API keys from a JSON file or download a template to fill in your keys. -

-
- - - {isDownloadingTemplate ? ( -
- ) : ( -
- )} - Download Template - - apiKeyFileInputRef.current?.click()} - disabled={isImportingKeys} - > - {isImportingKeys ? ( -
- ) : ( -
- )} - Import API Keys - +
+ + {/* API Keys Section */} +
+

API Keys

+
+ + +
+ +
+ + + Export API Keys + +
+ Export your API keys to a JSON file. + + + + + + + + + + +
+ +
+ + + Download Template + +
+ Download a template file for your API keys. + + + + + + + + + + +
+ +
+ + + Import API Keys + +
+ Import API keys from a JSON file. + + + + + + +
-
+
+ + {/* Data Visualization */} +
+

Data Usage

+ + + + + +
+ + {/* Undo Last Operation */} + {lastOperation && ( +
+
+ Last action: {lastOperation.type} +
+ +
+ )}
); } diff --git a/app/components/@settings/tabs/data/DataVisualization.tsx b/app/components/@settings/tabs/data/DataVisualization.tsx new file mode 100644 index 00000000..27d27388 --- /dev/null +++ b/app/components/@settings/tabs/data/DataVisualization.tsx @@ -0,0 +1,384 @@ +import { useState, useEffect } from 'react'; +import { + Chart as ChartJS, + CategoryScale, + LinearScale, + BarElement, + Title, + Tooltip, + Legend, + ArcElement, + PointElement, + LineElement, +} from 'chart.js'; +import { Bar, Pie } from 'react-chartjs-2'; +import type { Chat } from '~/lib/persistence/chats'; +import { classNames } from '~/utils/classNames'; + +// Register ChartJS components +ChartJS.register(CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend, ArcElement, PointElement, LineElement); + +type DataVisualizationProps = { + chats: Chat[]; +}; + +export function DataVisualization({ chats }: DataVisualizationProps) { + const [chatsByDate, setChatsByDate] = useState>({}); + const [messagesByRole, setMessagesByRole] = useState>({}); + const [apiKeyUsage, setApiKeyUsage] = useState>([]); + const [averageMessagesPerChat, setAverageMessagesPerChat] = useState(0); + const [isDarkMode, setIsDarkMode] = useState(false); + + useEffect(() => { + const isDark = document.documentElement.classList.contains('dark'); + setIsDarkMode(isDark); + + const observer = new MutationObserver((mutations) => { + mutations.forEach((mutation) => { + if (mutation.attributeName === 'class') { + setIsDarkMode(document.documentElement.classList.contains('dark')); + } + }); + }); + + observer.observe(document.documentElement, { attributes: true }); + + return () => observer.disconnect(); + }, []); + + useEffect(() => { + if (!chats || chats.length === 0) { + return; + } + + // Process chat data + const chatDates: Record = {}; + const roleCounts: Record = {}; + const apiUsage: Record = {}; + let totalMessages = 0; + + chats.forEach((chat) => { + const date = new Date(chat.timestamp).toLocaleDateString(); + chatDates[date] = (chatDates[date] || 0) + 1; + + chat.messages.forEach((message) => { + roleCounts[message.role] = (roleCounts[message.role] || 0) + 1; + totalMessages++; + + if (message.role === 'assistant') { + const providerMatch = message.content.match(/provider:\s*([\w-]+)/i); + const provider = providerMatch ? providerMatch[1] : 'unknown'; + apiUsage[provider] = (apiUsage[provider] || 0) + 1; + } + }); + }); + + const sortedDates = Object.keys(chatDates).sort((a, b) => new Date(a).getTime() - new Date(b).getTime()); + const sortedChatsByDate: Record = {}; + sortedDates.forEach((date) => { + sortedChatsByDate[date] = chatDates[date]; + }); + + setChatsByDate(sortedChatsByDate); + setMessagesByRole(roleCounts); + setApiKeyUsage(Object.entries(apiUsage).map(([provider, count]) => ({ provider, count }))); + setAverageMessagesPerChat(totalMessages / chats.length); + }, [chats]); + + // Get theme colors from CSS variables to ensure theme consistency + const getThemeColor = (varName: string): string => { + // Get the CSS variable value from document root + if (typeof document !== 'undefined') { + return getComputedStyle(document.documentElement).getPropertyValue(varName).trim(); + } + + // Fallback for SSR + return isDarkMode ? '#FFFFFF' : '#000000'; + }; + + // Theme-aware chart colors with enhanced dark mode visibility using CSS variables + const chartColors = { + grid: isDarkMode ? 'rgba(255, 255, 255, 0.2)' : 'rgba(0, 0, 0, 0.1)', + text: getThemeColor('--bolt-elements-textPrimary'), + textSecondary: getThemeColor('--bolt-elements-textSecondary'), + background: getThemeColor('--bolt-elements-bg-depth-1'), + accent: getThemeColor('--bolt-elements-button-primary-text'), + border: getThemeColor('--bolt-elements-borderColor'), + }; + + const getChartColors = (index: number) => { + // Define color palettes based on Bolt design tokens + const baseColors = [ + // Indigo + { + base: getThemeColor('--bolt-elements-button-primary-text'), + }, + + // Pink + { + base: isDarkMode ? 'rgb(244, 114, 182)' : 'rgb(236, 72, 153)', + }, + + // Green + { + base: getThemeColor('--bolt-elements-icon-success'), + }, + + // Yellow + { + base: isDarkMode ? 'rgb(250, 204, 21)' : 'rgb(234, 179, 8)', + }, + + // Blue + { + base: isDarkMode ? 'rgb(56, 189, 248)' : 'rgb(14, 165, 233)', + }, + ]; + + // Get the base color for this index + const color = baseColors[index % baseColors.length].base; + + // Parse color and generate variations with appropriate opacity + let r = 0, + g = 0, + b = 0; + + // Handle rgb/rgba format + const rgbMatch = color.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/); + const rgbaMatch = color.match(/rgba\((\d+),\s*(\d+),\s*(\d+),\s*([0-9.]+)\)/); + + if (rgbMatch) { + [, r, g, b] = rgbMatch.map(Number); + } else if (rgbaMatch) { + [, r, g, b] = rgbaMatch.map(Number); + } else if (color.startsWith('#')) { + // Handle hex format + const hex = color.slice(1); + const bigint = parseInt(hex, 16); + r = (bigint >> 16) & 255; + g = (bigint >> 8) & 255; + b = bigint & 255; + } + + return { + bg: `rgba(${r}, ${g}, ${b}, ${isDarkMode ? 0.7 : 0.5})`, + border: `rgba(${r}, ${g}, ${b}, ${isDarkMode ? 0.9 : 0.8})`, + }; + }; + + const chartData = { + history: { + labels: Object.keys(chatsByDate), + datasets: [ + { + label: 'Chats Created', + data: Object.values(chatsByDate), + backgroundColor: getChartColors(0).bg, + borderColor: getChartColors(0).border, + borderWidth: 1, + }, + ], + }, + roles: { + labels: Object.keys(messagesByRole), + datasets: [ + { + label: 'Messages by Role', + data: Object.values(messagesByRole), + backgroundColor: Object.keys(messagesByRole).map((_, i) => getChartColors(i).bg), + borderColor: Object.keys(messagesByRole).map((_, i) => getChartColors(i).border), + borderWidth: 1, + }, + ], + }, + apiUsage: { + labels: apiKeyUsage.map((item) => item.provider), + datasets: [ + { + label: 'API Usage', + data: apiKeyUsage.map((item) => item.count), + backgroundColor: apiKeyUsage.map((_, i) => getChartColors(i).bg), + borderColor: apiKeyUsage.map((_, i) => getChartColors(i).border), + borderWidth: 1, + }, + ], + }, + }; + + const baseChartOptions = { + responsive: true, + maintainAspectRatio: false, + color: chartColors.text, + plugins: { + legend: { + position: 'top' as const, + labels: { + color: chartColors.text, + font: { + weight: 'bold' as const, + size: 12, + }, + padding: 16, + usePointStyle: true, + }, + }, + title: { + display: true, + color: chartColors.text, + font: { + size: 16, + weight: 'bold' as const, + }, + padding: 16, + }, + tooltip: { + titleColor: chartColors.text, + bodyColor: chartColors.text, + backgroundColor: isDarkMode + ? 'rgba(23, 23, 23, 0.8)' // Dark bg using Tailwind gray-900 + : 'rgba(255, 255, 255, 0.8)', // Light bg + borderColor: chartColors.border, + borderWidth: 1, + }, + }, + }; + + const chartOptions = { + ...baseChartOptions, + plugins: { + ...baseChartOptions.plugins, + title: { + ...baseChartOptions.plugins.title, + text: 'Chat History', + }, + }, + scales: { + x: { + grid: { + color: chartColors.grid, + drawBorder: false, + }, + border: { + display: false, + }, + ticks: { + color: chartColors.text, + font: { + weight: 500, + }, + }, + }, + y: { + grid: { + color: chartColors.grid, + drawBorder: false, + }, + border: { + display: false, + }, + ticks: { + color: chartColors.text, + font: { + weight: 500, + }, + }, + }, + }, + }; + + const pieOptions = { + ...baseChartOptions, + plugins: { + ...baseChartOptions.plugins, + title: { + ...baseChartOptions.plugins.title, + text: 'Message Distribution', + }, + legend: { + ...baseChartOptions.plugins.legend, + position: 'right' as const, + }, + datalabels: { + color: chartColors.text, + font: { + weight: 'bold' as const, + }, + }, + }, + }; + + if (chats.length === 0) { + return ( +
+
+

No Data Available

+

+ Start creating chats to see your usage statistics and data visualization. +

+
+ ); + } + + const cardClasses = classNames( + 'p-6 rounded-lg shadow-sm', + 'bg-bolt-elements-bg-depth-1', + 'border border-bolt-elements-borderColor', + ); + + const statClasses = classNames('text-3xl font-bold text-bolt-elements-textPrimary', 'flex items-center gap-3'); + + return ( +
+
+
+

Total Chats

+
+
+ {chats.length} +
+
+ +
+

Total Messages

+
+
+ {Object.values(messagesByRole).reduce((sum, count) => sum + count, 0)} +
+
+ +
+

Avg. Messages/Chat

+
+
+ {averageMessagesPerChat.toFixed(1)} +
+
+
+ +
+
+

Chat History

+
+ +
+
+ +
+

Message Distribution

+
+ +
+
+
+ + {apiKeyUsage.length > 0 && ( +
+

API Usage by Provider

+
+ +
+
+ )} +
+ ); +} diff --git a/app/components/@settings/tabs/debug/DebugTab.tsx b/app/components/@settings/tabs/debug/DebugTab.tsx index 25a86623..652c7f5a 100644 --- a/app/components/@settings/tabs/debug/DebugTab.tsx +++ b/app/components/@settings/tabs/debug/DebugTab.tsx @@ -342,24 +342,86 @@ export default function DebugTab() { try { setLoading((prev) => ({ ...prev, systemInfo: true })); - // Get browser info - const ua = navigator.userAgent; - const browserName = ua.includes('Firefox') - ? 'Firefox' - : ua.includes('Chrome') - ? 'Chrome' - : ua.includes('Safari') - ? 'Safari' - : ua.includes('Edge') - ? 'Edge' - : 'Unknown'; - const browserVersion = ua.match(/(Firefox|Chrome|Safari|Edge)\/([0-9.]+)/)?.[2] || 'Unknown'; + // Get better OS detection + const userAgent = navigator.userAgent; + let detectedOS = 'Unknown'; + let detectedArch = 'unknown'; + + // Improved OS detection + if (userAgent.indexOf('Win') !== -1) { + detectedOS = 'Windows'; + } else if (userAgent.indexOf('Mac') !== -1) { + detectedOS = 'macOS'; + } else if (userAgent.indexOf('Linux') !== -1) { + detectedOS = 'Linux'; + } else if (userAgent.indexOf('Android') !== -1) { + detectedOS = 'Android'; + } else if (/iPhone|iPad|iPod/.test(userAgent)) { + detectedOS = 'iOS'; + } + + // Better architecture detection + if (userAgent.indexOf('x86_64') !== -1 || userAgent.indexOf('x64') !== -1 || userAgent.indexOf('WOW64') !== -1) { + detectedArch = 'x64'; + } else if (userAgent.indexOf('x86') !== -1 || userAgent.indexOf('i686') !== -1) { + detectedArch = 'x86'; + } else if (userAgent.indexOf('arm64') !== -1 || userAgent.indexOf('aarch64') !== -1) { + detectedArch = 'arm64'; + } else if (userAgent.indexOf('arm') !== -1) { + detectedArch = 'arm'; + } + + // Get browser info with improved detection + const browserName = (() => { + if (userAgent.indexOf('Edge') !== -1 || userAgent.indexOf('Edg/') !== -1) { + return 'Edge'; + } + + if (userAgent.indexOf('Chrome') !== -1) { + return 'Chrome'; + } + + if (userAgent.indexOf('Firefox') !== -1) { + return 'Firefox'; + } + + if (userAgent.indexOf('Safari') !== -1) { + return 'Safari'; + } + + return 'Unknown'; + })(); + + const browserVersionMatch = userAgent.match(/(Edge|Edg|Chrome|Firefox|Safari)[\s/](\d+(\.\d+)*)/); + const browserVersion = browserVersionMatch ? browserVersionMatch[2] : 'Unknown'; // Get performance metrics const memory = (performance as any).memory || {}; const timing = performance.timing; const navigation = performance.navigation; - const connection = (navigator as any).connection; + const connection = (navigator as any).connection || {}; + + // Try to use Navigation Timing API Level 2 when available + let loadTime = 0; + let domReadyTime = 0; + + try { + const navEntries = performance.getEntriesByType('navigation'); + + if (navEntries.length > 0) { + const navTiming = navEntries[0] as PerformanceNavigationTiming; + loadTime = navTiming.loadEventEnd - navTiming.startTime; + domReadyTime = navTiming.domContentLoadedEventEnd - navTiming.startTime; + } else { + // Fall back to older API + loadTime = timing.loadEventEnd - timing.navigationStart; + domReadyTime = timing.domContentLoadedEventEnd - timing.navigationStart; + } + } catch { + // Fall back to older API if Navigation Timing API Level 2 is not available + loadTime = timing.loadEventEnd - timing.navigationStart; + domReadyTime = timing.domContentLoadedEventEnd - timing.navigationStart; + } // Get battery info let batteryInfo; @@ -405,9 +467,9 @@ export default function DebugTab() { const memoryPercentage = totalMemory ? (usedMemory / totalMemory) * 100 : 0; const systemInfo: SystemInfo = { - os: navigator.platform, - arch: navigator.userAgent.includes('x64') ? 'x64' : navigator.userAgent.includes('arm') ? 'arm' : 'unknown', - platform: navigator.platform, + os: detectedOS, + arch: detectedArch, + platform: navigator.platform || 'unknown', cpus: navigator.hardwareConcurrency + ' cores', memory: { total: formatBytes(totalMemory), @@ -423,7 +485,7 @@ export default function DebugTab() { userAgent: navigator.userAgent, cookiesEnabled: navigator.cookieEnabled, online: navigator.onLine, - platform: navigator.platform, + platform: navigator.platform || 'unknown', cores: navigator.hardwareConcurrency, }, screen: { @@ -445,8 +507,8 @@ export default function DebugTab() { usagePercentage: memory.totalJSHeapSize ? (memory.usedJSHeapSize / memory.totalJSHeapSize) * 100 : 0, }, timing: { - loadTime: timing.loadEventEnd - timing.navigationStart, - domReadyTime: timing.domContentLoadedEventEnd - timing.navigationStart, + loadTime, + domReadyTime, readyStart: timing.fetchStart - timing.navigationStart, redirectTime: timing.redirectEnd - timing.redirectStart, appcacheTime: timing.domainLookupStart - timing.fetchStart, @@ -483,6 +545,23 @@ export default function DebugTab() { } }; + // Helper function to format bytes to human readable format with better precision + const formatBytes = (bytes: number) => { + if (bytes === 0) { + return '0 B'; + } + + const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']; + const i = Math.floor(Math.log(bytes) / Math.log(1024)); + + // Return with proper precision based on unit size + if (i === 0) { + return `${bytes} ${units[i]}`; + } + + return `${(bytes / Math.pow(1024, i)).toFixed(2)} ${units[i]}`; + }; + const getWebAppInfo = async () => { try { setLoading((prev) => ({ ...prev, webAppInfo: true })); @@ -520,20 +599,6 @@ export default function DebugTab() { } }; - // Helper function to format bytes to human readable format - const formatBytes = (bytes: number) => { - const units = ['B', 'KB', 'MB', 'GB']; - let size = bytes; - let unitIndex = 0; - - while (size >= 1024 && unitIndex < units.length - 1) { - size /= 1024; - unitIndex++; - } - - return `${Math.round(size)} ${units[unitIndex]}`; - }; - const handleLogPerformance = () => { try { setLoading((prev) => ({ ...prev, performance: true })); @@ -1353,9 +1418,7 @@ export default function DebugTab() {
- DOM Ready: {systemInfo - ? (systemInfo.performance.timing.domReadyTime / 1000).toFixed(2) - : '-'}s + DOM Ready: {systemInfo ? (systemInfo.performance.timing.domReadyTime / 1000).toFixed(2) : '-'}s
diff --git a/app/components/ui/Checkbox.tsx b/app/components/ui/Checkbox.tsx new file mode 100644 index 00000000..7fa0d9fe --- /dev/null +++ b/app/components/ui/Checkbox.tsx @@ -0,0 +1,25 @@ +import * as React from 'react'; +import * as CheckboxPrimitive from '@radix-ui/react-checkbox'; +import { Check } from 'lucide-react'; +import { classNames } from '~/utils/classNames'; + +const Checkbox = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + + + +)); +Checkbox.displayName = 'Checkbox'; + +export { Checkbox }; diff --git a/app/components/ui/Dialog.tsx b/app/components/ui/Dialog.tsx index 5d5b26ce..46af8785 100644 --- a/app/components/ui/Dialog.tsx +++ b/app/components/ui/Dialog.tsx @@ -1,9 +1,13 @@ import * as RadixDialog from '@radix-ui/react-dialog'; import { motion, type Variants } from 'framer-motion'; -import React, { memo, type ReactNode } from 'react'; +import React, { memo, type ReactNode, useState, useEffect } from 'react'; import { classNames } from '~/utils/classNames'; import { cubicEasingFn } from '~/utils/easings'; import { IconButton } from './IconButton'; +import { Button } from './Button'; +import { FixedSizeList } from 'react-window'; +import { Checkbox } from './Checkbox'; +import { Label } from './Label'; export { Close as DialogClose, Root as DialogRoot } from '@radix-ui/react-dialog'; @@ -17,12 +21,14 @@ interface DialogButtonProps { export const DialogButton = memo(({ type, children, onClick, disabled }: DialogButtonProps) => { return ( + +
+
+ + + ); +} + +/** + * Type for selection item in SelectionDialog + */ +type SelectionItem = { + id: string; + label: string; + description?: string; +}; + +/** + * Props for the SelectionDialog component + */ +export interface SelectionDialogProps { + /** + * The title of the dialog + */ + title: string; + + /** + * The items to select from + */ + items: SelectionItem[]; + + /** + * Whether the dialog is open + */ + isOpen: boolean; + + /** + * Callback when the dialog is closed + */ + onClose: () => void; + + /** + * Callback when the confirm button is clicked with selected item IDs + */ + onConfirm: (selectedIds: string[]) => void; + + /** + * The text for the confirm button + */ + confirmLabel?: string; + + /** + * The maximum height of the selection list + */ + maxHeight?: string; +} + +/** + * A reusable selection dialog component that uses the Dialog component + */ +export function SelectionDialog({ + title, + items, + isOpen, + onClose, + onConfirm, + confirmLabel = 'Confirm', + maxHeight = '60vh', +}: SelectionDialogProps) { + const [selectedItems, setSelectedItems] = useState([]); + const [selectAll, setSelectAll] = useState(false); + + // Reset selected items when dialog opens + useEffect(() => { + if (isOpen) { + setSelectedItems([]); + setSelectAll(false); + } + }, [isOpen]); + + const handleToggleItem = (id: string) => { + setSelectedItems((prev) => (prev.includes(id) ? prev.filter((itemId) => itemId !== id) : [...prev, id])); + }; + + const handleSelectAll = () => { + if (selectedItems.length === items.length) { + setSelectedItems([]); + setSelectAll(false); + } else { + setSelectedItems(items.map((item) => item.id)); + setSelectAll(true); + } + }; + + const handleConfirm = () => { + onConfirm(selectedItems); + onClose(); + }; + + // Calculate the height for the virtualized list + const listHeight = Math.min( + items.length * 60, + parseInt(maxHeight.replace('vh', '')) * window.innerHeight * 0.01 - 40, + ); + + // Render each item in the virtualized list + const ItemRenderer = ({ index, style }: { index: number; style: React.CSSProperties }) => { + const item = items[index]; + return ( +
+ handleToggleItem(item.id)} + /> +
+ + {item.description &&

{item.description}

} +
+
+ ); + }; + + return ( + + +
+ {title} + + Select the items you want to include and click{' '} + {confirmLabel}. + + +
+
+ + {selectedItems.length} of {items.length} selected + + +
+ +
+ {items.length > 0 ? ( + + {ItemRenderer} + + ) : ( +
No items to display
+ )} +
+
+ +
+ + +
+
+
+
+ ); +} diff --git a/app/lib/hooks/useDataOperations.ts b/app/lib/hooks/useDataOperations.ts new file mode 100644 index 00000000..46cb6312 --- /dev/null +++ b/app/lib/hooks/useDataOperations.ts @@ -0,0 +1,966 @@ +import { useState, useCallback } from 'react'; +import { toast } from 'react-toastify'; +import { ImportExportService } from '~/lib/services/importExportService'; +import { useIndexedDB } from '~/lib/hooks/useIndexedDB'; +import { generateId } from 'ai'; + +interface UseDataOperationsProps { + /** + * Callback to reload settings after import + */ + onReloadSettings?: () => void; + + /** + * Callback to reload chats after import + */ + onReloadChats?: () => void; + + /** + * Callback to reset settings to defaults + */ + onResetSettings?: () => void; + + /** + * Callback to reset chats + */ + onResetChats?: () => void; + + /** + * Custom database instance (optional) + */ + customDb?: IDBDatabase; +} + +/** + * Hook for managing data operations in the DataTab + */ +export function useDataOperations({ + onReloadSettings, + onReloadChats, + onResetSettings, + onResetChats, + customDb, +}: UseDataOperationsProps = {}) { + const { db: defaultDb } = useIndexedDB(); + + // Use the custom database if provided, otherwise use the default + const db = customDb || defaultDb; + const [isExporting, setIsExporting] = useState(false); + const [isImporting, setIsImporting] = useState(false); + const [isResetting, setIsResetting] = useState(false); + const [isDownloadingTemplate, setIsDownloadingTemplate] = useState(false); + const [progressMessage, setProgressMessage] = useState(''); + const [progressPercent, setProgressPercent] = useState(0); + const [lastOperation, setLastOperation] = useState<{ type: string; data: any } | null>(null); + + /** + * Show progress toast with percentage + */ + const showProgress = useCallback((message: string, percent: number) => { + setProgressMessage(message); + setProgressPercent(percent); + toast.loading(`${message} (${percent}%)`, { toastId: 'operation-progress' }); + }, []); + + /** + * Export all settings to a JSON file + */ + const handleExportSettings = useCallback(async () => { + setIsExporting(true); + setProgressPercent(0); + toast.loading('Preparing settings export...', { toastId: 'operation-progress' }); + + try { + // Step 1: Export settings + showProgress('Exporting settings', 25); + + const settingsData = await ImportExportService.exportSettings(); + + // Step 2: Create blob + showProgress('Creating file', 50); + + const blob = new Blob([JSON.stringify(settingsData, null, 2)], { + type: 'application/json', + }); + + // Step 3: Download file + showProgress('Downloading file', 75); + + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = 'bolt-settings.json'; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); + + // Step 4: Complete + showProgress('Completing export', 100); + toast.success('Settings exported successfully', { toastId: 'operation-progress' }); + + // Save operation for potential undo + setLastOperation({ type: 'export-settings', data: settingsData }); + } catch (error) { + console.error('Error exporting settings:', error); + toast.error(`Failed to export settings: ${error instanceof Error ? error.message : 'Unknown error'}`, { + toastId: 'operation-progress', + }); + } finally { + setIsExporting(false); + setProgressPercent(0); + setProgressMessage(''); + } + }, [showProgress]); + + /** + * Export selected settings categories to a JSON file + * @param categoryIds Array of category IDs to export + */ + const handleExportSelectedSettings = useCallback( + async (categoryIds: string[]) => { + if (!categoryIds || categoryIds.length === 0) { + toast.error('No settings categories selected'); + return; + } + + setIsExporting(true); + setProgressPercent(0); + toast.loading(`Preparing export of ${categoryIds.length} settings categories...`, { + toastId: 'operation-progress', + }); + + try { + // Step 1: Export all settings + showProgress('Exporting settings', 20); + + const allSettings = await ImportExportService.exportSettings(); + + // Step 2: Filter settings by category + showProgress('Filtering selected categories', 40); + + const filteredSettings: Record = { + exportDate: allSettings.exportDate, + }; + + // Add selected categories to filtered settings + categoryIds.forEach((category) => { + if (allSettings[category]) { + filteredSettings[category] = allSettings[category]; + } + }); + + // Step 3: Create blob + showProgress('Creating file', 60); + + const blob = new Blob([JSON.stringify(filteredSettings, null, 2)], { + type: 'application/json', + }); + + // Step 4: Download file + showProgress('Downloading file', 80); + + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = 'bolt-settings-selected.json'; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); + + // Step 5: Complete + showProgress('Completing export', 100); + toast.success(`${categoryIds.length} settings categories exported successfully`, { + toastId: 'operation-progress', + }); + + // Save operation for potential undo + setLastOperation({ type: 'export-selected-settings', data: { categoryIds, settings: filteredSettings } }); + } catch (error) { + console.error('Error exporting selected settings:', error); + toast.error(`Failed to export selected settings: ${error instanceof Error ? error.message : 'Unknown error'}`, { + toastId: 'operation-progress', + }); + } finally { + setIsExporting(false); + setProgressPercent(0); + setProgressMessage(''); + } + }, + [showProgress], + ); + + /** + * Export all chats to a JSON file + */ + const handleExportAllChats = useCallback(async () => { + if (!db) { + toast.error('Database not available'); + return; + } + + console.log('Export: Using database', { + name: db.name, + version: db.version, + objectStoreNames: Array.from(db.objectStoreNames), + }); + + setIsExporting(true); + setProgressPercent(0); + toast.loading('Preparing chats export...', { toastId: 'operation-progress' }); + + try { + // Step 1: Export chats + showProgress('Retrieving chats from database', 25); + + console.log('Database details:', { + name: db.name, + version: db.version, + objectStoreNames: Array.from(db.objectStoreNames), + }); + + // Direct database query approach for more reliable access + const directChats = await new Promise((resolve, reject) => { + try { + console.log(`Creating transaction on '${db.name}' database, objectStore 'chats'`); + + const transaction = db.transaction(['chats'], 'readonly'); + const store = transaction.objectStore('chats'); + const request = store.getAll(); + + request.onsuccess = () => { + console.log(`Found ${request.result ? request.result.length : 0} chats directly from database`); + resolve(request.result || []); + }; + + request.onerror = () => { + console.error('Error querying chats store:', request.error); + reject(request.error); + }; + } catch (err) { + console.error('Error creating transaction:', err); + reject(err); + } + }); + + // Export data with direct chats + const exportData = { + chats: directChats, + exportDate: new Date().toISOString(), + }; + + // Step 2: Create blob + showProgress('Creating file', 50); + + const blob = new Blob([JSON.stringify(exportData, null, 2)], { + type: 'application/json', + }); + + // Step 3: Download file + showProgress('Downloading file', 75); + + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = 'bolt-chats.json'; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); + + // Step 4: Complete + showProgress('Completing export', 100); + toast.success(`${exportData.chats.length} chats exported successfully`, { toastId: 'operation-progress' }); + + // Save operation for potential undo + setLastOperation({ type: 'export-all-chats', data: exportData }); + } catch (error) { + console.error('Error exporting chats:', error); + toast.error(`Failed to export chats: ${error instanceof Error ? error.message : 'Unknown error'}`, { + toastId: 'operation-progress', + }); + } finally { + setIsExporting(false); + setProgressPercent(0); + setProgressMessage(''); + } + }, [db, showProgress]); + + /** + * Export selected chats to a JSON file + * @param chatIds Array of chat IDs to export + */ + const handleExportSelectedChats = useCallback( + async (chatIds: string[]) => { + if (!db) { + toast.error('Database not available'); + return; + } + + if (!chatIds || chatIds.length === 0) { + toast.error('No chats selected'); + return; + } + + setIsExporting(true); + setProgressPercent(0); + toast.loading(`Preparing export of ${chatIds.length} chats...`, { toastId: 'operation-progress' }); + + try { + // Step 1: Directly query each selected chat from database + showProgress('Retrieving selected chats from database', 20); + + console.log('Database details for selected chats:', { + name: db.name, + version: db.version, + objectStoreNames: Array.from(db.objectStoreNames), + }); + + // Query each chat directly from the database + const selectedChats = await Promise.all( + chatIds.map(async (chatId) => { + return new Promise((resolve, reject) => { + try { + const transaction = db.transaction(['chats'], 'readonly'); + const store = transaction.objectStore('chats'); + const request = store.get(chatId); + + request.onsuccess = () => { + if (request.result) { + console.log(`Found chat with ID ${chatId}:`, { + id: request.result.id, + messageCount: request.result.messages?.length || 0, + }); + } else { + console.log(`Chat with ID ${chatId} not found`); + } + + resolve(request.result || null); + }; + + request.onerror = () => { + console.error(`Error retrieving chat ${chatId}:`, request.error); + reject(request.error); + }; + } catch (err) { + console.error(`Error in transaction for chat ${chatId}:`, err); + reject(err); + } + }); + }), + ); + + // Filter out any null results (chats that weren't found) + const filteredChats = selectedChats.filter((chat) => chat !== null); + + console.log(`Found ${filteredChats.length} selected chats out of ${chatIds.length} requested`); + + // Step 2: Prepare export data + showProgress('Preparing export data', 40); + + const exportData = { + chats: filteredChats, + exportDate: new Date().toISOString(), + }; + + // Step 3: Create blob + showProgress('Creating file', 60); + + const blob = new Blob([JSON.stringify(exportData, null, 2)], { + type: 'application/json', + }); + + // Step 4: Download file + showProgress('Downloading file', 80); + + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = 'bolt-chats-selected.json'; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); + + // Step 5: Complete + showProgress('Completing export', 100); + toast.success(`${filteredChats.length} chats exported successfully`, { toastId: 'operation-progress' }); + + // Save operation for potential undo + setLastOperation({ type: 'export-selected-chats', data: { chatIds, chats: filteredChats } }); + } catch (error) { + console.error('Error exporting selected chats:', error); + toast.error(`Failed to export selected chats: ${error instanceof Error ? error.message : 'Unknown error'}`, { + toastId: 'operation-progress', + }); + } finally { + setIsExporting(false); + setProgressPercent(0); + setProgressMessage(''); + } + }, + [db, showProgress], + ); + + /** + * Import settings from a JSON file + * @param file The file to import + */ + const handleImportSettings = useCallback( + async (file: File) => { + setIsImporting(true); + setProgressPercent(0); + toast.loading(`Importing settings from ${file.name}...`, { toastId: 'operation-progress' }); + + try { + // Step 1: Read file + showProgress('Reading file', 20); + + const fileContent = await file.text(); + + // Step 2: Parse JSON + showProgress('Parsing settings data', 40); + + const importedData = JSON.parse(fileContent); + + // Step 3: Validate data + showProgress('Validating settings data', 60); + + // Save current settings for potential undo + const currentSettings = await ImportExportService.exportSettings(); + setLastOperation({ type: 'import-settings', data: { previous: currentSettings } }); + + // Step 4: Import settings + showProgress('Applying settings', 80); + await ImportExportService.importSettings(importedData); + + // Step 5: Complete + showProgress('Completing import', 100); + toast.success('Settings imported successfully', { toastId: 'operation-progress' }); + + if (onReloadSettings) { + onReloadSettings(); + } + } catch (error) { + console.error('Error importing settings:', error); + toast.error(`Failed to import settings: ${error instanceof Error ? error.message : 'Unknown error'}`, { + toastId: 'operation-progress', + }); + } finally { + setIsImporting(false); + setProgressPercent(0); + setProgressMessage(''); + } + }, + [onReloadSettings, showProgress], + ); + + /** + * Import chats from a JSON file + * @param file The file to import + */ + const handleImportChats = useCallback( + async (file: File) => { + if (!db) { + toast.error('Database not available'); + return; + } + + setIsImporting(true); + setProgressPercent(0); + toast.loading(`Importing chats from ${file.name}...`, { toastId: 'operation-progress' }); + + try { + // Step 1: Read file + showProgress('Reading file', 20); + + const fileContent = await file.text(); + + // Step 2: Parse JSON and validate structure + showProgress('Parsing chat data', 40); + + const importedData = JSON.parse(fileContent); + + if (!importedData.chats || !Array.isArray(importedData.chats)) { + throw new Error('Invalid chat data format: missing or invalid chats array'); + } + + // Step 3: Validate each chat object + showProgress('Validating chat data', 60); + + const validatedChats = importedData.chats.map((chat: any) => { + if (!chat.id || !Array.isArray(chat.messages)) { + throw new Error('Invalid chat format: missing required fields'); + } + + // Ensure each message has required fields + const validatedMessages = chat.messages.map((msg: any) => { + if (!msg.role || !msg.content) { + throw new Error('Invalid message format: missing required fields'); + } + + return { + id: msg.id || generateId(), + role: msg.role, + content: msg.content, + name: msg.name, + function_call: msg.function_call, + timestamp: msg.timestamp || Date.now(), + }; + }); + + return { + id: chat.id, + description: chat.description || '', + messages: validatedMessages, + timestamp: chat.timestamp || new Date().toISOString(), + urlId: chat.urlId || null, + metadata: chat.metadata || null, + }; + }); + + // Step 4: Save current chats for potential undo + showProgress('Preparing database transaction', 70); + + const currentChats = await ImportExportService.exportAllChats(db); + setLastOperation({ type: 'import-chats', data: { previous: currentChats } }); + + // Step 5: Import chats + showProgress(`Importing ${validatedChats.length} chats`, 80); + + const transaction = db.transaction(['chats'], 'readwrite'); + const store = transaction.objectStore('chats'); + + let processed = 0; + + for (const chat of validatedChats) { + store.put(chat); + processed++; + + if (processed % 5 === 0 || processed === validatedChats.length) { + showProgress( + `Imported ${processed} of ${validatedChats.length} chats`, + 80 + (processed / validatedChats.length) * 20, + ); + } + } + + await new Promise((resolve, reject) => { + transaction.oncomplete = resolve; + transaction.onerror = reject; + }); + + // Step 6: Complete + showProgress('Completing import', 100); + toast.success(`${validatedChats.length} chats imported successfully`, { toastId: 'operation-progress' }); + + if (onReloadChats) { + onReloadChats(); + } + } catch (error) { + console.error('Error importing chats:', error); + toast.error(`Failed to import chats: ${error instanceof Error ? error.message : 'Unknown error'}`, { + toastId: 'operation-progress', + }); + } finally { + setIsImporting(false); + setProgressPercent(0); + setProgressMessage(''); + } + }, + [db, onReloadChats, showProgress], + ); + + /** + * Import API keys from a JSON file + * @param file The file to import + */ + const handleImportAPIKeys = useCallback( + async (file: File) => { + setIsImporting(true); + setProgressPercent(0); + toast.loading(`Importing API keys from ${file.name}...`, { toastId: 'operation-progress' }); + + try { + // Step 1: Read file + showProgress('Reading file', 20); + + const fileContent = await file.text(); + + // Step 2: Parse JSON + showProgress('Parsing API keys data', 40); + + const importedData = JSON.parse(fileContent); + + // Step 3: Validate data + showProgress('Validating API keys data', 60); + + // Get current API keys from cookies for potential undo + const apiKeysStr = document.cookie.split(';').find((row) => row.trim().startsWith('apiKeys=')); + const currentApiKeys = apiKeysStr ? JSON.parse(decodeURIComponent(apiKeysStr.split('=')[1])) : {}; + setLastOperation({ type: 'import-api-keys', data: { previous: currentApiKeys } }); + + // Step 4: Import API keys + showProgress('Applying API keys', 80); + + const newKeys = ImportExportService.importAPIKeys(importedData); + const apiKeysJson = JSON.stringify(newKeys); + document.cookie = `apiKeys=${apiKeysJson}; path=/; max-age=31536000`; + + // Step 5: Complete + showProgress('Completing import', 100); + + // Count how many keys were imported + const keyCount = Object.keys(newKeys).length; + const newKeyCount = Object.keys(newKeys).filter( + (key) => !currentApiKeys[key] || currentApiKeys[key] !== newKeys[key], + ).length; + + toast.success( + `${keyCount} API keys imported successfully (${newKeyCount} new/updated)\n` + + 'Note: Keys are stored in browser cookies. For server-side usage, add them to your .env.local file.', + { toastId: 'operation-progress', autoClose: 5000 }, + ); + + if (onReloadSettings) { + onReloadSettings(); + } + } catch (error) { + console.error('Error importing API keys:', error); + toast.error(`Failed to import API keys: ${error instanceof Error ? error.message : 'Unknown error'}`, { + toastId: 'operation-progress', + }); + } finally { + setIsImporting(false); + setProgressPercent(0); + setProgressMessage(''); + } + }, + [onReloadSettings, showProgress], + ); + + /** + * Reset all settings to default values + */ + const handleResetSettings = useCallback(async () => { + setIsResetting(true); + setProgressPercent(0); + toast.loading('Resetting settings...', { toastId: 'operation-progress' }); + + try { + if (db) { + // Step 1: Save current settings for potential undo + showProgress('Backing up current settings', 25); + + const currentSettings = await ImportExportService.exportSettings(); + setLastOperation({ type: 'reset-settings', data: { previous: currentSettings } }); + + // Step 2: Reset settings + showProgress('Resetting settings to defaults', 50); + await ImportExportService.resetAllSettings(db); + + // Step 3: Complete + showProgress('Completing reset', 100); + toast.success('Settings reset successfully', { toastId: 'operation-progress' }); + + if (onResetSettings) { + onResetSettings(); + } + } else { + toast.error('Database not available', { toastId: 'operation-progress' }); + } + } catch (error) { + console.error('Error resetting settings:', error); + toast.error(`Failed to reset settings: ${error instanceof Error ? error.message : 'Unknown error'}`, { + toastId: 'operation-progress', + }); + } finally { + setIsResetting(false); + setProgressPercent(0); + setProgressMessage(''); + } + }, [db, onResetSettings, showProgress]); + + /** + * Reset all chats + */ + const handleResetChats = useCallback(async () => { + if (!db) { + toast.error('Database not available'); + return; + } + + setIsResetting(true); + setProgressPercent(0); + toast.loading('Deleting all chats...', { toastId: 'operation-progress' }); + + try { + // Step 1: Save current chats for potential undo + showProgress('Backing up current chats', 25); + + const currentChats = await ImportExportService.exportAllChats(db); + setLastOperation({ type: 'reset-chats', data: { previous: currentChats } }); + + // Step 2: Delete chats + showProgress('Deleting chats from database', 50); + await ImportExportService.deleteAllChats(db); + + // Step 3: Complete + showProgress('Completing deletion', 100); + toast.success('All chats deleted successfully', { toastId: 'operation-progress' }); + + if (onResetChats) { + onResetChats(); + } + } catch (error) { + console.error('Error resetting chats:', error); + toast.error(`Failed to delete chats: ${error instanceof Error ? error.message : 'Unknown error'}`, { + toastId: 'operation-progress', + }); + } finally { + setIsResetting(false); + setProgressPercent(0); + setProgressMessage(''); + } + }, [db, onResetChats, showProgress]); + + /** + * Download API keys template + */ + const handleDownloadTemplate = useCallback(async () => { + setIsDownloadingTemplate(true); + setProgressPercent(0); + toast.loading('Preparing API keys template...', { toastId: 'operation-progress' }); + + try { + // Step 1: Create template + showProgress('Creating template', 50); + + const templateData = ImportExportService.createAPIKeysTemplate(); + + // Step 2: Download file + showProgress('Downloading template', 75); + + const blob = new Blob([JSON.stringify(templateData, null, 2)], { + type: 'application/json', + }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = 'bolt-api-keys-template.json'; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); + + // Step 3: Complete + showProgress('Completing download', 100); + toast.success('API keys template downloaded successfully', { toastId: 'operation-progress' }); + } catch (error) { + console.error('Error downloading template:', error); + toast.error(`Failed to download template: ${error instanceof Error ? error.message : 'Unknown error'}`, { + toastId: 'operation-progress', + }); + } finally { + setIsDownloadingTemplate(false); + setProgressPercent(0); + setProgressMessage(''); + } + }, [showProgress]); + + /** + * Export API keys to a JSON file + */ + const handleExportAPIKeys = useCallback(async () => { + setIsExporting(true); + setProgressPercent(0); + toast.loading('Preparing API keys export...', { toastId: 'operation-progress' }); + + try { + // Step 1: Get API keys from all sources + showProgress('Retrieving API keys', 25); + + // Create a fetch request to get API keys from server + const response = await fetch('/api/export-api-keys'); + + if (!response.ok) { + throw new Error('Failed to retrieve API keys from server'); + } + + const apiKeys = await response.json(); + + // Step 2: Create blob + showProgress('Creating file', 50); + + const blob = new Blob([JSON.stringify(apiKeys, null, 2)], { + type: 'application/json', + }); + + // Step 3: Download file + showProgress('Downloading file', 75); + + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = 'bolt-api-keys.json'; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); + + // Step 4: Complete + showProgress('Completing export', 100); + toast.success('API keys exported successfully', { toastId: 'operation-progress' }); + + // Save operation for potential undo + setLastOperation({ type: 'export-api-keys', data: apiKeys }); + } catch (error) { + console.error('Error exporting API keys:', error); + toast.error(`Failed to export API keys: ${error instanceof Error ? error.message : 'Unknown error'}`, { + toastId: 'operation-progress', + }); + } finally { + setIsExporting(false); + setProgressPercent(0); + setProgressMessage(''); + } + }, [showProgress]); + + /** + * Undo the last operation if possible + */ + const handleUndo = useCallback(async () => { + if (!lastOperation || !db) { + toast.error('Nothing to undo'); + return; + } + + toast.loading('Attempting to undo last operation...', { toastId: 'operation-progress' }); + + try { + switch (lastOperation.type) { + case 'import-settings': { + // Restore previous settings + await ImportExportService.importSettings(lastOperation.data.previous); + toast.success('Settings import undone', { toastId: 'operation-progress' }); + + if (onReloadSettings) { + onReloadSettings(); + } + + break; + } + + case 'import-chats': { + // Delete imported chats and restore previous state + await ImportExportService.deleteAllChats(db); + + // Reimport previous chats + const transaction = db.transaction(['chats'], 'readwrite'); + const store = transaction.objectStore('chats'); + + for (const chat of lastOperation.data.previous.chats) { + store.put(chat); + } + + await new Promise((resolve, reject) => { + transaction.oncomplete = resolve; + transaction.onerror = reject; + }); + + toast.success('Chats import undone', { toastId: 'operation-progress' }); + + if (onReloadChats) { + onReloadChats(); + } + + break; + } + + case 'reset-settings': { + // Restore previous settings + await ImportExportService.importSettings(lastOperation.data.previous); + toast.success('Settings reset undone', { toastId: 'operation-progress' }); + + if (onReloadSettings) { + onReloadSettings(); + } + + break; + } + + case 'reset-chats': { + // Restore previous chats + const chatTransaction = db.transaction(['chats'], 'readwrite'); + const chatStore = chatTransaction.objectStore('chats'); + + for (const chat of lastOperation.data.previous.chats) { + chatStore.put(chat); + } + + await new Promise((resolve, reject) => { + chatTransaction.oncomplete = resolve; + chatTransaction.onerror = reject; + }); + + toast.success('Chats deletion undone', { toastId: 'operation-progress' }); + + if (onReloadChats) { + onReloadChats(); + } + + break; + } + + case 'import-api-keys': { + // Restore previous API keys + const previousAPIKeys = lastOperation.data.previous; + const newKeys = ImportExportService.importAPIKeys(previousAPIKeys); + const apiKeysJson = JSON.stringify(newKeys); + document.cookie = `apiKeys=${apiKeysJson}; path=/; max-age=31536000`; + toast.success('API keys import undone', { toastId: 'operation-progress' }); + + if (onReloadSettings) { + onReloadSettings(); + } + + break; + } + + default: + toast.error('Cannot undo this operation', { toastId: 'operation-progress' }); + } + + // Clear the last operation after undoing + setLastOperation(null); + } catch (error) { + console.error('Error undoing operation:', error); + toast.error(`Failed to undo: ${error instanceof Error ? error.message : 'Unknown error'}`, { + toastId: 'operation-progress', + }); + } + }, [lastOperation, db, onReloadSettings, onReloadChats]); + + return { + isExporting, + isImporting, + isResetting, + isDownloadingTemplate, + progressMessage, + progressPercent, + lastOperation, + handleExportSettings, + handleExportSelectedSettings, + handleExportAllChats, + handleExportSelectedChats, + handleImportSettings, + handleImportChats, + handleImportAPIKeys, + handleResetSettings, + handleResetChats, + handleDownloadTemplate, + handleExportAPIKeys, + handleUndo, + }; +} diff --git a/app/lib/hooks/useIndexedDB.ts b/app/lib/hooks/useIndexedDB.ts new file mode 100644 index 00000000..d3ac41de --- /dev/null +++ b/app/lib/hooks/useIndexedDB.ts @@ -0,0 +1,58 @@ +import { useState, useEffect } from 'react'; + +/** + * Hook to initialize and provide access to the IndexedDB database + */ +export function useIndexedDB() { + const [db, setDb] = useState(null); + const [isLoading, setIsLoading] = useState(true); + const [error, setError] = useState(null); + + useEffect(() => { + const initDB = async () => { + try { + setIsLoading(true); + + const request = indexedDB.open('boltDB', 1); + + request.onupgradeneeded = (event) => { + const db = (event.target as IDBOpenDBRequest).result; + + // Create object stores if they don't exist + if (!db.objectStoreNames.contains('chats')) { + const chatStore = db.createObjectStore('chats', { keyPath: 'id' }); + chatStore.createIndex('updatedAt', 'updatedAt', { unique: false }); + } + + if (!db.objectStoreNames.contains('settings')) { + db.createObjectStore('settings', { keyPath: 'key' }); + } + }; + + request.onsuccess = (event) => { + const database = (event.target as IDBOpenDBRequest).result; + setDb(database); + setIsLoading(false); + }; + + request.onerror = (event) => { + setError(new Error(`Database error: ${(event.target as IDBOpenDBRequest).error?.message}`)); + setIsLoading(false); + }; + } catch (err) { + setError(err instanceof Error ? err : new Error('Unknown error initializing database')); + setIsLoading(false); + } + }; + + initDB(); + + return () => { + if (db) { + db.close(); + } + }; + }, []); + + return { db, isLoading, error }; +} diff --git a/app/lib/persistence/chats.ts b/app/lib/persistence/chats.ts new file mode 100644 index 00000000..205b6230 --- /dev/null +++ b/app/lib/persistence/chats.ts @@ -0,0 +1,140 @@ +/** + * Functions for managing chat data in IndexedDB + */ + +import type { Message } from 'ai'; +import type { IChatMetadata } from './db'; // Import IChatMetadata + +export interface ChatMessage { + id: string; + role: 'user' | 'assistant' | 'system'; + content: string; + timestamp: number; +} + +export interface Chat { + id: string; + description?: string; + messages: Message[]; + timestamp: string; + urlId?: string; + metadata?: IChatMetadata; +} + +/** + * Get all chats from the database + * @param db The IndexedDB database instance + * @returns A promise that resolves to an array of chats + */ +export async function getAllChats(db: IDBDatabase): Promise { + console.log(`getAllChats: Using database '${db.name}', version ${db.version}`); + + return new Promise((resolve, reject) => { + try { + const transaction = db.transaction(['chats'], 'readonly'); + const store = transaction.objectStore('chats'); + const request = store.getAll(); + + request.onsuccess = () => { + const result = request.result || []; + console.log(`getAllChats: Found ${result.length} chats in database '${db.name}'`); + resolve(result); + }; + + request.onerror = () => { + console.error(`getAllChats: Error querying database '${db.name}':`, request.error); + reject(request.error); + }; + } catch (err) { + console.error(`getAllChats: Error creating transaction on database '${db.name}':`, err); + reject(err); + } + }); +} + +/** + * Get a chat by ID + * @param db The IndexedDB database instance + * @param id The ID of the chat to get + * @returns A promise that resolves to the chat or null if not found + */ +export async function getChatById(db: IDBDatabase, id: string): Promise { + return new Promise((resolve, reject) => { + const transaction = db.transaction(['chats'], 'readonly'); + const store = transaction.objectStore('chats'); + const request = store.get(id); + + request.onsuccess = () => { + resolve(request.result || null); + }; + + request.onerror = () => { + reject(request.error); + }; + }); +} + +/** + * Save a chat to the database + * @param db The IndexedDB database instance + * @param chat The chat to save + * @returns A promise that resolves when the chat is saved + */ +export async function saveChat(db: IDBDatabase, chat: Chat): Promise { + return new Promise((resolve, reject) => { + const transaction = db.transaction(['chats'], 'readwrite'); + const store = transaction.objectStore('chats'); + const request = store.put(chat); + + request.onsuccess = () => { + resolve(); + }; + + request.onerror = () => { + reject(request.error); + }; + }); +} + +/** + * Delete a chat by ID + * @param db The IndexedDB database instance + * @param id The ID of the chat to delete + * @returns A promise that resolves when the chat is deleted + */ +export async function deleteChat(db: IDBDatabase, id: string): Promise { + return new Promise((resolve, reject) => { + const transaction = db.transaction(['chats'], 'readwrite'); + const store = transaction.objectStore('chats'); + const request = store.delete(id); + + request.onsuccess = () => { + resolve(); + }; + + request.onerror = () => { + reject(request.error); + }; + }); +} + +/** + * Delete all chats + * @param db The IndexedDB database instance + * @returns A promise that resolves when all chats are deleted + */ +export async function deleteAllChats(db: IDBDatabase): Promise { + return new Promise((resolve, reject) => { + const transaction = db.transaction(['chats'], 'readwrite'); + const store = transaction.objectStore('chats'); + const request = store.clear(); + + request.onsuccess = () => { + resolve(); + }; + + request.onerror = () => { + reject(request.error); + }; + }); +} diff --git a/app/lib/services/importExportService.ts b/app/lib/services/importExportService.ts new file mode 100644 index 00000000..cdebe4e7 --- /dev/null +++ b/app/lib/services/importExportService.ts @@ -0,0 +1,695 @@ +import Cookies from 'js-cookie'; +import { type Message } from 'ai'; +import { getAllChats, deleteChat } from '~/lib/persistence/chats'; + +interface ExtendedMessage extends Message { + name?: string; + function_call?: any; + timestamp?: number; +} + +/** + * Service for handling import and export operations of application data + */ +export class ImportExportService { + /** + * Export all chats to a JSON file + * @param db The IndexedDB database instance + * @returns A promise that resolves to the export data + */ + static async exportAllChats(db: IDBDatabase): Promise<{ chats: any[]; exportDate: string }> { + if (!db) { + throw new Error('Database not initialized'); + } + + try { + // Get all chats from the database using the getAllChats helper + const chats = await getAllChats(db); + + // Validate and sanitize each chat before export + const sanitizedChats = chats.map((chat) => ({ + id: chat.id, + description: chat.description || '', + messages: chat.messages.map((msg: ExtendedMessage) => ({ + id: msg.id, + role: msg.role, + content: msg.content, + name: msg.name, + function_call: msg.function_call, + timestamp: msg.timestamp, + })), + timestamp: chat.timestamp, + urlId: chat.urlId || null, + metadata: chat.metadata || null, + })); + + console.log(`Successfully prepared ${sanitizedChats.length} chats for export`); + + return { + chats: sanitizedChats, + exportDate: new Date().toISOString(), + }; + } catch (error) { + console.error('Error exporting chats:', error); + throw new Error(`Failed to export chats: ${error instanceof Error ? error.message : 'Unknown error'}`); + } + } + + /** + * Export application settings to a JSON file + * @returns A promise that resolves to the settings data + */ + static async exportSettings(): Promise { + try { + // Get all cookies + const allCookies = Cookies.get(); + + // Create a comprehensive settings object + return { + // Core settings + core: { + // User profile and main settings + bolt_user_profile: this._safeGetItem('bolt_user_profile'), + bolt_settings: this._safeGetItem('bolt_settings'), + bolt_profile: this._safeGetItem('bolt_profile'), + theme: this._safeGetItem('theme'), + }, + + // Provider settings (both local and cloud) + providers: { + // Provider configurations from localStorage + provider_settings: this._safeGetItem('provider_settings'), + + // API keys from cookies + apiKeys: allCookies.apiKeys, + + // Selected provider and model + selectedModel: allCookies.selectedModel, + selectedProvider: allCookies.selectedProvider, + + // Provider-specific settings + providers: allCookies.providers, + }, + + // Feature settings + features: { + // Feature flags + viewed_features: this._safeGetItem('bolt_viewed_features'), + developer_mode: this._safeGetItem('bolt_developer_mode'), + + // Context optimization + contextOptimizationEnabled: this._safeGetItem('contextOptimizationEnabled'), + + // Auto-select template + autoSelectTemplate: this._safeGetItem('autoSelectTemplate'), + + // Latest branch + isLatestBranch: this._safeGetItem('isLatestBranch'), + + // Event logs + isEventLogsEnabled: this._safeGetItem('isEventLogsEnabled'), + + // Energy saver settings + energySaverMode: this._safeGetItem('energySaverMode'), + autoEnergySaver: this._safeGetItem('autoEnergySaver'), + }, + + // UI configuration + ui: { + // Tab configuration + bolt_tab_configuration: this._safeGetItem('bolt_tab_configuration'), + tabConfiguration: allCookies.tabConfiguration, + + // Prompt settings + promptId: this._safeGetItem('promptId'), + cachedPrompt: allCookies.cachedPrompt, + }, + + // Connections + connections: { + // Netlify connection + netlify_connection: this._safeGetItem('netlify_connection'), + + // GitHub connections + ...this._getGitHubConnections(allCookies), + }, + + // Debug and logs + debug: { + // Debug settings + isDebugEnabled: allCookies.isDebugEnabled, + acknowledged_debug_issues: this._safeGetItem('bolt_acknowledged_debug_issues'), + acknowledged_connection_issue: this._safeGetItem('bolt_acknowledged_connection_issue'), + + // Error logs + error_logs: this._safeGetItem('error_logs'), + bolt_read_logs: this._safeGetItem('bolt_read_logs'), + + // Event logs + eventLogs: allCookies.eventLogs, + }, + + // Update settings + updates: { + update_settings: this._safeGetItem('update_settings'), + last_acknowledged_update: this._safeGetItem('bolt_last_acknowledged_version'), + }, + + // Chat snapshots (for chat history) + chatSnapshots: this._getChatSnapshots(), + + // Raw data (for debugging and complete backup) + _raw: { + localStorage: this._getAllLocalStorage(), + cookies: allCookies, + }, + + // Export metadata + _meta: { + exportDate: new Date().toISOString(), + version: '2.0', + appVersion: process.env.NEXT_PUBLIC_VERSION || 'unknown', + }, + }; + } catch (error) { + console.error('Error exporting settings:', error); + throw error; + } + } + + /** + * Import settings from a JSON file + * @param importedData The imported data + */ + static async importSettings(importedData: any): Promise { + // Check if this is the new comprehensive format (v2.0) + const isNewFormat = importedData._meta?.version === '2.0'; + + if (isNewFormat) { + // Import using the new comprehensive format + await this._importComprehensiveFormat(importedData); + } else { + // Try to handle older formats + await this._importLegacyFormat(importedData); + } + } + + /** + * Import API keys from a JSON file + * @param keys The API keys to import + */ + static importAPIKeys(keys: Record): Record { + // Get existing keys from cookies + const existingKeys = (() => { + const storedApiKeys = Cookies.get('apiKeys'); + return storedApiKeys ? JSON.parse(storedApiKeys) : {}; + })(); + + // Validate and save each key + const newKeys = { ...existingKeys }; + Object.entries(keys).forEach(([key, value]) => { + // Skip comment fields + if (key.startsWith('_')) { + return; + } + + // Skip base URL fields (they should be set in .env.local) + if (key.includes('_API_BASE_URL')) { + return; + } + + if (typeof value !== 'string') { + throw new Error(`Invalid value for key: ${key}`); + } + + // Handle both old and new template formats + let normalizedKey = key; + + // Check if this is the old format (e.g., "Anthropic_API_KEY") + if (key.includes('_API_KEY')) { + // Extract the provider name from the old format + normalizedKey = key.replace('_API_KEY', ''); + } + + /* + * Only add non-empty keys + * Use the normalized key in the correct format + * (e.g., "OpenAI", "Google", "Anthropic") + */ + if (value) { + newKeys[normalizedKey] = value; + } + }); + + return newKeys; + } + + /** + * Create an API keys template + * @returns The API keys template + */ + static createAPIKeysTemplate(): Record { + /* + * Create a template with provider names as keys + * This matches how the application stores API keys in cookies + */ + const template = { + Anthropic: '', + OpenAI: '', + Google: '', + Groq: '', + HuggingFace: '', + OpenRouter: '', + Deepseek: '', + Mistral: '', + OpenAILike: '', + Together: '', + xAI: '', + Perplexity: '', + Cohere: '', + AzureOpenAI: '', + }; + + // Add a comment to explain the format + return { + _comment: + "Fill in your API keys for each provider. Keys will be stored with the provider name (e.g., 'OpenAI'). The application also supports the older format with keys like 'OpenAI_API_KEY' for backward compatibility.", + ...template, + }; + } + + /** + * Reset all settings to default values + * @param db The IndexedDB database instance + */ + static async resetAllSettings(db: IDBDatabase): Promise { + // 1. Clear all localStorage items related to application settings + const localStorageKeysToPreserve: string[] = ['debug_mode']; // Keys to preserve if needed + + // Get all localStorage keys + const allLocalStorageKeys = Object.keys(localStorage); + + // Clear all localStorage items except those to preserve + allLocalStorageKeys.forEach((key) => { + if (!localStorageKeysToPreserve.includes(key)) { + try { + localStorage.removeItem(key); + } catch (err) { + console.error(`Error removing localStorage item ${key}:`, err); + } + } + }); + + // 2. Clear all cookies related to application settings + const cookiesToPreserve: string[] = []; // Cookies to preserve if needed + + // Get all cookies + const allCookies = Cookies.get(); + const cookieKeys = Object.keys(allCookies); + + // Clear all cookies except those to preserve + cookieKeys.forEach((key) => { + if (!cookiesToPreserve.includes(key)) { + try { + Cookies.remove(key); + } catch (err) { + console.error(`Error removing cookie ${key}:`, err); + } + } + }); + + // 3. Clear all data from IndexedDB + if (!db) { + console.warn('Database not initialized, skipping IndexedDB reset'); + } else { + // Get all chats and delete them + const chats = await getAllChats(db); + + const deletePromises = chats.map((chat) => deleteChat(db, chat.id)); + await Promise.all(deletePromises); + } + + // 4. Clear any chat snapshots + const snapshotKeys = Object.keys(localStorage).filter((key) => key.startsWith('snapshot:')); + snapshotKeys.forEach((key) => { + try { + localStorage.removeItem(key); + } catch (err) { + console.error(`Error removing snapshot ${key}:`, err); + } + }); + } + + /** + * Delete all chats from the database + * @param db The IndexedDB database instance + */ + static async deleteAllChats(db: IDBDatabase): Promise { + // Clear chat history from localStorage + localStorage.removeItem('bolt_chat_history'); + + // Clear chats from IndexedDB + if (!db) { + throw new Error('Database not initialized'); + } + + // Get all chats and delete them one by one + const chats = await getAllChats(db); + const deletePromises = chats.map((chat) => deleteChat(db, chat.id)); + await Promise.all(deletePromises); + } + + // Private helper methods + + /** + * Import settings from a comprehensive format + * @param data The imported data + */ + private static async _importComprehensiveFormat(data: any): Promise { + // Import core settings + if (data.core) { + Object.entries(data.core).forEach(([key, value]) => { + if (value !== null && value !== undefined) { + try { + this._safeSetItem(key, value); + } catch (err) { + console.error(`Error importing core setting ${key}:`, err); + } + } + }); + } + + // Import provider settings + if (data.providers) { + // Import provider_settings to localStorage + if (data.providers.provider_settings) { + try { + this._safeSetItem('provider_settings', data.providers.provider_settings); + } catch (err) { + console.error('Error importing provider settings:', err); + } + } + + // Import API keys and other provider cookies + const providerCookies = ['apiKeys', 'selectedModel', 'selectedProvider', 'providers']; + providerCookies.forEach((key) => { + if (data.providers[key]) { + try { + this._safeSetCookie(key, data.providers[key]); + } catch (err) { + console.error(`Error importing provider cookie ${key}:`, err); + } + } + }); + } + + // Import feature settings + if (data.features) { + Object.entries(data.features).forEach(([key, value]) => { + if (value !== null && value !== undefined) { + try { + this._safeSetItem(key, value); + } catch (err) { + console.error(`Error importing feature setting ${key}:`, err); + } + } + }); + } + + // Import UI configuration + if (data.ui) { + // Import localStorage UI settings + if (data.ui.bolt_tab_configuration) { + try { + this._safeSetItem('bolt_tab_configuration', data.ui.bolt_tab_configuration); + } catch (err) { + console.error('Error importing tab configuration:', err); + } + } + + if (data.ui.promptId) { + try { + this._safeSetItem('promptId', data.ui.promptId); + } catch (err) { + console.error('Error importing prompt ID:', err); + } + } + + // Import UI cookies + const uiCookies = ['tabConfiguration', 'cachedPrompt']; + uiCookies.forEach((key) => { + if (data.ui[key]) { + try { + this._safeSetCookie(key, data.ui[key]); + } catch (err) { + console.error(`Error importing UI cookie ${key}:`, err); + } + } + }); + } + + // Import connections + if (data.connections) { + // Import Netlify connection + if (data.connections.netlify_connection) { + try { + this._safeSetItem('netlify_connection', data.connections.netlify_connection); + } catch (err) { + console.error('Error importing Netlify connection:', err); + } + } + + // Import GitHub connections + Object.entries(data.connections).forEach(([key, value]) => { + if (key.startsWith('github_') && value !== null && value !== undefined) { + try { + this._safeSetItem(key, value); + } catch (err) { + console.error(`Error importing GitHub connection ${key}:`, err); + } + } + }); + } + + // Import debug settings + if (data.debug) { + // Import debug localStorage settings + const debugLocalStorageKeys = [ + 'bolt_acknowledged_debug_issues', + 'bolt_acknowledged_connection_issue', + 'error_logs', + 'bolt_read_logs', + ]; + + debugLocalStorageKeys.forEach((key) => { + if (data.debug[key] !== null && data.debug[key] !== undefined) { + try { + this._safeSetItem(key, data.debug[key]); + } catch (err) { + console.error(`Error importing debug setting ${key}:`, err); + } + } + }); + + // Import debug cookies + const debugCookies = ['isDebugEnabled', 'eventLogs']; + debugCookies.forEach((key) => { + if (data.debug[key]) { + try { + this._safeSetCookie(key, data.debug[key]); + } catch (err) { + console.error(`Error importing debug cookie ${key}:`, err); + } + } + }); + } + + // Import update settings + if (data.updates) { + if (data.updates.update_settings) { + try { + this._safeSetItem('update_settings', data.updates.update_settings); + } catch (err) { + console.error('Error importing update settings:', err); + } + } + + if (data.updates.last_acknowledged_update) { + try { + this._safeSetItem('bolt_last_acknowledged_version', data.updates.last_acknowledged_update); + } catch (err) { + console.error('Error importing last acknowledged update:', err); + } + } + } + + // Import chat snapshots + if (data.chatSnapshots) { + Object.entries(data.chatSnapshots).forEach(([key, value]) => { + if (value !== null && value !== undefined) { + try { + this._safeSetItem(key, value); + } catch (err) { + console.error(`Error importing chat snapshot ${key}:`, err); + } + } + }); + } + } + + /** + * Import settings from a legacy format + * @param data The imported data + */ + private static async _importLegacyFormat(data: any): Promise { + /** + * Handle legacy format (v1.0 or earlier) + * This is a simplified version that tries to import whatever is available + */ + + // Try to import settings directly + Object.entries(data).forEach(([key, value]) => { + if (value !== null && value !== undefined) { + // Skip metadata fields + if (key === 'exportDate' || key === 'version' || key === 'appVersion') { + return; + } + + try { + // Try to determine if this should be a cookie or localStorage item + const isCookie = [ + 'apiKeys', + 'selectedModel', + 'selectedProvider', + 'providers', + 'tabConfiguration', + 'cachedPrompt', + 'isDebugEnabled', + 'eventLogs', + ].includes(key); + + if (isCookie) { + this._safeSetCookie(key, value); + } else { + this._safeSetItem(key, value); + } + } catch (err) { + console.error(`Error importing legacy setting ${key}:`, err); + } + } + }); + } + + /** + * Safely get an item from localStorage + * @param key The key to get + * @returns The value or null if not found + */ + private static _safeGetItem(key: string): any { + try { + const item = localStorage.getItem(key); + return item ? JSON.parse(item) : null; + } catch (err) { + console.error(`Error getting localStorage item ${key}:`, err); + return null; + } + } + + /** + * Get all localStorage items + * @returns All localStorage items + */ + private static _getAllLocalStorage(): Record { + const result: Record = {}; + + try { + for (let i = 0; i < localStorage.length; i++) { + const key = localStorage.key(i); + + if (key) { + try { + const value = localStorage.getItem(key); + result[key] = value ? JSON.parse(value) : null; + } catch { + result[key] = null; + } + } + } + } catch (err) { + console.error('Error getting all localStorage items:', err); + } + + return result; + } + + /** + * Get GitHub connections from cookies + * @param _cookies The cookies object + * @returns GitHub connections + */ + private static _getGitHubConnections(_cookies: Record): Record { + const result: Record = {}; + + // Get GitHub connections from localStorage + const localStorageKeys = Object.keys(localStorage).filter((key) => key.startsWith('github_')); + localStorageKeys.forEach((key) => { + try { + const value = localStorage.getItem(key); + result[key] = value ? JSON.parse(value) : null; + } catch (err) { + console.error(`Error getting GitHub connection ${key}:`, err); + result[key] = null; + } + }); + + return result; + } + + /** + * Get chat snapshots from localStorage + * @returns Chat snapshots + */ + private static _getChatSnapshots(): Record { + const result: Record = {}; + + // Get chat snapshots from localStorage + const snapshotKeys = Object.keys(localStorage).filter((key) => key.startsWith('snapshot:')); + snapshotKeys.forEach((key) => { + try { + const value = localStorage.getItem(key); + result[key] = value ? JSON.parse(value) : null; + } catch (err) { + console.error(`Error getting chat snapshot ${key}:`, err); + result[key] = null; + } + }); + + return result; + } + + /** + * Safely set an item in localStorage + * @param key The key to set + * @param value The value to set + */ + private static _safeSetItem(key: string, value: any): void { + try { + localStorage.setItem(key, JSON.stringify(value)); + } catch (err) { + console.error(`Error setting localStorage item ${key}:`, err); + } + } + + /** + * Safely set a cookie + * @param key The key to set + * @param value The value to set + */ + private static _safeSetCookie(key: string, value: any): void { + try { + Cookies.set(key, typeof value === 'string' ? value : JSON.stringify(value), { expires: 365 }); + } catch (err) { + console.error(`Error setting cookie ${key}:`, err); + } + } +} diff --git a/app/routes/api.export-api-keys.ts b/app/routes/api.export-api-keys.ts new file mode 100644 index 00000000..aa8ee1f7 --- /dev/null +++ b/app/routes/api.export-api-keys.ts @@ -0,0 +1,44 @@ +import type { LoaderFunction } from '@remix-run/cloudflare'; +import { LLMManager } from '~/lib/modules/llm/manager'; +import { getApiKeysFromCookie } from '~/lib/api/cookies'; + +export const loader: LoaderFunction = async ({ context, request }) => { + // Get API keys from cookie + const cookieHeader = request.headers.get('Cookie'); + const apiKeysFromCookie = getApiKeysFromCookie(cookieHeader); + + // Initialize the LLM manager to access environment variables + const llmManager = LLMManager.getInstance(context?.cloudflare?.env as any); + + // Get all provider instances to find their API token keys + const providers = llmManager.getAllProviders(); + + // Create a comprehensive API keys object + const apiKeys: Record = { ...apiKeysFromCookie }; + + // For each provider, check all possible sources for API keys + for (const provider of providers) { + if (!provider.config.apiTokenKey) { + continue; + } + + const envVarName = provider.config.apiTokenKey; + + // Skip if we already have this provider's key from cookies + if (apiKeys[provider.name]) { + continue; + } + + // Check environment variables in order of precedence + const envValue = + (context?.cloudflare?.env as Record)?.[envVarName] || + process.env[envVarName] || + llmManager.env[envVarName]; + + if (envValue) { + apiKeys[provider.name] = envValue; + } + } + + return Response.json(apiKeys); +}; diff --git a/app/styles/diff-view.css b/app/styles/diff-view.css index e99e8be7..de353ef3 100644 --- a/app/styles/diff-view.css +++ b/app/styles/diff-view.css @@ -69,4 +69,4 @@ .diff-removed { @apply bg-red-500/20 border-l-4 border-red-500; -} \ No newline at end of file +} diff --git a/package.json b/package.json index 39f095a6..4945567c 100644 --- a/package.json +++ b/package.json @@ -79,6 +79,7 @@ "@octokit/types": "^13.6.2", "@openrouter/ai-sdk-provider": "^0.0.5", "@phosphor-icons/react": "^2.1.7", + "@radix-ui/react-checkbox": "^1.1.4", "@radix-ui/react-collapsible": "^1.0.3", "@radix-ui/react-context-menu": "^2.2.2", "@radix-ui/react-dialog": "^1.1.5", @@ -124,6 +125,7 @@ "js-cookie": "^3.0.5", "jspdf": "^2.5.2", "jszip": "^3.10.1", + "lucide-react": "^0.485.0", "mime": "^4.0.4", "nanostores": "^0.10.3", "ollama-ai-provider": "^0.15.2", @@ -139,6 +141,7 @@ "react-markdown": "^9.0.1", "react-resizable-panels": "^2.1.7", "react-toastify": "^10.0.6", + "react-window": "^1.8.11", "rehype-raw": "^7.0.0", "rehype-sanitize": "^6.0.0", "remark-gfm": "^4.0.0", @@ -170,6 +173,7 @@ "@types/path-browserify": "^1.0.3", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", + "@types/react-window": "^1.8.8", "@vitejs/plugin-react": "^4.3.4", "concurrently": "^8.2.2", "cross-env": "^7.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0add4ff5..c29d7f05 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,55 +13,55 @@ importers: dependencies: '@ai-sdk/amazon-bedrock': specifier: 1.0.6 - version: 1.0.6(zod@3.24.1) + version: 1.0.6(zod@3.24.2) '@ai-sdk/anthropic': specifier: ^0.0.39 - version: 0.0.39(zod@3.24.1) + version: 0.0.39(zod@3.24.2) '@ai-sdk/cohere': specifier: ^1.0.3 - version: 1.0.3(zod@3.24.1) + version: 1.2.2(zod@3.24.2) '@ai-sdk/deepseek': specifier: ^0.1.3 - version: 0.1.3(zod@3.24.1) + version: 0.1.17(zod@3.24.2) '@ai-sdk/google': specifier: ^0.0.52 - version: 0.0.52(zod@3.24.1) + version: 0.0.52(zod@3.24.2) '@ai-sdk/mistral': specifier: ^0.0.43 - version: 0.0.43(zod@3.24.1) + version: 0.0.43(zod@3.24.2) '@ai-sdk/openai': specifier: ^1.1.2 - version: 1.1.2(zod@3.24.1) + version: 1.3.4(zod@3.24.2) '@codemirror/autocomplete': specifier: ^6.18.3 - version: 6.18.3(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)(@lezer/common@1.2.3) + version: 6.18.6 '@codemirror/commands': specifier: ^6.7.1 - version: 6.7.1 + version: 6.8.0 '@codemirror/lang-cpp': specifier: ^6.0.2 version: 6.0.2 '@codemirror/lang-css': specifier: ^6.3.1 - version: 6.3.1(@codemirror/view@6.35.0) + version: 6.3.1 '@codemirror/lang-html': specifier: ^6.4.9 version: 6.4.9 '@codemirror/lang-javascript': specifier: ^6.2.2 - version: 6.2.2 + version: 6.2.3 '@codemirror/lang-json': specifier: ^6.0.1 version: 6.0.1 '@codemirror/lang-markdown': specifier: ^6.3.1 - version: 6.3.1 + version: 6.3.2 '@codemirror/lang-python': specifier: ^6.1.6 - version: 6.1.6(@codemirror/view@6.35.0) + version: 6.1.7 '@codemirror/lang-sass': specifier: ^6.0.2 - version: 6.0.2(@codemirror/view@6.35.0) + version: 6.0.2 '@codemirror/lang-vue': specifier: ^0.1.3 version: 0.1.3 @@ -70,22 +70,22 @@ importers: version: 6.0.2 '@codemirror/language': specifier: ^6.10.6 - version: 6.10.6 + version: 6.11.0 '@codemirror/search': specifier: ^6.5.8 - version: 6.5.8 + version: 6.5.10 '@codemirror/state': specifier: ^6.4.1 - version: 6.4.1 + version: 6.5.2 '@codemirror/view': specifier: ^6.35.0 - version: 6.35.0 + version: 6.36.5 '@headlessui/react': specifier: ^2.2.0 version: 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@iconify-json/svg-spinners': specifier: ^1.2.1 - version: 1.2.1 + version: 1.2.2 '@lezer/highlight': specifier: ^1.2.1 version: 1.2.1 @@ -94,73 +94,76 @@ importers: version: 0.7.3(nanostores@0.10.3)(react@18.3.1) '@octokit/rest': specifier: ^21.0.2 - version: 21.0.2 + version: 21.1.1 '@octokit/types': specifier: ^13.6.2 - version: 13.6.2 + version: 13.10.0 '@openrouter/ai-sdk-provider': specifier: ^0.0.5 - version: 0.0.5(zod@3.24.1) + version: 0.0.5(zod@3.24.2) '@phosphor-icons/react': specifier: ^2.1.7 version: 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-checkbox': + specifier: ^1.1.4 + version: 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-collapsible': specifier: ^1.0.3 - version: 1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.3(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-context-menu': specifier: ^2.2.2 - version: 2.2.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.2.6(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-dialog': specifier: ^1.1.5 - version: 1.1.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.6(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-dropdown-menu': specifier: ^2.1.6 - version: 2.1.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.6(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-label': specifier: ^2.1.1 - version: 2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-popover': specifier: ^1.1.5 - version: 1.1.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.6(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-progress': specifier: ^1.0.3 - version: 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-scroll-area': specifier: ^1.2.2 - version: 1.2.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.2.3(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-separator': specifier: ^1.1.0 - version: 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-switch': specifier: ^1.1.1 - version: 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.3(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-tabs': specifier: ^1.1.2 - version: 1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.3(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-tooltip': specifier: ^1.1.4 - version: 1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.1.8(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@remix-run/cloudflare': specifier: ^2.15.2 - version: 2.16.0(@cloudflare/workers-types@4.20241127.0)(typescript@5.7.2) + version: 2.16.3(@cloudflare/workers-types@4.20250327.0)(typescript@5.8.2) '@remix-run/cloudflare-pages': specifier: ^2.15.2 - version: 2.16.0(@cloudflare/workers-types@4.20241127.0)(typescript@5.7.2) + version: 2.16.3(@cloudflare/workers-types@4.20250327.0)(typescript@5.8.2) '@remix-run/node': specifier: ^2.15.2 - version: 2.15.3(typescript@5.7.2) + version: 2.16.3(typescript@5.8.2) '@remix-run/react': specifier: ^2.15.2 - version: 2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2) + version: 2.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.2) '@tanstack/react-virtual': specifier: ^3.13.0 - version: 3.13.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.13.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react-beautiful-dnd': specifier: ^13.1.8 version: 13.1.8 '@uiw/codemirror-theme-vscode': specifier: ^4.23.6 - version: 4.23.6(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0) + version: 4.23.10(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.5) '@unocss/reset': specifier: ^0.61.9 version: 0.61.9 @@ -178,7 +181,7 @@ importers: version: 5.5.0 ai: specifier: ^4.1.2 - version: 4.1.2(react@18.3.1)(zod@3.24.1) + version: 4.2.8(react@18.3.1)(zod@3.24.2) chalk: specifier: ^5.4.1 version: 5.4.1 @@ -202,19 +205,19 @@ importers: version: 16.4.7 electron-log: specifier: ^5.2.3 - version: 5.3.0 + version: 5.3.3 electron-store: specifier: ^10.0.0 version: 10.0.1 electron-updater: specifier: ^6.3.9 - version: 6.3.9 + version: 6.6.2 file-saver: specifier: ^2.0.5 version: 2.0.5 framer-motion: specifier: ^11.12.0 - version: 11.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 11.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) ignore: specifier: ^6.0.2 version: 6.0.2 @@ -223,13 +226,13 @@ importers: version: 4.4.0 isomorphic-git: specifier: ^1.27.2 - version: 1.27.2 + version: 1.30.1 istextorbinary: specifier: ^9.5.0 version: 9.5.0 jose: specifier: ^5.9.6 - version: 5.9.6 + version: 5.10.0 js-cookie: specifier: ^3.0.5 version: 3.0.5 @@ -239,6 +242,9 @@ importers: jszip: specifier: ^3.10.1 version: 3.10.1 + lucide-react: + specifier: ^0.485.0 + version: 0.485.0(react@18.3.1) mime: specifier: ^4.0.4 version: 4.0.6 @@ -247,7 +253,7 @@ importers: version: 0.10.3 ollama-ai-provider: specifier: ^0.15.2 - version: 0.15.2(zod@3.24.1) + version: 0.15.2(zod@3.24.2) path-browserify: specifier: ^1.0.1 version: 1.0.1 @@ -262,7 +268,7 @@ importers: version: 5.3.0(chart.js@4.4.8)(react@18.3.1) react-dnd: specifier: ^16.0.1 - version: 16.0.1(@types/hoist-non-react-statics@3.3.6)(@types/node@22.10.1)(@types/react@18.3.12)(react@18.3.1) + version: 16.0.1(@types/hoist-non-react-statics@3.3.6)(@types/node@22.13.14)(@types/react@18.3.20)(react@18.3.1) react-dnd-html5-backend: specifier: ^16.0.1 version: 16.0.1 @@ -277,13 +283,16 @@ importers: version: 5.5.0(react@18.3.1) react-markdown: specifier: ^9.0.1 - version: 9.0.1(@types/react@18.3.12)(react@18.3.1) + version: 9.1.0(@types/react@18.3.20)(react@18.3.1) react-resizable-panels: specifier: ^2.1.7 version: 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-toastify: specifier: ^10.0.6 version: 10.0.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-window: + specifier: ^1.8.11 + version: 1.8.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rehype-raw: specifier: ^7.0.0 version: 7.0.0 @@ -292,19 +301,19 @@ importers: version: 6.0.0 remark-gfm: specifier: ^4.0.0 - version: 4.0.0 + version: 4.0.1 remix-island: specifier: ^0.2.0 - version: 0.2.0(@remix-run/react@2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2))(@remix-run/server-runtime@2.16.0(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 0.2.0(@remix-run/react@2.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.2))(@remix-run/server-runtime@2.16.3(typescript@5.8.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) remix-utils: specifier: ^7.7.0 - version: 7.7.0(@remix-run/cloudflare@2.16.0(@cloudflare/workers-types@4.20241127.0)(typescript@5.7.2))(@remix-run/node@2.15.3(typescript@5.7.2))(@remix-run/react@2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2))(@remix-run/router@1.23.0)(react@18.3.1)(zod@3.24.1) + version: 7.7.0(@remix-run/cloudflare@2.16.3(@cloudflare/workers-types@4.20250327.0)(typescript@5.8.2))(@remix-run/node@2.16.3(typescript@5.8.2))(@remix-run/react@2.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.2))(@remix-run/router@1.23.0)(react@18.3.1)(zod@3.24.2) rollup-plugin-node-polyfills: specifier: ^0.2.1 version: 0.2.1 shiki: specifier: ^1.24.0 - version: 1.24.0 + version: 1.29.2 tailwind-merge: specifier: ^2.2.1 version: 2.6.0 @@ -313,41 +322,41 @@ importers: version: 5.0.0 vite-plugin-node-polyfills: specifier: ^0.22.0 - version: 0.22.0(rollup@4.28.0)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)) + version: 0.22.0(rollup@4.38.0)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)) zod: specifier: ^3.24.1 - version: 3.24.1 + version: 3.24.2 zustand: specifier: ^5.0.3 - version: 5.0.3(@types/react@18.3.12)(react@18.3.1)(use-sync-external-store@1.2.2(react@18.3.1)) + version: 5.0.3(@types/react@18.3.20)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)) devDependencies: '@blitz/eslint-plugin': specifier: 0.1.0 - version: 0.1.0(@types/eslint@8.56.10)(jiti@1.21.6)(prettier@3.4.1)(typescript@5.7.2) + version: 0.1.0(jiti@1.21.7)(prettier@3.5.3)(typescript@5.8.2) '@cloudflare/workers-types': specifier: ^4.20241127.0 - version: 4.20241127.0 + version: 4.20250327.0 '@electron/notarize': specifier: ^2.5.0 version: 2.5.0 '@iconify-json/ph': specifier: ^1.2.1 - version: 1.2.1 + version: 1.2.2 '@iconify/types': specifier: ^2.0.0 version: 2.0.0 '@remix-run/dev': specifier: ^2.15.2 - version: 2.16.0(@remix-run/react@2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2))(@remix-run/serve@2.16.0(typescript@5.7.2))(@types/node@22.10.1)(sass-embedded@1.81.0)(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0))(wrangler@4.5.1(@cloudflare/workers-types@4.20241127.0)) + version: 2.16.3(@remix-run/react@2.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.2))(@remix-run/serve@2.16.3(typescript@5.8.2))(@types/node@22.13.14)(sass-embedded@1.86.0)(typescript@5.8.2)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0))(wrangler@4.6.0(@cloudflare/workers-types@4.20250327.0)) '@remix-run/serve': specifier: ^2.15.2 - version: 2.16.0(typescript@5.7.2) + version: 2.16.3(typescript@5.8.2) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.6.3 '@testing-library/react': specifier: ^16.2.0 - version: 16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/diff': specifier: ^5.2.3 version: 5.2.3 @@ -368,13 +377,16 @@ importers: version: 1.0.3 '@types/react': specifier: ^18.3.12 - version: 18.3.12 + version: 18.3.20 '@types/react-dom': specifier: ^18.3.1 - version: 18.3.1 + version: 18.3.5(@types/react@18.3.20) + '@types/react-window': + specifier: ^1.8.8 + version: 1.8.8 '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.3.4(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)) + version: 4.3.4(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)) concurrently: specifier: ^8.2.2 version: 8.2.2 @@ -386,13 +398,13 @@ importers: version: 3.12.1 electron: specifier: ^33.2.0 - version: 33.3.2 + version: 33.4.8 electron-builder: specifier: ^25.1.8 version: 25.1.8(electron-builder-squirrel-windows@25.1.8(dmg-builder@25.1.8)) fast-glob: specifier: ^3.3.2 - version: 3.3.2 + version: 3.3.3 husky: specifier: 9.1.7 version: 9.1.7 @@ -407,46 +419,46 @@ importers: version: 3.3.2 pnpm: specifier: ^9.14.4 - version: 9.14.4 + version: 9.15.9 prettier: specifier: ^3.4.1 - version: 3.4.1 + version: 3.5.3 rimraf: specifier: ^4.4.1 version: 4.4.1 sass-embedded: specifier: ^1.81.0 - version: 1.81.0 + version: 1.86.0 stream-browserify: specifier: ^3.0.0 version: 3.0.0 typescript: specifier: ^5.7.2 - version: 5.7.2 + version: 5.8.2 unified: specifier: ^11.0.5 version: 11.0.5 unocss: specifier: ^0.61.9 - version: 0.61.9(postcss@8.4.49)(rollup@4.28.0)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)) + version: 0.61.9(postcss@8.5.3)(rollup@4.38.0)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)) vite: specifier: ^5.4.11 - version: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) + version: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) vite-plugin-copy: specifier: ^0.1.6 version: 0.1.6 vite-plugin-optimize-css-modules: specifier: ^1.1.0 - version: 1.1.0(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)) + version: 1.2.0(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)) vite-tsconfig-paths: specifier: ^4.3.2 - version: 4.3.2(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)) + version: 4.3.2(typescript@5.8.2)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)) vitest: specifier: ^2.1.7 - version: 2.1.8(@types/node@22.10.1)(jsdom@26.0.0)(sass-embedded@1.81.0) + version: 2.1.9(@types/node@22.13.14)(jsdom@26.0.0)(sass-embedded@1.86.0) wrangler: specifier: ^4.5.1 - version: 4.5.1(@cloudflare/workers-types@4.20241127.0) + version: 4.6.0(@cloudflare/workers-types@4.20250327.0) packages: @@ -468,14 +480,14 @@ packages: peerDependencies: zod: ^3.0.0 - '@ai-sdk/cohere@1.0.3': - resolution: {integrity: sha512-SDjPinUcGzTNiSMN+9zs1fuAcP8rU1/+CmDWAGu7eMhwVGDurgiOqscC0Oqs/aLsodLt/sFeOvyqj86DAknpbg==} + '@ai-sdk/cohere@1.2.2': + resolution: {integrity: sha512-vPM3admQ0iT5HIDoCUtD95RqbXY6K1T32sYIZAasLVZ7iAG+SLOXysMVAl+fKMuZMkd2GKeyXepKCCGuaK9QiQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 - '@ai-sdk/deepseek@0.1.3': - resolution: {integrity: sha512-cj0uYgFk0TWWtHKtwB8v17frttquLll9hCpRWtKpiZO69SbiZOwNSjENaoyZvN1sHMLQoQkw+hnbMGtWuU2yOg==} + '@ai-sdk/deepseek@0.1.17': + resolution: {integrity: sha512-UGVPYJSgV8Z4mbEUhqh/uRM2mBUS5VoWA3MUN+gg4xPjh3IvwQwVHAYWNzEhmlTbySIv3DE6x7oTyuS73gHGbg==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 @@ -492,14 +504,14 @@ packages: peerDependencies: zod: ^3.0.0 - '@ai-sdk/openai-compatible@0.1.3': - resolution: {integrity: sha512-3dr81jVNTd7Tg4i6JwGKHX47DnQ+jn3zOuxLvu6bM2hFylchtIFn/ut3Et7VfsdMWf4gj9tXp/9rUiQ0JokkrQ==} + '@ai-sdk/openai-compatible@0.1.17': + resolution: {integrity: sha512-e60+yxQ29e8RlsTWBW4kLuQJMpVJzH5+cpOeUXLXU6M9wc8BOQCyYg4jYh2ldnfvYCKXYxb2kYeLW7L9fqhhMw==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 - '@ai-sdk/openai@1.1.2': - resolution: {integrity: sha512-9rfcwjl4g1/Bdr2SmgFQr+aw81r62MvIKE7QDHMC4ulFd/Hej2oClROSMpDFZHXzs7RGeb32VkRyCHUWWgN3RQ==} + '@ai-sdk/openai@1.3.4': + resolution: {integrity: sha512-BOw7dQpiTlpaqi1u/NU4Or2+jA6buzl6GOUuYyu/uFI7dxJs1zPkY8IjAp4DQhi+kQGH6GGbEPw0LkIbeK4BVA==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 @@ -531,15 +543,6 @@ packages: zod: optional: true - '@ai-sdk/provider-utils@2.0.2': - resolution: {integrity: sha512-IAvhKhdlXqiSmvx/D4uNlFYCl8dWT+M9K+IuEcSgnE2Aj27GWu8sDIpAf4r4Voc+wOUkOECVKQhFo8g9pozdjA==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - peerDependenciesMeta: - zod: - optional: true - '@ai-sdk/provider-utils@2.0.5': resolution: {integrity: sha512-2M7vLhYN0ThGjNlzow7oO/lsL+DyMxvGMIYmVQvEYaCWhDzxH5dOp78VNjJIVwHzVLMbBDigX3rJuzAs853idw==} engines: {node: '>=18'} @@ -549,8 +552,8 @@ packages: zod: optional: true - '@ai-sdk/provider-utils@2.1.2': - resolution: {integrity: sha512-ezpQT6kzy/2O4yyn/2YigMqynBYjZIOam3/EMNVzju+Ogj+Z+pf27c/Th78ce0A2ltgrXx6xN14sal/HHZNOOw==} + '@ai-sdk/provider-utils@2.1.15': + resolution: {integrity: sha512-ndMVtDm2xS86t45CJZSfyl7UblZFewRB8gZkXQHeNi7BhjCYkhE+XQMwfDl6UOAO7kaV60IC1R4JLDWxWiiHug==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 @@ -558,6 +561,12 @@ packages: zod: optional: true + '@ai-sdk/provider-utils@2.2.1': + resolution: {integrity: sha512-BuExLp+NcpwsAVj1F4bgJuQkSqO/+roV9wM7RdIO+NVrcT8RBUTdXzf5arHt5T58VpK7bZyB2V9qigjaPHE+Dg==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.23.8 + '@ai-sdk/provider@0.0.12': resolution: {integrity: sha512-oOwPQD8i2Ynpn22cur4sk26FW3mSy6t6/X/K1Ay2yGBKYiSpRyLfObhOrZEGsXDx+3euKy4nEZ193R36NM+tpQ==} engines: {node: '>=18'} @@ -570,51 +579,49 @@ packages: resolution: {integrity: sha512-XMsNGJdGO+L0cxhhegtqZ8+T6nn4EoShS819OvCgI2kLbYTIvk0GWFGD0AXJmxkxs3DrpsJxKAFukFR7bvTkgQ==} engines: {node: '>=18'} - '@ai-sdk/provider@1.0.1': - resolution: {integrity: sha512-mV+3iNDkzUsZ0pR2jG0sVzU6xtQY5DtSCBy3JFycLp6PwjyLw/iodfL3MwdmMCRJWgs3dadcHejRnMvF9nGTBg==} + '@ai-sdk/provider@1.0.12': + resolution: {integrity: sha512-88Uu1zJIE1UUOVJWfE2ybJXgiH8JJ97QY9fbmplErEbfa/k/1kF+tWMVAAJolF2aOGmazQGyQLhv4I9CCuVACw==} engines: {node: '>=18'} '@ai-sdk/provider@1.0.3': resolution: {integrity: sha512-WiuJEpHTrltOIzv3x2wx4gwksAHW0h6nK3SoDzjqCOJLu/2OJ1yASESTIX+f07ChFykHElVoP80Ol/fe9dw6tQ==} engines: {node: '>=18'} - '@ai-sdk/provider@1.0.6': - resolution: {integrity: sha512-hwj/gFNxpDgEfTaYzCYoslmw01IY9kWLKl/wf8xuPvHtQIzlfXWmmUwc8PnCwxyt8cKzIuV0dfUghCf68HQ0SA==} + '@ai-sdk/provider@1.1.0': + resolution: {integrity: sha512-0M+qjp+clUD0R1E5eWQFhxEvWLNaOtGQRUaBn8CUABnSKredagq92hUS9VjOzGsTm37xLfpaxl97AVtbeOsHew==} engines: {node: '>=18'} - '@ai-sdk/react@1.1.2': - resolution: {integrity: sha512-bBcRsDaNHzCKSIBbPngMeqbnwZ1RFadXQo9XzHoGrvLANYRwuphGNB8XTXYVLC/eXjoaGVGw2wWf/TYigEnCuA==} + '@ai-sdk/react@1.2.3': + resolution: {integrity: sha512-EQ6nmmQBBAal1yg72GB/Q7QnmDXMfgYvCo9Gym2mESXUHTqwpXU0JFHtk5Kq3EEkk7CVMf1oBWlNFNvU5ckQBg==} engines: {node: '>=18'} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc - zod: ^3.0.0 + zod: ^3.23.8 peerDependenciesMeta: - react: - optional: true zod: optional: true - '@ai-sdk/ui-utils@1.1.2': - resolution: {integrity: sha512-+0kfBF4Y9jmlg1KlbNKIxchmXx9PzuReSpgRNWhpU10vfl1eeer4xK/XL2qHnzAWhsMFe/SVZXJIQObk44zNEQ==} + '@ai-sdk/ui-utils@1.2.2': + resolution: {integrity: sha512-6rCx2jSEPuiF6fytfMNscSOinHQZp52aFCHyPVpPPkcWnOur1jPWhol+0TFCUruDl7dCfcSIfTexQUq2ioLwaA==} engines: {node: '>=18'} peerDependencies: - zod: ^3.0.0 - peerDependenciesMeta: - zod: - optional: true + zod: ^3.23.8 '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@antfu/install-pkg@0.4.1': - resolution: {integrity: sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw==} + '@antfu/install-pkg@1.0.0': + resolution: {integrity: sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==} '@antfu/utils@0.7.10': resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} - '@asamuzakjp/css-color@2.8.3': - resolution: {integrity: sha512-GIc76d9UI1hCvOATjZPyHFmE5qhRccp3/zGfMPapK3jBi+yocEzp6BBB0UnfRYP9NP4FANqUZYb0hnfs3TM3hw==} + '@antfu/utils@8.1.1': + resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==} + + '@asamuzakjp/css-color@3.1.1': + resolution: {integrity: sha512-hpRD68SV2OMcZCsrbdkccTw5FXjNDLo5OuqSHyHZfwweGsDWZwDJ2+gONyNAbazZclobMirACLw0lk8WVxIqxA==} '@aws-crypto/crc32@5.2.0': resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} @@ -633,104 +640,92 @@ packages: '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/client-bedrock-runtime@3.716.0': - resolution: {integrity: sha512-ZnolSsCZE4IT4A8nn5sOHq+JiOomEV1+pp1SntHdK1SGu6pP5YMWNfwJwujZFrsKkRB+QpSGj7l0W0lr2B/JBw==} - engines: {node: '>=16.0.0'} + '@aws-sdk/client-bedrock-runtime@3.778.0': + resolution: {integrity: sha512-FCDwxgzx06JE+QotlJY/DHqu2y6MMVQTa+qxhjZHGBsIqEWDr7wy+b/rtOV/pUxoysKyVx+wmvEwj1e0KlTkOg==} + engines: {node: '>=18.0.0'} - '@aws-sdk/client-sso-oidc@3.716.0': - resolution: {integrity: sha512-lA4IB9FzR2KjH7EVCo+mHGFKqdViVyeBQEIX9oVratL/l7P0bMS1fMwgfHOc3ACazqNxBxDES7x08ZCp32y6Lw==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@aws-sdk/client-sts': ^3.716.0 + '@aws-sdk/client-sso@3.777.0': + resolution: {integrity: sha512-0+z6CiAYIQa7s6FJ+dpBYPi9zr9yY5jBg/4/FGcwYbmqWPXwL9Thdtr0FearYRZgKl7bhL3m3dILCCfWqr3teQ==} + engines: {node: '>=18.0.0'} - '@aws-sdk/client-sso@3.716.0': - resolution: {integrity: sha512-5Nb0jJXce2TclbjG7WVPufwhgV1TRydz1QnsuBtKU0AdViEpr787YrZhPpGnNIM1Dx+R1H/tmAHZnOoohS6D8g==} - engines: {node: '>=16.0.0'} + '@aws-sdk/core@3.775.0': + resolution: {integrity: sha512-8vpW4WihVfz0DX+7WnnLGm3GuQER++b0IwQG35JlQMlgqnc44M//KbJPsIHA0aJUJVwJAEShgfr5dUbY8WUzaA==} + engines: {node: '>=18.0.0'} - '@aws-sdk/client-sts@3.716.0': - resolution: {integrity: sha512-i4SVNsrdXudp8T4bkm7Fi3YWlRnvXCSwvNDqf6nLqSJxqr4CN3VlBELueDyjBK7TAt453/qSif+eNx+bHmwo4Q==} - engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-env@3.775.0': + resolution: {integrity: sha512-6ESVxwCbGm7WZ17kY1fjmxQud43vzJFoLd4bmlR+idQSWdqlzGDYdcfzpjDKTcivdtNrVYmFvcH1JBUwCRAZhw==} + engines: {node: '>=18.0.0'} - '@aws-sdk/core@3.716.0': - resolution: {integrity: sha512-5DkUiTrbyzO8/W4g7UFEqRFpuhgizayHI/Zbh0wtFMcot8801nJV+MP/YMhdjimlvAr/OqYB08FbGsPyWppMTw==} - engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-http@3.775.0': + resolution: {integrity: sha512-PjDQeDH/J1S0yWV32wCj2k5liRo0ssXMseCBEkCsD3SqsU8o5cU82b0hMX4sAib/RkglCSZqGO0xMiN0/7ndww==} + engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-env@3.716.0': - resolution: {integrity: sha512-JI2KQUnn2arICwP9F3CnqP1W3nAbm4+meQg/yOhp9X0DMzQiHrHRd4HIrK2vyVgi2/6hGhONY5uLF26yRTA7nQ==} - engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-ini@3.777.0': + resolution: {integrity: sha512-1X9mCuM9JSQPmQ+D2TODt4THy6aJWCNiURkmKmTIPRdno7EIKgAqrr/LLN++K5mBf54DZVKpqcJutXU2jwo01A==} + engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-http@3.716.0': - resolution: {integrity: sha512-CZ04pl2z7igQPysQyH2xKZHM3fLwkemxQbKOlje3TmiS1NwXvcKvERhp9PE/H23kOL7beTM19NMRog/Fka/rlw==} - engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-node@3.777.0': + resolution: {integrity: sha512-ZD66ywx1Q0KyUSuBXZIQzBe3Q7MzX8lNwsrCU43H3Fww+Y+HB3Ncws9grhSdNhKQNeGmZ+MgKybuZYaaeLwJEQ==} + engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-ini@3.716.0': - resolution: {integrity: sha512-P37We2GtZvdROxiwP0zrpEL81/HuYK1qlYxp5VCj3uV+G4mG8UQN2gMIU/baYrpOQqa0h81RfyQGRFUjVaDVqw==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@aws-sdk/client-sts': ^3.716.0 + '@aws-sdk/credential-provider-process@3.775.0': + resolution: {integrity: sha512-A6k68H9rQp+2+7P7SGO90Csw6nrUEm0Qfjpn9Etc4EboZhhCLs9b66umUsTsSBHus4FDIe5JQxfCUyt1wgNogg==} + engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-node@3.716.0': - resolution: {integrity: sha512-FGQPK2uKfS53dVvoskN/s/t6m0Po24BGd1PzJdzHBFCOjxbZLM6+8mDMXeyi2hCLVVQOUcuW41kOgmJ0+zMbww==} - engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-sso@3.777.0': + resolution: {integrity: sha512-9mPz7vk9uE4PBVprfINv4tlTkyq1OonNevx2DiXC1LY4mCUCNN3RdBwAY0BTLzj0uyc3k5KxFFNbn3/8ZDQP7w==} + engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-process@3.716.0': - resolution: {integrity: sha512-0spcu2MWVVHSTHH3WE2E//ttUJPwXRM3BCp+WyI41xLzpNu1Fd8zjOrDpEo0SnGUzsSiRTIJWgkuu/tqv9NJ2A==} - engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-web-identity@3.777.0': + resolution: {integrity: sha512-uGCqr47fnthkqwq5luNl2dksgcpHHjSXz2jUra7TXtFOpqvnhOW8qXjoa1ivlkq8qhqlaZwCzPdbcN0lXpmLzQ==} + engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-sso@3.716.0': - resolution: {integrity: sha512-J2IA3WuCpRGGoZm6VHZVFCnrxXP+41iUWb9Ct/1spljegTa1XjiaZ5Jf3+Ubj7WKiyvP9/dgz1L0bu2bYEjliw==} - engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-host-header@3.775.0': + resolution: {integrity: sha512-tkSegM0Z6WMXpLB8oPys/d+umYIocvO298mGvcMCncpRl77L9XkvSLJIFzaHes+o7djAgIduYw8wKIMStFss2w==} + engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-web-identity@3.716.0': - resolution: {integrity: sha512-vzgpWKs2gGXZGdbMKRFrMW4PqEFWkGvwWH2T7ZwQv9m+8lQ7P4Dk2uimqu0f37HZAbpn8HFMqRh4CaySjU354A==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@aws-sdk/client-sts': ^3.716.0 + '@aws-sdk/middleware-logger@3.775.0': + resolution: {integrity: sha512-FaxO1xom4MAoUJsldmR92nT1G6uZxTdNYOFYtdHfd6N2wcNaTuxgjIvqzg5y7QIH9kn58XX/dzf1iTjgqUStZw==} + engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-host-header@3.714.0': - resolution: {integrity: sha512-6l68kjNrh5QC8FGX3I3geBDavWN5Tg1RLHJ2HLA8ByGBtJyCwnz3hEkKfaxn0bBx0hF9DzbfjEOUF6cDqy2Kjg==} - engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-recursion-detection@3.775.0': + resolution: {integrity: sha512-GLCzC8D0A0YDG5u3F5U03Vb9j5tcOEFhr8oc6PDk0k0vm5VwtZOE6LvK7hcCSoAB4HXyOUM0sQuXrbaAh9OwXA==} + engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-logger@3.714.0': - resolution: {integrity: sha512-RkqHlMvQWUaRklU1bMfUuBvdWwxgUtEqpADaHXlGVj3vtEY2UgBjy+57CveC4MByqKIunNvVHBBbjrGVtwY7Lg==} - engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-user-agent@3.775.0': + resolution: {integrity: sha512-7Lffpr1ptOEDE1ZYH1T78pheEY1YmeXWBfFt/amZ6AGsKSLG+JPXvof3ltporTGR2bhH/eJPo7UHCglIuXfzYg==} + engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-recursion-detection@3.714.0': - resolution: {integrity: sha512-AVU5ixnh93nqtsfgNc284oXsXaadyHGPHpql/jwgaaqQfEXjS/1/j3j9E/vpacfTTz2Vzo7hAOjnvrOXSEVDaA==} - engines: {node: '>=16.0.0'} + '@aws-sdk/nested-clients@3.777.0': + resolution: {integrity: sha512-bmmVRsCjuYlStYPt06hr+f8iEyWg7+AklKCA8ZLDEJujXhXIowgUIqXmqpTkXwkVvDQ9tzU7hxaONjyaQCGybA==} + engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-user-agent@3.716.0': - resolution: {integrity: sha512-FpAtT6nNKrYdkDZndutEraiRMf+TgDzAGvniqRtZ/YTPA+gIsWrsn+TwMKINR81lFC3nQfb9deS5CFtxd021Ew==} - engines: {node: '>=16.0.0'} + '@aws-sdk/region-config-resolver@3.775.0': + resolution: {integrity: sha512-40iH3LJjrQS3LKUJAl7Wj0bln7RFPEvUYKFxtP8a+oKFDO0F65F52xZxIJbPn6sHkxWDAnZlGgdjZXM3p2g5wQ==} + engines: {node: '>=18.0.0'} - '@aws-sdk/region-config-resolver@3.714.0': - resolution: {integrity: sha512-HJzsQxgMOAzZrbf/YIqEx30or4tZK1oNAk6Wm6xecUQx+23JXIaePRu1YFUOLBBERQ4QBPpISFurZWBMZ5ibAw==} - engines: {node: '>=16.0.0'} + '@aws-sdk/token-providers@3.777.0': + resolution: {integrity: sha512-Yc2cDONsHOa4dTSGOev6Ng2QgTKQUEjaUnsyKd13pc/nLLz/WLqHiQ/o7PcnKERJxXGs1g1C6l3sNXiX+kbnFQ==} + engines: {node: '>=18.0.0'} - '@aws-sdk/token-providers@3.714.0': - resolution: {integrity: sha512-vKN064aLE3kl+Zl16Ony3jltHnMddMBT7JRkP1L+lLywhA0PcAKxpdvComul/sTBWnbnwLnaS5NsDUhcWySH8A==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@aws-sdk/client-sso-oidc': ^3.714.0 + '@aws-sdk/types@3.775.0': + resolution: {integrity: sha512-ZoGKwa4C9fC9Av6bdfqcW6Ix5ot05F/S4VxWR2nHuMv7hzfmAjTOcUiWT7UR4hM/U0whf84VhDtXN/DWAk52KA==} + engines: {node: '>=18.0.0'} - '@aws-sdk/types@3.714.0': - resolution: {integrity: sha512-ZjpP2gYbSFlxxaUDa1Il5AVvfggvUPbjzzB/l3q0gIE5Thd6xKW+yzEpt2mLZ5s5UaYSABZbF94g8NUOF4CVGA==} - engines: {node: '>=16.0.0'} + '@aws-sdk/util-endpoints@3.775.0': + resolution: {integrity: sha512-yjWmUgZC9tUxAo8Uaplqmq0eUh0zrbZJdwxGRKdYxfm4RG6fMw1tj52+KkatH7o+mNZvg1GDcVp/INktxonJLw==} + engines: {node: '>=18.0.0'} - '@aws-sdk/util-endpoints@3.714.0': - resolution: {integrity: sha512-Xv+Z2lhe7w7ZZRsgBwBMZgGTVmS+dkkj2S13uNHAx9lhB5ovM8PhK5G/j28xYf6vIibeuHkRAbb7/ozdZIGR+A==} - engines: {node: '>=16.0.0'} + '@aws-sdk/util-locate-window@3.723.0': + resolution: {integrity: sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw==} + engines: {node: '>=18.0.0'} - '@aws-sdk/util-locate-window@3.693.0': - resolution: {integrity: sha512-ttrag6haJLWABhLqtg1Uf+4LgHWIMOVSYL+VYZmAp2v4PUGOwWmWQH0Zk8RM7YuQcLfH/EoR72/Yxz6A4FKcuw==} - engines: {node: '>=16.0.0'} + '@aws-sdk/util-user-agent-browser@3.775.0': + resolution: {integrity: sha512-txw2wkiJmZKVdDbscK7VBK+u+TJnRtlUjRTLei+elZg2ADhpQxfVAQl436FUeIv6AhB/oRHW6/K/EAGXUSWi0A==} - '@aws-sdk/util-user-agent-browser@3.714.0': - resolution: {integrity: sha512-OdJJ03cP9/MgIVToPJPCPUImbpZzTcwdIgbXC0tUQPJhbD7b7cB4LdnkhNHko+MptpOrCq4CPY/33EpOjRdofw==} - - '@aws-sdk/util-user-agent-node@3.716.0': - resolution: {integrity: sha512-3PqaXmQbxrtHKAsPCdp7kn5FrQktj8j3YyuNsqFZ8rWZeEQ88GWlsvE61PTsr2peYCKzpFqYVddef2x1axHU0w==} - engines: {node: '>=16.0.0'} + '@aws-sdk/util-user-agent-node@3.775.0': + resolution: {integrity: sha512-N9yhTevbizTOMo3drH7Eoy6OkJ3iVPxhV7dwb6CMAObbLneS36CSfA6xQXupmHWcRvZPTz8rd1JGG3HzFOau+g==} + engines: {node: '>=18.0.0'} peerDependencies: aws-crt: '>=1.0.0' peerDependenciesMeta: @@ -741,28 +736,28 @@ packages: resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.26.2': - resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==} + '@babel/compat-data@7.26.8': + resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} engines: {node: '>=6.9.0'} - '@babel/core@7.26.0': - resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} + '@babel/core@7.26.10': + resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} engines: {node: '>=6.9.0'} - '@babel/generator@7.26.2': - resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} + '@babel/generator@7.27.0': + resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.25.9': resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.25.9': - resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} + '@babel/helper-compilation-targets@7.27.0': + resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.25.9': - resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} + '@babel/helper-create-class-features-plugin@7.27.0': + resolution: {integrity: sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -785,20 +780,16 @@ packages: resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.25.9': - resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} engines: {node: '>=6.9.0'} - '@babel/helper-replace-supers@7.25.9': - resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} + '@babel/helper-replace-supers@7.26.5': + resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-simple-access@7.25.9': - resolution: {integrity: sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==} - engines: {node: '>=6.9.0'} - '@babel/helper-skip-transparent-expression-wrappers@7.25.9': resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} engines: {node: '>=6.9.0'} @@ -815,12 +806,12 @@ packages: resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.26.0': - resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} + '@babel/helpers@7.27.0': + resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==} engines: {node: '>=6.9.0'} - '@babel/parser@7.26.2': - resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} + '@babel/parser@7.27.0': + resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==} engines: {node: '>=6.0.0'} hasBin: true @@ -842,8 +833,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.25.9': - resolution: {integrity: sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==} + '@babel/plugin-transform-modules-commonjs@7.26.3': + resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -860,40 +851,40 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.25.9': - resolution: {integrity: sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==} + '@babel/plugin-transform-typescript@7.27.0': + resolution: {integrity: sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/preset-typescript@7.26.0': - resolution: {integrity: sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==} + '@babel/preset-typescript@7.27.0': + resolution: {integrity: sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.26.0': - resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} + '@babel/runtime@7.27.0': + resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} engines: {node: '>=6.9.0'} - '@babel/template@7.25.9': - resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + '@babel/template@7.27.0': + resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.25.9': - resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} + '@babel/traverse@7.27.0': + resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} engines: {node: '>=6.9.0'} - '@babel/types@7.26.0': - resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} + '@babel/types@7.27.0': + resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} engines: {node: '>=6.9.0'} '@blitz/eslint-plugin@0.1.0': resolution: {integrity: sha512-mGEAFWCI5AQ4nrePhjp2WzvRen+UWR+SF4MvH70icIBClR08Gm3dT9MRa2jszOpfY00NyIYfm7/1CFZ37GvW4g==} engines: {node: ^18.0.0 || ^20.0.0} - '@bufbuild/protobuf@2.2.2': - resolution: {integrity: sha512-UNtPCbrwrenpmrXuRwn9jYpPoweNXj8X5sMvYgsqYyaH8jQ6LfUJSk3dJLnBK+6sfYPrF4iAIo5sd5HQ+tg75A==} + '@bufbuild/protobuf@2.2.5': + resolution: {integrity: sha512-/g5EzJifw5GF8aren8wZ/G5oMuPoGeS6MQD3ca8ddcvdXR5UELUfdTZITCGNhNXynY/AYl3Z4plmxdj/tRl/hQ==} '@cloudflare/kv-asset-handler@0.1.3': resolution: {integrity: sha512-FNcunDuTmEfQTLRLtA6zz+buIXUHj1soPvSWzzQFBC+n2lsy+CGf/NIrR3SEPCmsVNQj70/Jx2lViCpq+09YpQ==} @@ -941,19 +932,14 @@ packages: cpu: [x64] os: [win32] - '@cloudflare/workers-types@4.20241127.0': - resolution: {integrity: sha512-UqlvtqV8eI0CdPR7nxlbVlE52+lcjHvGdbYXEPwisy23+39RsFV7OOy0da0moJAhqnL2OhDmWTOaKdsVcPHiJQ==} + '@cloudflare/workers-types@4.20250327.0': + resolution: {integrity: sha512-rkoGnSY/GgBLCuhjZMIC3mt0jjqqvL17uOK92OI4eivmE+pMFOAchowDxIWOzDyYe5vwNCakbCeIM/FrSmwGJA==} - '@codemirror/autocomplete@6.18.3': - resolution: {integrity: sha512-1dNIOmiM0z4BIBwxmxEfA1yoxh1MF/6KPBbh20a5vphGV0ictKlgQsbJs6D6SkR6iJpGbpwRsa6PFMNlg9T9pQ==} - peerDependencies: - '@codemirror/language': ^6.0.0 - '@codemirror/state': ^6.0.0 - '@codemirror/view': ^6.0.0 - '@lezer/common': ^1.0.0 + '@codemirror/autocomplete@6.18.6': + resolution: {integrity: sha512-PHHBXFomUs5DF+9tCOM/UoW6XQ4R44lLNNhRaW9PKPTU0D7lIjRg3ElxaJnTwsl/oHiR93WSXDBrekhoUGCPtg==} - '@codemirror/commands@6.7.1': - resolution: {integrity: sha512-llTrboQYw5H4THfhN4U3qCnSZ1SOJ60ohhz+SzU0ADGtwlc533DtklQP0vSFaQuCPDn3BPpOd1GbbnUtwNjsrw==} + '@codemirror/commands@6.8.0': + resolution: {integrity: sha512-q8VPEFaEP4ikSlt6ZxjB3zW72+7osfAYW9i8Zu943uqbKuz6utc1+F170hyLUCUltXORjQXRyYQNfkckzA/bPQ==} '@codemirror/lang-cpp@6.0.2': resolution: {integrity: sha512-6oYEYUKHvrnacXxWxYa6t4puTlbN3dgV662BDfSH8+MfjQjVmP697/KYTDOqpxgerkvoNm7q5wlFMBeX8ZMocg==} @@ -964,17 +950,17 @@ packages: '@codemirror/lang-html@6.4.9': resolution: {integrity: sha512-aQv37pIMSlueybId/2PVSP6NPnmurFDVmZwzc7jszd2KAF8qd4VBbvNYPXWQq90WIARjsdVkPbw29pszmHws3Q==} - '@codemirror/lang-javascript@6.2.2': - resolution: {integrity: sha512-VGQfY+FCc285AhWuwjYxQyUQcYurWlxdKYT4bqwr3Twnd5wP5WSeu52t4tvvuWmljT4EmgEgZCqSieokhtY8hg==} + '@codemirror/lang-javascript@6.2.3': + resolution: {integrity: sha512-8PR3vIWg7pSu7ur8A07pGiYHgy3hHj+mRYRCSG8q+mPIrl0F02rgpGv+DsQTHRTc30rydOsf5PZ7yjKFg2Ackw==} '@codemirror/lang-json@6.0.1': resolution: {integrity: sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==} - '@codemirror/lang-markdown@6.3.1': - resolution: {integrity: sha512-y3sSPuQjBKZQbQwe3ZJKrSW6Silyl9PnrU/Mf0m2OQgIlPoSYTtOvEL7xs94SVMkb8f4x+SQFnzXPdX4Wk2lsg==} + '@codemirror/lang-markdown@6.3.2': + resolution: {integrity: sha512-c/5MYinGbFxYl4itE9q/rgN/sMTjOr8XL5OWnC+EaRMLfCbVUmmubTJfdgpfcSS2SCaT7b+Q+xi3l6CgoE+BsA==} - '@codemirror/lang-python@6.1.6': - resolution: {integrity: sha512-ai+01WfZhWqM92UqjnvorkxosZ2aq2u28kHvr+N3gu012XqY2CThD67JPMHnGceRfXPDBmn1HnyqowdpF57bNg==} + '@codemirror/lang-python@6.1.7': + resolution: {integrity: sha512-mZnFTsL4lW5p9ch8uKNKeRU3xGGxr1QpESLilfON2E3fQzOa/OygEMkaDvERvXDJWJA9U9oN/D4w0ZuUzNO4+g==} '@codemirror/lang-sass@6.0.2': resolution: {integrity: sha512-l/bdzIABvnTo1nzdY6U+kPAC51czYQcOErfzQ9zSm9D8GmNPD0WTW8st/CJwBTPLO8jlrbyvlSEcN20dc4iL0Q==} @@ -985,20 +971,20 @@ packages: '@codemirror/lang-wast@6.0.2': resolution: {integrity: sha512-Imi2KTpVGm7TKuUkqyJ5NRmeFWF7aMpNiwHnLQe0x9kmrxElndyH0K6H/gXtWwY6UshMRAhpENsgfpSwsgmC6Q==} - '@codemirror/language@6.10.6': - resolution: {integrity: sha512-KrsbdCnxEztLVbB5PycWXFxas4EOyk/fPAfruSOnDDppevQgid2XZ+KbJ9u+fDikP/e7MW7HPBTvTb8JlZK9vA==} + '@codemirror/language@6.11.0': + resolution: {integrity: sha512-A7+f++LodNNc1wGgoRDTt78cOwWm9KVezApgjOMp1W4hM0898nsqBXwF+sbePE7ZRcjN7Sa1Z5m2oN27XkmEjQ==} - '@codemirror/lint@6.8.4': - resolution: {integrity: sha512-u4q7PnZlJUojeRe8FJa/njJcMctISGgPQ4PnWsd9268R4ZTtU+tfFYmwkBvgcrK2+QQ8tYFVALVb5fVJykKc5A==} + '@codemirror/lint@6.8.5': + resolution: {integrity: sha512-s3n3KisH7dx3vsoeGMxsbRAgKe4O1vbrnKBClm99PU0fWxmxsx5rR2PfqQgIt+2MMJBHbiJ5rfIdLYfB9NNvsA==} - '@codemirror/search@6.5.8': - resolution: {integrity: sha512-PoWtZvo7c1XFeZWmmyaOp2G0XVbOnm+fJzvghqGAktBW3cufwJUWvSCcNG0ppXiBEM05mZu6RhMtXPv2hpllig==} + '@codemirror/search@6.5.10': + resolution: {integrity: sha512-RMdPdmsrUf53pb2VwflKGHEe1XVM07hI7vV2ntgw1dmqhimpatSJKva4VA9h4TLUDOD4EIF02201oZurpnEFsg==} - '@codemirror/state@6.4.1': - resolution: {integrity: sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==} + '@codemirror/state@6.5.2': + resolution: {integrity: sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==} - '@codemirror/view@6.35.0': - resolution: {integrity: sha512-I0tYy63q5XkaWsJ8QRv5h6ves7kvtrBWjBcnf/bzohFJQc5c14a1AQRdE8QpPF9eMp5Mq2FMm59TCj1gDfE7kw==} + '@codemirror/view@6.36.5': + resolution: {integrity: sha512-cd+FZEUlu3GQCYnguYm3EkhJ8KJVisqqUsCOKedBoAt/d9c76JUUap6U0UrpElln5k6VyrEOYliMuDAKIeDQLg==} '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} @@ -1036,8 +1022,8 @@ packages: resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==} engines: {node: '>= 8.9.0'} - '@electron/asar@3.2.18': - resolution: {integrity: sha512-2XyvMe3N3Nrs8cV39IKELRHTYUWFKrmqqSY1U+GMlc0jvqjIVnoxhNd2H4JolWQncbJi1DCvb5TNxZuI2fEjWg==} + '@electron/asar@3.3.1': + resolution: {integrity: sha512-WtpC/+34p0skWZiarRjLAyqaAX78DofhDxnREy/V5XHfu1XEXbFCSSMcDQ6hNCPJFaPy8/NnUgYuf9uiCkvKPg==} engines: {node: '>=10.12.0'} hasBin: true @@ -1063,8 +1049,8 @@ packages: resolution: {integrity: sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA==} engines: {node: '>=16.4'} - '@emnapi/runtime@1.3.1': - resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + '@emnapi/runtime@1.4.0': + resolution: {integrity: sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==} '@emotion/hash@0.9.2': resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} @@ -1087,11 +1073,11 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.17.19': - resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] + '@esbuild/aix-ppc64@0.25.1': + resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] '@esbuild/android-arm64@0.17.6': resolution: {integrity: sha512-YnYSCceN/dUzUr5kdtUzB+wZprCafuD89Hs0Aqv9QSdwhYQybhXTaSTcrl6X/aWThn1a/j0eEpUBGOE7269REg==} @@ -1117,10 +1103,10 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm@0.17.19': - resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} - engines: {node: '>=12'} - cpu: [arm] + '@esbuild/android-arm64@0.25.1': + resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} + engines: {node: '>=18'} + cpu: [arm64] os: [android] '@esbuild/android-arm@0.17.6': @@ -1147,10 +1133,10 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-x64@0.17.19': - resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/android-arm@0.25.1': + resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} + engines: {node: '>=18'} + cpu: [arm] os: [android] '@esbuild/android-x64@0.17.6': @@ -1177,11 +1163,11 @@ packages: cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.17.19': - resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] + '@esbuild/android-x64@0.25.1': + resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] '@esbuild/darwin-arm64@0.17.6': resolution: {integrity: sha512-bsDRvlbKMQMt6Wl08nHtFz++yoZHsyTOxnjfB2Q95gato+Yi4WnRl13oC2/PJJA9yLCoRv9gqT/EYX0/zDsyMA==} @@ -1207,10 +1193,10 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.17.19': - resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/darwin-arm64@0.25.1': + resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} + engines: {node: '>=18'} + cpu: [arm64] os: [darwin] '@esbuild/darwin-x64@0.17.6': @@ -1237,11 +1223,11 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.17.19': - resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] + '@esbuild/darwin-x64@0.25.1': + resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] '@esbuild/freebsd-arm64@0.17.6': resolution: {integrity: sha512-EnUwjRc1inT4ccZh4pB3v1cIhohE2S4YXlt1OvI7sw/+pD+dIE4smwekZlEPIwY6PhU6oDWwITrQQm5S2/iZgg==} @@ -1267,10 +1253,10 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.17.19': - resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/freebsd-arm64@0.25.1': + resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} + engines: {node: '>=18'} + cpu: [arm64] os: [freebsd] '@esbuild/freebsd-x64@0.17.6': @@ -1297,11 +1283,11 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.17.19': - resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] + '@esbuild/freebsd-x64@0.25.1': + resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] '@esbuild/linux-arm64@0.17.6': resolution: {integrity: sha512-bUR58IFOMJX523aDVozswnlp5yry7+0cRLCXDsxnUeQYJik1DukMY+apBsLOZJblpH+K7ox7YrKrHmJoWqVR9w==} @@ -1327,10 +1313,10 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.17.19': - resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} - engines: {node: '>=12'} - cpu: [arm] + '@esbuild/linux-arm64@0.25.1': + resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} + engines: {node: '>=18'} + cpu: [arm64] os: [linux] '@esbuild/linux-arm@0.17.6': @@ -1357,10 +1343,10 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.17.19': - resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} - engines: {node: '>=12'} - cpu: [ia32] + '@esbuild/linux-arm@0.25.1': + resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} + engines: {node: '>=18'} + cpu: [arm] os: [linux] '@esbuild/linux-ia32@0.17.6': @@ -1387,10 +1373,10 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.17.19': - resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} - engines: {node: '>=12'} - cpu: [loong64] + '@esbuild/linux-ia32@0.25.1': + resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} + engines: {node: '>=18'} + cpu: [ia32] os: [linux] '@esbuild/linux-loong64@0.17.6': @@ -1417,10 +1403,10 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.17.19': - resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} - engines: {node: '>=12'} - cpu: [mips64el] + '@esbuild/linux-loong64@0.25.1': + resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} + engines: {node: '>=18'} + cpu: [loong64] os: [linux] '@esbuild/linux-mips64el@0.17.6': @@ -1447,10 +1433,10 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.17.19': - resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} - engines: {node: '>=12'} - cpu: [ppc64] + '@esbuild/linux-mips64el@0.25.1': + resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} + engines: {node: '>=18'} + cpu: [mips64el] os: [linux] '@esbuild/linux-ppc64@0.17.6': @@ -1477,10 +1463,10 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.17.19': - resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} - engines: {node: '>=12'} - cpu: [riscv64] + '@esbuild/linux-ppc64@0.25.1': + resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} + engines: {node: '>=18'} + cpu: [ppc64] os: [linux] '@esbuild/linux-riscv64@0.17.6': @@ -1507,10 +1493,10 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.17.19': - resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} - engines: {node: '>=12'} - cpu: [s390x] + '@esbuild/linux-riscv64@0.25.1': + resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} + engines: {node: '>=18'} + cpu: [riscv64] os: [linux] '@esbuild/linux-s390x@0.17.6': @@ -1537,10 +1523,10 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.17.19': - resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/linux-s390x@0.25.1': + resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} + engines: {node: '>=18'} + cpu: [s390x] os: [linux] '@esbuild/linux-x64@0.17.6': @@ -1567,16 +1553,22 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.25.1': + resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-arm64@0.24.2': resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.17.19': - resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/netbsd-arm64@0.25.1': + resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} + engines: {node: '>=18'} + cpu: [arm64] os: [netbsd] '@esbuild/netbsd-x64@0.17.6': @@ -1603,6 +1595,12 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.1': + resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-arm64@0.23.1': resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} engines: {node: '>=18'} @@ -1615,10 +1613,10 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.17.19': - resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/openbsd-arm64@0.25.1': + resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} + engines: {node: '>=18'} + cpu: [arm64] os: [openbsd] '@esbuild/openbsd-x64@0.17.6': @@ -1645,11 +1643,11 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.17.19': - resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} - engines: {node: '>=12'} + '@esbuild/openbsd-x64@0.25.1': + resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} + engines: {node: '>=18'} cpu: [x64] - os: [sunos] + os: [openbsd] '@esbuild/sunos-x64@0.17.6': resolution: {integrity: sha512-gnMnMPg5pfMkZvhHee21KbKdc6W3GR8/JuE0Da1kjwpK6oiFU3nqfHuVPgUX2rsOx9N2SadSQTIYV1CIjYG+xw==} @@ -1675,11 +1673,11 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.17.19': - resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] + '@esbuild/sunos-x64@0.25.1': + resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] '@esbuild/win32-arm64@0.17.6': resolution: {integrity: sha512-G95n7vP1UnGJPsVdKXllAJPtqjMvFYbN20e8RK8LVLhlTiSOH1sd7+Gt7rm70xiG+I5tM58nYgwWrLs6I1jHqg==} @@ -1705,10 +1703,10 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.17.19': - resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} - engines: {node: '>=12'} - cpu: [ia32] + '@esbuild/win32-arm64@0.25.1': + resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} + engines: {node: '>=18'} + cpu: [arm64] os: [win32] '@esbuild/win32-ia32@0.17.6': @@ -1735,10 +1733,10 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.17.19': - resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/win32-ia32@0.25.1': + resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} + engines: {node: '>=18'} + cpu: [ia32] os: [win32] '@esbuild/win32-x64@0.17.6': @@ -1765,8 +1763,14 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.4.1': - resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + '@esbuild/win32-x64@0.25.1': + resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.5.1': + resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -1775,39 +1779,43 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.19.0': - resolution: {integrity: sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==} + '@eslint/config-array@0.19.2': + resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.9.0': - resolution: {integrity: sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==} + '@eslint/config-helpers@0.2.0': + resolution: {integrity: sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.2.0': - resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} + '@eslint/core@0.12.0': + resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.16.0': - resolution: {integrity: sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==} + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/object-schema@2.1.4': - resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + '@eslint/js@9.23.0': + resolution: {integrity: sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.2.3': - resolution: {integrity: sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==} + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.7': + resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@fastify/busboy@2.1.1': resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} - '@floating-ui/core@1.6.8': - resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} + '@floating-ui/core@1.6.9': + resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} - '@floating-ui/dom@1.6.12': - resolution: {integrity: sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==} + '@floating-ui/dom@1.6.13': + resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} '@floating-ui/react-dom@2.1.2': resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} @@ -1821,8 +1829,8 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' - '@floating-ui/utils@0.2.8': - resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} + '@floating-ui/utils@0.2.9': + resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} '@gar/promisify@1.1.3': resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} @@ -1850,21 +1858,21 @@ packages: resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} - '@humanwhocodes/retry@0.4.1': - resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + '@humanwhocodes/retry@0.4.2': + resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} engines: {node: '>=18.18'} - '@iconify-json/ph@1.2.1': - resolution: {integrity: sha512-x0DNfwWrS18dbsBYOq3XGiZnGz4CgRyC+YSl/TZvMQiKhIUl1woWqUbMYqqfMNUBzjyk7ulvaRovpRsIlqIf8g==} + '@iconify-json/ph@1.2.2': + resolution: {integrity: sha512-PgkEZNtqa8hBGjHXQa4pMwZa93hmfu8FUSjs/nv4oUU6yLsgv+gh9nu28Kqi8Fz9CCVu4hj1MZs9/60J57IzFw==} - '@iconify-json/svg-spinners@1.2.1': - resolution: {integrity: sha512-QZNA4YzFD2zqdC6nIBJM6WlAGakUCjvMt92Ks1R4XFxkd76Ps3rdiauYWESDRZvNYURAByp2b9cwZarFula65g==} + '@iconify-json/svg-spinners@1.2.2': + resolution: {integrity: sha512-DIErwfBWWzLfmAG2oQnbUOSqZhDxlXvr8941itMCrxQoMB0Hiv8Ww6Bln/zIgxwjDvSem2dKJtap+yKKwsB/2A==} '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - '@iconify/utils@2.1.33': - resolution: {integrity: sha512-jP9h6v/g0BIZx0p7XGJJVtkVnydtbgTgt9mVNcGDYwaa7UhdHdI9dvoq+gKj9sijMSJKxUPEG2JyjsgXjxL7Kw==} + '@iconify/utils@2.3.0': + resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==} '@img/sharp-darwin-arm64@0.33.5': resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} @@ -1975,8 +1983,8 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} '@jridgewell/resolve-uri@3.1.2': @@ -1996,8 +2004,8 @@ packages: '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - '@jspm/core@2.0.1': - resolution: {integrity: sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==} + '@jspm/core@2.1.0': + resolution: {integrity: sha512-3sRl+pkyFY/kLmHl0cgHiFp2xEqErA8N3ECjMs7serSUBmoJ70lBa0PG5t0IM6WJgdZNyyI0R8YFfi5wM8+mzg==} '@kurkle/color@0.3.4': resolution: {integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==} @@ -2005,11 +2013,11 @@ packages: '@lezer/common@1.2.3': resolution: {integrity: sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==} - '@lezer/cpp@1.1.2': - resolution: {integrity: sha512-macwKtyeUO0EW86r3xWQCzOV9/CF8imJLpJlPv3sDY57cPGeUZ8gXWOWNlJr52TVByMV3PayFQCA5SHEERDmVQ==} + '@lezer/cpp@1.1.3': + resolution: {integrity: sha512-ykYvuFQKGsRi6IcE+/hCSGUhb/I4WPjd3ELhEblm2wS2cOznDFzO+ubK2c+ioysOnlZ3EduV+MVQFCPzAIoY3w==} - '@lezer/css@1.1.9': - resolution: {integrity: sha512-TYwgljcDv+YrV0MZFFvYFQHCfGgbPMR6nuqLabBdmZoFH3EP1gvw8t0vae326Ne3PszQkbXfVBjCnf3ZVCr0bA==} + '@lezer/css@1.1.11': + resolution: {integrity: sha512-FuAnusbLBl1SEAtfN8NdShxYJiESKw9LAFysfea1T96jD3ydBn12oYjaSG1a04BQRIUd93/0D8e5CV1cUMkmQg==} '@lezer/highlight@1.2.1': resolution: {integrity: sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==} @@ -2017,20 +2025,20 @@ packages: '@lezer/html@1.3.10': resolution: {integrity: sha512-dqpT8nISx/p9Do3AchvYGV3qYc4/rKr3IBZxlHmpIKam56P47RSHkSF5f13Vu9hebS1jM0HmtJIwLbWz1VIY6w==} - '@lezer/javascript@1.4.20': - resolution: {integrity: sha512-Qhl3x+hVPnZkylv+BS//zx77KR4GLxM4PiL02r/D1Zoa4WLQI1A0cHuOr6k0FOTTSCPNNfeNANax0I5DWcXBYw==} + '@lezer/javascript@1.4.21': + resolution: {integrity: sha512-lL+1fcuxWYPURMM/oFZLEDm0XuLN128QPV+VuGtKpeaOGdcl9F2LYC3nh1S9LkPqx9M0mndZFdXCipNAZpzIkQ==} - '@lezer/json@1.0.2': - resolution: {integrity: sha512-xHT2P4S5eeCYECyKNPhr4cbEL9tc8w83SPwRC373o9uEdrvGKTZoJVAGxpOsZckMlEh9W23Pc72ew918RWQOBQ==} + '@lezer/json@1.0.3': + resolution: {integrity: sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==} '@lezer/lr@1.4.2': resolution: {integrity: sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==} - '@lezer/markdown@1.3.2': - resolution: {integrity: sha512-Wu7B6VnrKTbBEohqa63h5vxXjiC4pO5ZQJ/TDbhJxPQaaIoRD/6UVDhSDtVsCwVZV12vvN9KxuLL3ATMnlG0oQ==} + '@lezer/markdown@1.4.2': + resolution: {integrity: sha512-iYewCigG/517D0xJPQd7RGaCjZAFwROiH8T9h7OTtz0bRVtkxzFhGBFJ9JGKgBBs4uuo1cvxzyQ5iKhDLMcLUQ==} - '@lezer/python@1.1.14': - resolution: {integrity: sha512-ykDOb2Ti24n76PJsSa4ZoDF0zH12BSw1LGfQXCYJhJyOGiFTfGaX0Du66Ze72R+u/P35U+O6I9m8TFXov1JzsA==} + '@lezer/python@1.1.17': + resolution: {integrity: sha512-Iz0doICPko9uv2chIfSsViNSugNa4PWhxs17jtFd0ZMt+OieDq3wxtFOdmj7wtst3FWDeJkB0CxWNot0BlYixw==} '@lezer/sass@1.0.7': resolution: {integrity: sha512-8HLlOkuX/SMHOggI2DAsXUw38TuURe+3eQ5hiuk9QmYOUyC55B1dYEIMkav5A4IELVaW4e1T4P9WRiI5ka4mdw==} @@ -2043,6 +2051,9 @@ packages: resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} engines: {node: '>= 10.0.0'} + '@marijn/find-cluster-break@1.0.2': + resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==} + '@mdx-js/mdx@2.3.0': resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} @@ -2090,27 +2101,27 @@ packages: resolution: {integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - '@octokit/auth-token@5.1.1': - resolution: {integrity: sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==} + '@octokit/auth-token@5.1.2': + resolution: {integrity: sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==} engines: {node: '>= 18'} - '@octokit/core@6.1.2': - resolution: {integrity: sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==} + '@octokit/core@6.1.4': + resolution: {integrity: sha512-lAS9k7d6I0MPN+gb9bKDt7X8SdxknYqAMh44S5L+lNqIN2NuV8nvv3g8rPp7MuRxcOpxpUIATWprO0C34a8Qmg==} engines: {node: '>= 18'} - '@octokit/endpoint@10.1.1': - resolution: {integrity: sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q==} + '@octokit/endpoint@10.1.3': + resolution: {integrity: sha512-nBRBMpKPhQUxCsQQeW+rCJ/OPSMcj3g0nfHn01zGYZXuNDvvXudF/TYY6APj5THlurerpFN4a/dQAIAaM6BYhA==} engines: {node: '>= 18'} - '@octokit/graphql@8.1.1': - resolution: {integrity: sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==} + '@octokit/graphql@8.2.1': + resolution: {integrity: sha512-n57hXtOoHrhwTWdvhVkdJHdhTv0JstjDbDRhJfwIRNfFqmSo1DaK/mD2syoNUoLCyqSjBpGAKOG0BuwF392slw==} engines: {node: '>= 18'} - '@octokit/openapi-types@22.2.0': - resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==} + '@octokit/openapi-types@24.2.0': + resolution: {integrity: sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==} - '@octokit/plugin-paginate-rest@11.3.6': - resolution: {integrity: sha512-zcvqqf/+TicbTCa/Z+3w4eBJcAxCFymtc0UAIsR3dEVoNilWld4oXdscQ3laXamTszUZdusw97K8+DrbFiOwjw==} + '@octokit/plugin-paginate-rest@11.6.0': + resolution: {integrity: sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': '>=6' @@ -2121,26 +2132,26 @@ packages: peerDependencies: '@octokit/core': '>=6' - '@octokit/plugin-rest-endpoint-methods@13.2.6': - resolution: {integrity: sha512-wMsdyHMjSfKjGINkdGKki06VEkgdEldIGstIEyGX0wbYHGByOwN/KiM+hAAlUwAtPkP3gvXtVQA9L3ITdV2tVw==} + '@octokit/plugin-rest-endpoint-methods@13.5.0': + resolution: {integrity: sha512-9Pas60Iv9ejO3WlAX3maE1+38c5nqbJXV5GrncEfkndIpZrJ/WPMRd2xYDcPPEt5yzpxcjw9fWNoPhsSGzqKqw==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': '>=6' - '@octokit/request-error@6.1.5': - resolution: {integrity: sha512-IlBTfGX8Yn/oFPMwSfvugfncK2EwRLjzbrpifNaMY8o/HTEAFqCA1FZxjD9cWvSKBHgrIhc4CSBIzMxiLsbzFQ==} + '@octokit/request-error@6.1.7': + resolution: {integrity: sha512-69NIppAwaauwZv6aOzb+VVLwt+0havz9GT5YplkeJv7fG7a40qpLt/yZKyiDxAhgz0EtgNdNcb96Z0u+Zyuy2g==} engines: {node: '>= 18'} - '@octokit/request@9.1.3': - resolution: {integrity: sha512-V+TFhu5fdF3K58rs1pGUJIDH5RZLbZm5BI+MNF+6o/ssFNT4vWlCh/tVpF3NxGtP15HUxTTMUbsG5llAuU2CZA==} + '@octokit/request@9.2.2': + resolution: {integrity: sha512-dZl0ZHx6gOQGcffgm1/Sf6JfEpmh34v3Af2Uci02vzUYz6qEN6zepoRtmybWXIGXFIK8K9ylE3b+duCWqhArtg==} engines: {node: '>= 18'} - '@octokit/rest@21.0.2': - resolution: {integrity: sha512-+CiLisCoyWmYicH25y1cDfCrv41kRSvTq6pPWtRroRJzhsCZWZyCqGyI8foJT5LmScADSwRAnr/xo+eewL04wQ==} + '@octokit/rest@21.1.1': + resolution: {integrity: sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==} engines: {node: '>= 18'} - '@octokit/types@13.6.2': - resolution: {integrity: sha512-WpbZfZUcZU77DrSW4wbsSgTPfKcp286q3ItaIgvSbBpZJlu6mnYXAkjZz6LVZPXkEvLIM8McanyZejKTYUHipA==} + '@octokit/types@13.10.0': + resolution: {integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==} '@openrouter/ai-sdk-provider@0.0.5': resolution: {integrity: sha512-AfxXQhISpxQSeUjU/4jo9waM5GRNX6eIkfTFS9l7vHkD1TKDP81Y/dXrE0ttJeN/Kap3tPF3Jwh49me0gWwjSw==} @@ -2163,8 +2174,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@pkgr/core@0.1.1': - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + '@pkgr/core@0.2.0': + resolution: {integrity: sha512-vsJDAkYR6qCPu+ioGScGiMYR7LvZYIXh/dlQeviqoTWNCVfKTLYD/LkNWH4Mxsv2a5vpIRc77FN5DnmK1eBggQ==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} '@polka/url@1.0.0-next.28': @@ -2173,14 +2184,11 @@ packages: '@radix-ui/number@1.1.0': resolution: {integrity: sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==} - '@radix-ui/primitive@1.1.0': - resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==} - '@radix-ui/primitive@1.1.1': resolution: {integrity: sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==} - '@radix-ui/react-arrow@1.1.0': - resolution: {integrity: sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==} + '@radix-ui/react-arrow@1.1.2': + resolution: {integrity: sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2192,8 +2200,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-arrow@1.1.2': - resolution: {integrity: sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg==} + '@radix-ui/react-checkbox@1.1.4': + resolution: {integrity: sha512-wP0CPAHq+P5I4INKe3hJrIa1WoNqqrejzW+zoU0rOvo1b9gDEJJFl2rYfO1PYJUQCc2H1WZxIJmyv9BS8i5fLw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2218,19 +2226,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-collection@1.1.0': - resolution: {integrity: sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-collection@1.1.2': resolution: {integrity: sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw==} peerDependencies: @@ -2244,15 +2239,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-compose-refs@1.1.0': - resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-compose-refs@1.1.1': resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==} peerDependencies: @@ -2262,8 +2248,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-context-menu@2.2.2': - resolution: {integrity: sha512-99EatSTpW+hRYHt7m8wdDlLtkmTovEe8Z/hnxUPV+SKuuNL5HWNhQI4QSdjZqNSgXHay2z4M3Dym73j9p2Gx5Q==} + '@radix-ui/react-context-menu@2.2.6': + resolution: {integrity: sha512-aUP99QZ3VU84NPsHeaFt4cQUNgJqFsLLOt/RbbWXszZ6MP0DpDyjkFZORr4RpAEx3sUBk+Kc8h13yGtC5Qw8dg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2275,15 +2261,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-context@1.1.0': - resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-context@1.1.1': resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==} peerDependencies: @@ -2315,19 +2292,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-dismissable-layer@1.1.1': - resolution: {integrity: sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-dismissable-layer@1.1.5': resolution: {integrity: sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==} peerDependencies: @@ -2363,19 +2327,6 @@ packages: '@types/react': optional: true - '@radix-ui/react-focus-scope@1.1.0': - resolution: {integrity: sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-focus-scope@1.1.2': resolution: {integrity: sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA==} peerDependencies: @@ -2411,19 +2362,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-menu@2.1.2': - resolution: {integrity: sha512-lZ0R4qR2Al6fZ4yCCZzu/ReTFrylHFxIqy7OezIpWF4bL0o9biKo0pFIvkaew3TyZ9Fy5gYVrR5zCGZBVbO1zg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-menu@2.1.6': resolution: {integrity: sha512-tBBb5CXDJW3t2mo9WlO7r6GTmWV0F0uzHZVFmlRmYpiSK1CDU5IKojP1pm7oknpBOrFZx/YgBRW9oorPO2S/Lg==} peerDependencies: @@ -2450,19 +2388,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-popper@1.2.0': - resolution: {integrity: sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-popper@1.2.2': resolution: {integrity: sha512-Rvqc3nOpwseCyj/rgjlJDYAgyfw7OC1tTkKn2ivhaMGcYt8FSBlahHOZak2i3QwkRXUXgGgzeEe2RuqeEHuHgA==} peerDependencies: @@ -2476,19 +2401,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-portal@1.1.2': - resolution: {integrity: sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-portal@1.1.4': resolution: {integrity: sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==} peerDependencies: @@ -2502,19 +2414,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-presence@1.1.1': - resolution: {integrity: sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-presence@1.1.2': resolution: {integrity: sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==} peerDependencies: @@ -2528,19 +2427,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-primitive@2.0.0': - resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-primitive@2.0.2': resolution: {integrity: sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==} peerDependencies: @@ -2567,19 +2453,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-roving-focus@1.1.0': - resolution: {integrity: sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - '@radix-ui/react-roving-focus@1.1.2': resolution: {integrity: sha512-zgMQWkNO169GtGqRvYrzb0Zf8NhMHS2DuEB/TiEmVnpr5OqPU3i8lfbxaAmC2J/KYuIQxyoQQ6DxepyXp61/xw==} peerDependencies: @@ -2606,8 +2479,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-separator@1.1.0': - resolution: {integrity: sha512-3uBAs+egzvJBDZAzvb/n4NxxOYpnspmWxO2u5NbZ8Y6FM/NdrGSF9bop3Cf6F6C71z1rTSn8KV0Fo2ZVd79lGA==} + '@radix-ui/react-separator@1.1.2': + resolution: {integrity: sha512-oZfHcaAp2Y6KFBX6I5P1u7CQoy4lheCGiYj+pGFrHy8E/VNRb5E39TkTr3JrV520csPBTZjkuKFdEsjS5EUNKQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2619,15 +2492,6 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-slot@1.1.0': - resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@radix-ui/react-slot@1.1.2': resolution: {integrity: sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==} peerDependencies: @@ -2637,8 +2501,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-switch@1.1.1': - resolution: {integrity: sha512-diPqDDoBcZPSicYoMWdWx+bCPuTRH4QSp9J+65IvtdS0Kuzt67bI6n32vCj8q6NZmYW/ah+2orOtMwcX5eQwIg==} + '@radix-ui/react-switch@1.1.3': + resolution: {integrity: sha512-1nc+vjEOQkJVsJtWPSiISGT6OKm4SiOdjMo+/icLxo2G4vxz1GntC5MzfL4v8ey9OEfw787QCD1y3mUv0NiFEQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2663,8 +2527,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-tooltip@1.1.4': - resolution: {integrity: sha512-QpObUH/ZlpaO4YgHSaYzrLO2VuO+ZBFFgGzjMUPwtiYnAzzNNDPJeEGRrT7qNOrWm/Jr08M1vlp+vTHtnSQ0Uw==} + '@radix-ui/react-tooltip@1.1.8': + resolution: {integrity: sha512-YAA2cu48EkJZdAMHC0dqo9kialOcRStbtiY4nJPaht7Ptrhcvpo+eDChaM6BIs8kL6a8Z5l5poiqLnXcNduOkA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2739,8 +2603,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-visually-hidden@1.1.0': - resolution: {integrity: sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==} + '@radix-ui/react-visually-hidden@1.1.2': + resolution: {integrity: sha512-1SzA4ns2M1aRlvxErqhLHsBHoS5eI5UUcI2awAMgGUp4LoaoWOKYmvqDY2s/tltuPkh3Yk77YF/r3IRj+Amx4Q==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2755,14 +2619,14 @@ packages: '@radix-ui/rect@1.1.0': resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} - '@react-aria/focus@3.20.0': - resolution: {integrity: sha512-KXZCwWzwnmtUo6xhnyV26ptxlxmqd0Reez7axduqqqeDDgDZOVscoo/5gFg71fdPZmnDC8MyUK1vxSbMhOTrGg==} + '@react-aria/focus@3.20.1': + resolution: {integrity: sha512-lgYs+sQ1TtBrAXnAdRBQrBo0/7o5H6IrfDxec1j+VRpcXL0xyk0xPq+m3lZp8typzIghqDgpnKkJ5Jf4OrzPIw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/interactions@3.24.0': - resolution: {integrity: sha512-6Zdhp1pswyPgbwEWzvXARdKAWPjP7mACczoIUvlEQiMsX04fuizBiBLAA+W/5mPe17pbJYHA/rxZF5Y5m+M0Ng==} + '@react-aria/interactions@3.24.1': + resolution: {integrity: sha512-OWEcIC6UQfWq4Td5Ptuh4PZQ4LHLJr/JL2jGYvuNL6EgL3bWvzPrRYIF/R64YbfVxIC7FeZpPSkS07sZ93/NoA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -2773,8 +2637,8 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@react-aria/utils@3.28.0': - resolution: {integrity: sha512-FfpvpADk61OvEnFe37k6jF1zr5gtafIPN9ccJRnPCTqrzuExag01mGi+wX/hWyFK0zAe1OjWf1zFOX3FsFvikg==} + '@react-aria/utils@3.28.1': + resolution: {integrity: sha512-mnHFF4YOVu9BRFQ1SZSKfPhg3z+lBRYoW5mLcYTQihbKhz48+I1sqRkP7ahMITr8ANH3nb34YaMME4XWmK2Mgg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 @@ -2801,8 +2665,8 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@remix-run/cloudflare-pages@2.16.0': - resolution: {integrity: sha512-Il/4JWkIFhkGPqE9MtaWCG431wNvAo+JsGClwVnOQgQYOJKV7wcvjZ4fQmkzc+GYBGMlOxx1OxD/S76XqnVzFQ==} + '@remix-run/cloudflare-pages@2.16.3': + resolution: {integrity: sha512-26dXHt6TMKqUGLWZzont4YFSiVZd+pmKTgf0eTspLQOClyjijMIpurs1GQQ+AwwsfM3OxKLWRRQdkb9T8ZIDcQ==} engines: {node: '>=18.0.0'} peerDependencies: '@cloudflare/workers-types': ^4.0.0 @@ -2811,8 +2675,8 @@ packages: typescript: optional: true - '@remix-run/cloudflare@2.16.0': - resolution: {integrity: sha512-Z9kN6tChe36S175z4AVm8c79kUUBS4k16IBIpNods3z3oyo103EDawHdpiYcaEdz2OfdTCvNwsA7zLvRBW7yNA==} + '@remix-run/cloudflare@2.16.3': + resolution: {integrity: sha512-PVBdDjbh6a5zmetrhL7+m2HDKmn4snQ8jYieCID58dfPQEaXktPWDvWIQ/n7rZ6teyKEObFaMT2tsruQ9qSy7w==} engines: {node: '>=18.0.0'} peerDependencies: '@cloudflare/workers-types': ^4.0.0 @@ -2821,13 +2685,13 @@ packages: typescript: optional: true - '@remix-run/dev@2.16.0': - resolution: {integrity: sha512-zfb93zJatWRMmBU4dQFM9pTgYfkZi1orDYtd18f9YNZM6pbshmhqlsiGZmrMAhAuYLGB983aqkXY3pxtZhoDkQ==} + '@remix-run/dev@2.16.3': + resolution: {integrity: sha512-7J0yBSRJXlgSLegYW5T5vbUXIEHTX8lIusugeil4CxitG4id4LaooM8Q9u/hhpiRyF6+XuevVCgTrKyWCiLxUg==} engines: {node: '>=18.0.0'} hasBin: true peerDependencies: - '@remix-run/react': ^2.16.0 - '@remix-run/serve': ^2.16.0 + '@remix-run/react': ^2.16.3 + '@remix-run/serve': ^2.16.3 typescript: ^5.1.0 vite: ^5.1.0 || ^6.0.0 wrangler: ^3.28.2 @@ -2841,8 +2705,8 @@ packages: wrangler: optional: true - '@remix-run/express@2.16.0': - resolution: {integrity: sha512-JuN+HjwJqlJqvMIWxWEw6Oj6u/TfwW4itHJg2hGAvQftBCwSD49kkAMUwBzdZr2BOepdwjuS/UKJpannp4PWKQ==} + '@remix-run/express@2.16.3': + resolution: {integrity: sha512-MHd+wfjNC0G7htZq1gJRU60sh1T9s5PSgRBYvU7v985vGFX+MYdowexUe/WC0D4jqZAHvY3aaPxPV4qXlckRaA==} engines: {node: '>=18.0.0'} peerDependencies: express: ^4.20.0 @@ -2851,8 +2715,8 @@ packages: typescript: optional: true - '@remix-run/node@2.15.3': - resolution: {integrity: sha512-TYfS6BPhbABBpSRZ6WBA4qIWSwWvJhRVQGXCHUtgOwkuW863rcFmjh9g2Xj/IHyTmbOYPdcjHsIgZ9el4CHOKQ==} + '@remix-run/node@2.16.3': + resolution: {integrity: sha512-6FLMNPUwVk/XMZs83li5LvXz0UGG1MXE+6p6rIh29COFASOPEy8tlhu5OSnkMWlGrnaGfjejlSr3lWmdiE864Q==} engines: {node: '>=18.0.0'} peerDependencies: typescript: ^5.1.0 @@ -2860,17 +2724,8 @@ packages: typescript: optional: true - '@remix-run/node@2.16.0': - resolution: {integrity: sha512-9yYBYCHYO1+bIScGAtOy5/r4BoTS8E5lpQmjWP99UxSCSiKHPEO76V9Z8mmmarTNis/FPN+sUwfmbQWNHLA2vw==} - engines: {node: '>=18.0.0'} - peerDependencies: - typescript: ^5.1.0 - peerDependenciesMeta: - typescript: - optional: true - - '@remix-run/react@2.16.0': - resolution: {integrity: sha512-eTi60/7AO8vnIL+IT33ZixT0tLjUrilgKhimdZtddBc/XIawUeslC01mNUHIlLXS+zUDM05iBmY2aLTKkqyy6Q==} + '@remix-run/react@2.16.3': + resolution: {integrity: sha512-OQghoGlRYbbM4OWCF6Qb+anvf4Q+BlkFV+teUHMgRvxJ8LKs0/ykQVFXyCVmLGozc9IuAza8AxF+0obRcHHj0A==} engines: {node: '>=18.0.0'} peerDependencies: react: ^18.0.0 @@ -2880,30 +2735,17 @@ packages: typescript: optional: true - '@remix-run/router@1.22.0': - resolution: {integrity: sha512-MBOl8MeOzpK0HQQQshKB7pABXbmyHizdTpqnrIseTbsv0nAepwC2ENZa1aaBExNQcpLoXmWthhak8SABLzvGPw==} - engines: {node: '>=14.0.0'} - '@remix-run/router@1.23.0': resolution: {integrity: sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==} engines: {node: '>=14.0.0'} - '@remix-run/serve@2.16.0': - resolution: {integrity: sha512-KF3ofzLcXf2lY1jFa8o7iDbRblSDIlzpUaxhcvPWPatrJwfB6ww/aVEesERKD+AUUonx6kB4KkEj5eAn0U86MA==} + '@remix-run/serve@2.16.3': + resolution: {integrity: sha512-J2q6NdZGhcsW4oUP/QDJbAFSt6ZX0YHGdIcnUvqsIYP+3X5EjYMY0kbHFE8xjYGWeBHlCwQlJddMjj0XgUJm0A==} engines: {node: '>=18.0.0'} hasBin: true - '@remix-run/server-runtime@2.15.3': - resolution: {integrity: sha512-taHBe1DEqxZNjjj6OfkSYbup+sZPjbTgUhykaI+nHqrC2NDQuTiisBXhLwtx60GctONR/x0lWhF7R9ZGC5WsHw==} - engines: {node: '>=18.0.0'} - peerDependencies: - typescript: ^5.1.0 - peerDependenciesMeta: - typescript: - optional: true - - '@remix-run/server-runtime@2.16.0': - resolution: {integrity: sha512-gbuc4slxPi+pT47MrUYprX/wCuDlYL6H3LHZSvimWO1kDCBt8oefHzdHDPjLi4B1xzqXZomswTbuJzpZ7xRRTg==} + '@remix-run/server-runtime@2.16.3': + resolution: {integrity: sha512-1CRiymt8XjGgyuxvCg1GFLEv0SLUNKeUtYF4a94xHv6Kkx5X+L/YZYxXEeJ3I0czuGcMcPqcqmdwfEo1hoMi8Q==} engines: {node: '>=18.0.0'} peerDependencies: typescript: ^5.1.0 @@ -2936,8 +2778,8 @@ packages: rollup: optional: true - '@rollup/pluginutils@5.1.3': - resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} + '@rollup/pluginutils@5.1.4': + resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -2945,300 +2787,321 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.28.0': - resolution: {integrity: sha512-wLJuPLT6grGZsy34g4N1yRfYeouklTgPhH1gWXCYspenKYD0s3cR99ZevOGw5BexMNywkbV3UkjADisozBmpPQ==} + '@rollup/rollup-android-arm-eabi@4.38.0': + resolution: {integrity: sha512-ldomqc4/jDZu/xpYU+aRxo3V4mGCV9HeTgUBANI3oIQMOL+SsxB+S2lxMpkFp5UamSS3XuTMQVbsS24R4J4Qjg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.28.0': - resolution: {integrity: sha512-eiNkznlo0dLmVG/6wf+Ifi/v78G4d4QxRhuUl+s8EWZpDewgk7PX3ZyECUXU0Zq/Ca+8nU8cQpNC4Xgn2gFNDA==} + '@rollup/rollup-android-arm64@4.38.0': + resolution: {integrity: sha512-VUsgcy4GhhT7rokwzYQP+aV9XnSLkkhlEJ0St8pbasuWO/vwphhZQxYEKUP3ayeCYLhk6gEtacRpYP/cj3GjyQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.28.0': - resolution: {integrity: sha512-lmKx9yHsppblnLQZOGxdO66gT77bvdBtr/0P+TPOseowE7D9AJoBw8ZDULRasXRWf1Z86/gcOdpBrV6VDUY36Q==} + '@rollup/rollup-darwin-arm64@4.38.0': + resolution: {integrity: sha512-buA17AYXlW9Rn091sWMq1xGUvWQFOH4N1rqUxGJtEQzhChxWjldGCCup7r/wUnaI6Au8sKXpoh0xg58a7cgcpg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.28.0': - resolution: {integrity: sha512-8hxgfReVs7k9Js1uAIhS6zq3I+wKQETInnWQtgzt8JfGx51R1N6DRVy3F4o0lQwumbErRz52YqwjfvuwRxGv1w==} + '@rollup/rollup-darwin-x64@4.38.0': + resolution: {integrity: sha512-Mgcmc78AjunP1SKXl624vVBOF2bzwNWFPMP4fpOu05vS0amnLcX8gHIge7q/lDAHy3T2HeR0TqrriZDQS2Woeg==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.28.0': - resolution: {integrity: sha512-lA1zZB3bFx5oxu9fYud4+g1mt+lYXCoch0M0V/xhqLoGatbzVse0wlSQ1UYOWKpuSu3gyN4qEc0Dxf/DII1bhQ==} + '@rollup/rollup-freebsd-arm64@4.38.0': + resolution: {integrity: sha512-zzJACgjLbQTsscxWqvrEQAEh28hqhebpRz5q/uUd1T7VTwUNZ4VIXQt5hE7ncs0GrF+s7d3S4on4TiXUY8KoQA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.28.0': - resolution: {integrity: sha512-aI2plavbUDjCQB/sRbeUZWX9qp12GfYkYSJOrdYTL/C5D53bsE2/nBPuoiJKoWp5SN78v2Vr8ZPnB+/VbQ2pFA==} + '@rollup/rollup-freebsd-x64@4.38.0': + resolution: {integrity: sha512-hCY/KAeYMCyDpEE4pTETam0XZS4/5GXzlLgpi5f0IaPExw9kuB+PDTOTLuPtM10TlRG0U9OSmXJ+Wq9J39LvAg==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.28.0': - resolution: {integrity: sha512-WXveUPKtfqtaNvpf0iOb0M6xC64GzUX/OowbqfiCSXTdi/jLlOmH0Ba94/OkiY2yTGTwteo4/dsHRfh5bDCZ+w==} + '@rollup/rollup-linux-arm-gnueabihf@4.38.0': + resolution: {integrity: sha512-mimPH43mHl4JdOTD7bUMFhBdrg6f9HzMTOEnzRmXbOZqjijCw8LA5z8uL6LCjxSa67H2xiLFvvO67PT05PRKGg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.28.0': - resolution: {integrity: sha512-yLc3O2NtOQR67lI79zsSc7lk31xjwcaocvdD1twL64PK1yNaIqCeWI9L5B4MFPAVGEVjH5k1oWSGuYX1Wutxpg==} + '@rollup/rollup-linux-arm-musleabihf@4.38.0': + resolution: {integrity: sha512-tPiJtiOoNuIH8XGG8sWoMMkAMm98PUwlriOFCCbZGc9WCax+GLeVRhmaxjJtz6WxrPKACgrwoZ5ia/uapq3ZVg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.28.0': - resolution: {integrity: sha512-+P9G9hjEpHucHRXqesY+3X9hD2wh0iNnJXX/QhS/J5vTdG6VhNYMxJ2rJkQOxRUd17u5mbMLHM7yWGZdAASfcg==} + '@rollup/rollup-linux-arm64-gnu@4.38.0': + resolution: {integrity: sha512-wZco59rIVuB0tjQS0CSHTTUcEde+pXQWugZVxWaQFdQQ1VYub/sTrNdY76D1MKdN2NB48JDuGABP6o6fqos8mA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.28.0': - resolution: {integrity: sha512-1xsm2rCKSTpKzi5/ypT5wfc+4bOGa/9yI/eaOLW0oMs7qpC542APWhl4A37AENGZ6St6GBMWhCCMM6tXgTIplw==} + '@rollup/rollup-linux-arm64-musl@4.38.0': + resolution: {integrity: sha512-fQgqwKmW0REM4LomQ+87PP8w8xvU9LZfeLBKybeli+0yHT7VKILINzFEuggvnV9M3x1Ed4gUBmGUzCo/ikmFbQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.28.0': - resolution: {integrity: sha512-zgWxMq8neVQeXL+ouSf6S7DoNeo6EPgi1eeqHXVKQxqPy1B2NvTbaOUWPn/7CfMKL7xvhV0/+fq/Z/J69g1WAQ==} + '@rollup/rollup-linux-loongarch64-gnu@4.38.0': + resolution: {integrity: sha512-hz5oqQLXTB3SbXpfkKHKXLdIp02/w3M+ajp8p4yWOWwQRtHWiEOCKtc9U+YXahrwdk+3qHdFMDWR5k+4dIlddg==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.38.0': + resolution: {integrity: sha512-NXqygK/dTSibQ+0pzxsL3r4Xl8oPqVoWbZV9niqOnIHV/J92fe65pOir0xjkUZDRSPyFRvu+4YOpJF9BZHQImw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.28.0': - resolution: {integrity: sha512-VEdVYacLniRxbRJLNtzwGt5vwS0ycYshofI7cWAfj7Vg5asqj+pt+Q6x4n+AONSZW/kVm+5nklde0qs2EUwU2g==} + '@rollup/rollup-linux-riscv64-gnu@4.38.0': + resolution: {integrity: sha512-GEAIabR1uFyvf/jW/5jfu8gjM06/4kZ1W+j1nWTSSB3w6moZEBm7iBtzwQ3a1Pxos2F7Gz+58aVEnZHU295QTg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.28.0': - resolution: {integrity: sha512-LQlP5t2hcDJh8HV8RELD9/xlYtEzJkm/aWGsauvdO2ulfl3QYRjqrKW+mGAIWP5kdNCBheqqqYIGElSRCaXfpw==} + '@rollup/rollup-linux-riscv64-musl@4.38.0': + resolution: {integrity: sha512-9EYTX+Gus2EGPbfs+fh7l95wVADtSQyYw4DfSBcYdUEAmP2lqSZY0Y17yX/3m5VKGGJ4UmIH5LHLkMJft3bYoA==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.38.0': + resolution: {integrity: sha512-Mpp6+Z5VhB9VDk7RwZXoG2qMdERm3Jw07RNlXHE0bOnEeX+l7Fy4bg+NxfyN15ruuY3/7Vrbpm75J9QHFqj5+Q==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.28.0': - resolution: {integrity: sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw==} + '@rollup/rollup-linux-x64-gnu@4.38.0': + resolution: {integrity: sha512-vPvNgFlZRAgO7rwncMeE0+8c4Hmc+qixnp00/Uv3ht2x7KYrJ6ERVd3/R0nUtlE6/hu7/HiiNHJ/rP6knRFt1w==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.28.0': - resolution: {integrity: sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw==} + '@rollup/rollup-linux-x64-musl@4.38.0': + resolution: {integrity: sha512-q5Zv+goWvQUGCaL7fU8NuTw8aydIL/C9abAVGCzRReuj5h30TPx4LumBtAidrVOtXnlB+RZkBtExMsfqkMfb8g==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.28.0': - resolution: {integrity: sha512-Vi+WR62xWGsE/Oj+mD0FNAPY2MEox3cfyG0zLpotZdehPFXwz6lypkGs5y38Jd/NVSbOD02aVad6q6QYF7i8Bg==} + '@rollup/rollup-win32-arm64-msvc@4.38.0': + resolution: {integrity: sha512-u/Jbm1BU89Vftqyqbmxdq14nBaQjQX1HhmsdBWqSdGClNaKwhjsg5TpW+5Ibs1mb8Es9wJiMdl86BcmtUVXNZg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.28.0': - resolution: {integrity: sha512-kN/Vpip8emMLn/eOza+4JwqDZBL6MPNpkdaEsgUtW1NYN3DZvZqSQrbKzJcTL6hd8YNmFTn7XGWMwccOcJBL0A==} + '@rollup/rollup-win32-ia32-msvc@4.38.0': + resolution: {integrity: sha512-mqu4PzTrlpNHHbu5qleGvXJoGgHpChBlrBx/mEhTPpnAL1ZAYFlvHD7rLK839LLKQzqEQMFJfGrrOHItN4ZQqA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.28.0': - resolution: {integrity: sha512-Bvno2/aZT6usSa7lRDL2+hMjVAGjuqaymF1ApZm31JXzniR/hvr14jpU+/z4X6Gt5BPlzosscyJZGUvguXIqeQ==} + '@rollup/rollup-win32-x64-msvc@4.38.0': + resolution: {integrity: sha512-jjqy3uWlecfB98Psxb5cD6Fny9Fupv9LrDSPTQZUROqjvZmcCqNu4UMl7qqhlUUGpwiAkotj6GYu4SZdcr/nLw==} cpu: [x64] os: [win32] - '@shikijs/core@1.24.0': - resolution: {integrity: sha512-6pvdH0KoahMzr6689yh0QJ3rCgF4j1XsXRHNEeEN6M4xJTfQ6QPWrmHzIddotg+xPJUPEPzYzYCKzpYyhTI6Gw==} + '@shikijs/core@1.29.2': + resolution: {integrity: sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==} - '@shikijs/engine-javascript@1.24.0': - resolution: {integrity: sha512-ZA6sCeSsF3Mnlxxr+4wGEJ9Tto4RHmfIS7ox8KIAbH0MTVUkw3roHPHZN+LlJMOHJJOVupe6tvuAzRpN8qK1vA==} + '@shikijs/engine-javascript@1.29.2': + resolution: {integrity: sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==} - '@shikijs/engine-oniguruma@1.24.0': - resolution: {integrity: sha512-Eua0qNOL73Y82lGA4GF5P+G2+VXX9XnuUxkiUuwcxQPH4wom+tE39kZpBFXfUuwNYxHSkrSxpB1p4kyRW0moSg==} + '@shikijs/engine-oniguruma@1.29.2': + resolution: {integrity: sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==} - '@shikijs/types@1.24.0': - resolution: {integrity: sha512-aptbEuq1Pk88DMlCe+FzXNnBZ17LCiLIGWAeCWhoFDzia5Q5Krx3DgnULLiouSdd6+LUM39XwXGppqYE0Ghtug==} + '@shikijs/langs@1.29.2': + resolution: {integrity: sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==} - '@shikijs/vscode-textmate@9.3.0': - resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==} + '@shikijs/themes@1.29.2': + resolution: {integrity: sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==} + + '@shikijs/types@1.29.2': + resolution: {integrity: sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} '@sindresorhus/is@4.6.0': resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} - '@smithy/abort-controller@3.1.9': - resolution: {integrity: sha512-yiW0WI30zj8ZKoSYNx90no7ugVn3khlyH/z5W8qtKBtVE6awRALbhSG+2SAHA1r6bO/6M9utxYKVZ3PCJ1rWxw==} - engines: {node: '>=16.0.0'} + '@smithy/abort-controller@4.0.2': + resolution: {integrity: sha512-Sl/78VDtgqKxN2+1qduaVE140XF+Xg+TafkncspwM4jFP/LHr76ZHmIY/y3V1M0mMLNk+Je6IGbzxy23RSToMw==} + engines: {node: '>=18.0.0'} - '@smithy/config-resolver@3.0.13': - resolution: {integrity: sha512-Gr/qwzyPaTL1tZcq8WQyHhTZREER5R1Wytmz4WnVGL4onA3dNk6Btll55c8Vr58pLdvWZmtG8oZxJTw3t3q7Jg==} - engines: {node: '>=16.0.0'} + '@smithy/config-resolver@4.1.0': + resolution: {integrity: sha512-8smPlwhga22pwl23fM5ew4T9vfLUCeFXlcqNOCD5M5h8VmNPNUE9j6bQSuRXpDSV11L/E/SwEBQuW8hr6+nS1A==} + engines: {node: '>=18.0.0'} - '@smithy/core@2.5.6': - resolution: {integrity: sha512-w494xO+CPwG/5B/N2l0obHv2Fi9U4DAY+sTi1GWT3BVvGpZetJjJXAynIO9IHp4zS1PinGhXtRSZydUXbJO4ag==} - engines: {node: '>=16.0.0'} + '@smithy/core@3.2.0': + resolution: {integrity: sha512-k17bgQhVZ7YmUvA8at4af1TDpl0NDMBuBKJl8Yg0nrefwmValU+CnA5l/AriVdQNthU/33H3nK71HrLgqOPr1Q==} + engines: {node: '>=18.0.0'} - '@smithy/credential-provider-imds@3.2.8': - resolution: {integrity: sha512-ZCY2yD0BY+K9iMXkkbnjo+08T2h8/34oHd0Jmh6BZUSZwaaGlGCyBT/3wnS7u7Xl33/EEfN4B6nQr3Gx5bYxgw==} - engines: {node: '>=16.0.0'} + '@smithy/credential-provider-imds@4.0.2': + resolution: {integrity: sha512-32lVig6jCaWBHnY+OEQ6e6Vnt5vDHaLiydGrwYMW9tPqO688hPGTYRamYJ1EptxEC2rAwJrHWmPoKRBl4iTa8w==} + engines: {node: '>=18.0.0'} - '@smithy/eventstream-codec@3.1.10': - resolution: {integrity: sha512-323B8YckSbUH0nMIpXn7HZsAVKHYHFUODa8gG9cHo0ySvA1fr5iWaNT+iIL0UCqUzG6QPHA3BSsBtRQou4mMqQ==} + '@smithy/eventstream-codec@4.0.2': + resolution: {integrity: sha512-p+f2kLSK7ZrXVfskU/f5dzksKTewZk8pJLPvER3aFHPt76C2MxD9vNatSfLzzQSQB4FNO96RK4PSXfhD1TTeMQ==} + engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-browser@3.0.14': - resolution: {integrity: sha512-kbrt0vjOIihW3V7Cqj1SXQvAI5BR8SnyQYsandva0AOR307cXAc+IhPngxIPslxTLfxwDpNu0HzCAq6g42kCPg==} - engines: {node: '>=16.0.0'} + '@smithy/eventstream-serde-browser@4.0.2': + resolution: {integrity: sha512-CepZCDs2xgVUtH7ZZ7oDdZFH8e6Y2zOv8iiX6RhndH69nlojCALSKK+OXwZUgOtUZEUaZ5e1hULVCHYbCn7pug==} + engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-config-resolver@3.0.11': - resolution: {integrity: sha512-P2pnEp4n75O+QHjyO7cbw/vsw5l93K/8EWyjNCAAybYwUmj3M+hjSQZ9P5TVdUgEG08ueMAP5R4FkuSkElZ5tQ==} - engines: {node: '>=16.0.0'} + '@smithy/eventstream-serde-config-resolver@4.1.0': + resolution: {integrity: sha512-1PI+WPZ5TWXrfj3CIoKyUycYynYJgZjuQo8U+sphneOtjsgrttYybdqESFReQrdWJ+LKt6NEdbYzmmfDBmjX2A==} + engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-node@3.0.13': - resolution: {integrity: sha512-zqy/9iwbj8Wysmvi7Lq7XFLeDgjRpTbCfwBhJa8WbrylTAHiAu6oQTwdY7iu2lxigbc9YYr9vPv5SzYny5tCXQ==} - engines: {node: '>=16.0.0'} + '@smithy/eventstream-serde-node@4.0.2': + resolution: {integrity: sha512-C5bJ/C6x9ENPMx2cFOirspnF9ZsBVnBMtP6BdPl/qYSuUawdGQ34Lq0dMcf42QTjUZgWGbUIZnz6+zLxJlb9aw==} + engines: {node: '>=18.0.0'} - '@smithy/eventstream-serde-universal@3.0.13': - resolution: {integrity: sha512-L1Ib66+gg9uTnqp/18Gz4MDpJPKRE44geOjOQ2SVc0eiaO5l255ADziATZgjQjqumC7yPtp1XnjHlF1srcwjKw==} - engines: {node: '>=16.0.0'} + '@smithy/eventstream-serde-universal@4.0.2': + resolution: {integrity: sha512-St8h9JqzvnbB52FtckiHPN4U/cnXcarMniXRXTKn0r4b4XesZOGiAyUdj1aXbqqn1icSqBlzzUsCl6nPB018ng==} + engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@4.1.2': - resolution: {integrity: sha512-R7rU7Ae3ItU4rC0c5mB2sP5mJNbCfoDc8I5XlYjIZnquyUwec7fEo78F6DA3SmgJgkU1qTMcZJuGblxZsl10ZA==} + '@smithy/fetch-http-handler@5.0.2': + resolution: {integrity: sha512-+9Dz8sakS9pe7f2cBocpJXdeVjMopUDLgZs1yWeu7h++WqSbjUYv/JAJwKwXw1HV6gq1jyWjxuyn24E2GhoEcQ==} + engines: {node: '>=18.0.0'} - '@smithy/hash-node@3.0.11': - resolution: {integrity: sha512-emP23rwYyZhQBvklqTtwetkQlqbNYirDiEEwXl2v0GYWMnCzxst7ZaRAnWuy28njp5kAH54lvkdG37MblZzaHA==} - engines: {node: '>=16.0.0'} + '@smithy/hash-node@4.0.2': + resolution: {integrity: sha512-VnTpYPnRUE7yVhWozFdlxcYknv9UN7CeOqSrMH+V877v4oqtVYuoqhIhtSjmGPvYrYnAkaM61sLMKHvxL138yg==} + engines: {node: '>=18.0.0'} - '@smithy/invalid-dependency@3.0.11': - resolution: {integrity: sha512-NuQmVPEJjUX6c+UELyVz8kUx8Q539EDeNwbRyu4IIF8MeV7hUtq1FB3SHVyki2u++5XLMFqngeMKk7ccspnNyQ==} + '@smithy/invalid-dependency@4.0.2': + resolution: {integrity: sha512-GatB4+2DTpgWPday+mnUkoumP54u/MDM/5u44KF9hIu8jF0uafZtQLcdfIKkIcUNuF/fBojpLEHZS/56JqPeXQ==} + engines: {node: '>=18.0.0'} '@smithy/is-array-buffer@2.2.0': resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} engines: {node: '>=14.0.0'} - '@smithy/is-array-buffer@3.0.0': - resolution: {integrity: sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==} - engines: {node: '>=16.0.0'} + '@smithy/is-array-buffer@4.0.0': + resolution: {integrity: sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==} + engines: {node: '>=18.0.0'} - '@smithy/middleware-content-length@3.0.13': - resolution: {integrity: sha512-zfMhzojhFpIX3P5ug7jxTjfUcIPcGjcQYzB9t+rv0g1TX7B0QdwONW+ATouaLoD7h7LOw/ZlXfkq4xJ/g2TrIw==} - engines: {node: '>=16.0.0'} + '@smithy/middleware-content-length@4.0.2': + resolution: {integrity: sha512-hAfEXm1zU+ELvucxqQ7I8SszwQ4znWMbNv6PLMndN83JJN41EPuS93AIyh2N+gJ6x8QFhzSO6b7q2e6oClDI8A==} + engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@3.2.7': - resolution: {integrity: sha512-GTxSKf280aJBANGN97MomUQhW1VNxZ6w7HAj/pvZM5MUHbMPOGnWOp1PRYKi4czMaHNj9bdiA+ZarmT3Wkdqiw==} - engines: {node: '>=16.0.0'} + '@smithy/middleware-endpoint@4.1.0': + resolution: {integrity: sha512-xhLimgNCbCzsUppRTGXWkZywksuTThxaIB0HwbpsVLY5sceac4e1TZ/WKYqufQLaUy+gUSJGNdwD2jo3cXL0iA==} + engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@3.0.32': - resolution: {integrity: sha512-v8gVA9HqibuZkFuFpfkC/EcHE8no/3Mv3JvRUGly63Axt4yyas1WDVOasFSdiqm2hZVpY7/k8mRT1Wd5k7r3Yw==} - engines: {node: '>=16.0.0'} + '@smithy/middleware-retry@4.1.0': + resolution: {integrity: sha512-2zAagd1s6hAaI/ap6SXi5T3dDwBOczOMCSkkYzktqN1+tzbk1GAsHNAdo/1uzxz3Ky02jvZQwbi/vmDA6z4Oyg==} + engines: {node: '>=18.0.0'} - '@smithy/middleware-serde@3.0.11': - resolution: {integrity: sha512-KzPAeySp/fOoQA82TpnwItvX8BBURecpx6ZMu75EZDkAcnPtO6vf7q4aH5QHs/F1s3/snQaSFbbUMcFFZ086Mw==} - engines: {node: '>=16.0.0'} + '@smithy/middleware-serde@4.0.3': + resolution: {integrity: sha512-rfgDVrgLEVMmMn0BI8O+8OVr6vXzjV7HZj57l0QxslhzbvVfikZbVfBVthjLHqib4BW44QhcIgJpvebHlRaC9A==} + engines: {node: '>=18.0.0'} - '@smithy/middleware-stack@3.0.11': - resolution: {integrity: sha512-1HGo9a6/ikgOMrTrWL/WiN9N8GSVYpuRQO5kjstAq4CvV59bjqnh7TbdXGQ4vxLD3xlSjfBjq5t1SOELePsLnA==} - engines: {node: '>=16.0.0'} + '@smithy/middleware-stack@4.0.2': + resolution: {integrity: sha512-eSPVcuJJGVYrFYu2hEq8g8WWdJav3sdrI4o2c6z/rjnYDd3xH9j9E7deZQCzFn4QvGPouLngH3dQ+QVTxv5bOQ==} + engines: {node: '>=18.0.0'} - '@smithy/node-config-provider@3.1.12': - resolution: {integrity: sha512-O9LVEu5J/u/FuNlZs+L7Ikn3lz7VB9hb0GtPT9MQeiBmtK8RSY3ULmsZgXhe6VAlgTw0YO+paQx4p8xdbs43vQ==} - engines: {node: '>=16.0.0'} + '@smithy/node-config-provider@4.0.2': + resolution: {integrity: sha512-WgCkILRZfJwJ4Da92a6t3ozN/zcvYyJGUTmfGbgS/FkCcoCjl7G4FJaCDN1ySdvLvemnQeo25FdkyMSTSwulsw==} + engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@3.3.3': - resolution: {integrity: sha512-BrpZOaZ4RCbcJ2igiSNG16S+kgAc65l/2hmxWdmhyoGWHTLlzQzr06PXavJp9OBlPEG/sHlqdxjWmjzV66+BSQ==} - engines: {node: '>=16.0.0'} + '@smithy/node-http-handler@4.0.4': + resolution: {integrity: sha512-/mdqabuAT3o/ihBGjL94PUbTSPSRJ0eeVTdgADzow0wRJ0rN4A27EOrtlK56MYiO1fDvlO3jVTCxQtQmK9dZ1g==} + engines: {node: '>=18.0.0'} - '@smithy/property-provider@3.1.11': - resolution: {integrity: sha512-I/+TMc4XTQ3QAjXfOcUWbSS073oOEAxgx4aZy8jHaf8JQnRkq2SZWw8+PfDtBvLUjcGMdxl+YwtzWe6i5uhL/A==} - engines: {node: '>=16.0.0'} + '@smithy/property-provider@4.0.2': + resolution: {integrity: sha512-wNRoQC1uISOuNc2s4hkOYwYllmiyrvVXWMtq+TysNRVQaHm4yoafYQyjN/goYZS+QbYlPIbb/QRjaUZMuzwQ7A==} + engines: {node: '>=18.0.0'} - '@smithy/protocol-http@4.1.8': - resolution: {integrity: sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw==} - engines: {node: '>=16.0.0'} + '@smithy/protocol-http@5.1.0': + resolution: {integrity: sha512-KxAOL1nUNw2JTYrtviRRjEnykIDhxc84qMBzxvu1MUfQfHTuBlCG7PA6EdVwqpJjH7glw7FqQoFxUJSyBQgu7g==} + engines: {node: '>=18.0.0'} - '@smithy/querystring-builder@3.0.11': - resolution: {integrity: sha512-u+5HV/9uJaeLj5XTb6+IEF/dokWWkEqJ0XiaRRogyREmKGUgZnNecLucADLdauWFKUNbQfulHFEZEdjwEBjXRg==} - engines: {node: '>=16.0.0'} + '@smithy/querystring-builder@4.0.2': + resolution: {integrity: sha512-NTOs0FwHw1vimmQM4ebh+wFQvOwkEf/kQL6bSM1Lock+Bv4I89B3hGYoUEPkmvYPkDKyp5UdXJYu+PoTQ3T31Q==} + engines: {node: '>=18.0.0'} - '@smithy/querystring-parser@3.0.11': - resolution: {integrity: sha512-Je3kFvCsFMnso1ilPwA7GtlbPaTixa3WwC+K21kmMZHsBEOZYQaqxcMqeFFoU7/slFjKDIpiiPydvdJm8Q/MCw==} - engines: {node: '>=16.0.0'} + '@smithy/querystring-parser@4.0.2': + resolution: {integrity: sha512-v6w8wnmZcVXjfVLjxw8qF7OwESD9wnpjp0Dqry/Pod0/5vcEA3qxCr+BhbOHlxS8O+29eLpT3aagxXGwIoEk7Q==} + engines: {node: '>=18.0.0'} - '@smithy/service-error-classification@3.0.11': - resolution: {integrity: sha512-QnYDPkyewrJzCyaeI2Rmp7pDwbUETe+hU8ADkXmgNusO1bgHBH7ovXJiYmba8t0fNfJx75fE8dlM6SEmZxheog==} - engines: {node: '>=16.0.0'} + '@smithy/service-error-classification@4.0.2': + resolution: {integrity: sha512-LA86xeFpTKn270Hbkixqs5n73S+LVM0/VZco8dqd+JT75Dyx3Lcw/MraL7ybjmz786+160K8rPOmhsq0SocoJQ==} + engines: {node: '>=18.0.0'} - '@smithy/shared-ini-file-loader@3.1.12': - resolution: {integrity: sha512-1xKSGI+U9KKdbG2qDvIR9dGrw3CNx+baqJfyr0igKEpjbHL5stsqAesYBzHChYHlelWtb87VnLWlhvfCz13H8Q==} - engines: {node: '>=16.0.0'} + '@smithy/shared-ini-file-loader@4.0.2': + resolution: {integrity: sha512-J9/gTWBGVuFZ01oVA6vdb4DAjf1XbDhK6sLsu3OS9qmLrS6KB5ygpeHiM3miIbj1qgSJ96GYszXFWv6ErJ8QEw==} + engines: {node: '>=18.0.0'} - '@smithy/signature-v4@4.2.4': - resolution: {integrity: sha512-5JWeMQYg81TgU4cG+OexAWdvDTs5JDdbEZx+Qr1iPbvo91QFGzjy0IkXAKaXUHqmKUJgSHK0ZxnCkgZpzkeNTA==} - engines: {node: '>=16.0.0'} + '@smithy/signature-v4@5.0.2': + resolution: {integrity: sha512-Mz+mc7okA73Lyz8zQKJNyr7lIcHLiPYp0+oiqiMNc/t7/Kf2BENs5d63pEj7oPqdjaum6g0Fc8wC78dY1TgtXw==} + engines: {node: '>=18.0.0'} - '@smithy/smithy-client@3.5.2': - resolution: {integrity: sha512-h7xn+1wlpbXyLrtvo/teHR1SFGIIrQ3imzG0nz43zVLAJgvfC1Mtdwa1pFhoIOYrt/TiNjt4pD0gSYQEdZSBtg==} - engines: {node: '>=16.0.0'} + '@smithy/smithy-client@4.2.0': + resolution: {integrity: sha512-Qs65/w30pWV7LSFAez9DKy0Koaoh3iHhpcpCCJ4waj/iqwsuSzJna2+vYwq46yBaqO5ZbP9TjUsATUNxrKeBdw==} + engines: {node: '>=18.0.0'} - '@smithy/types@3.7.2': - resolution: {integrity: sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==} - engines: {node: '>=16.0.0'} + '@smithy/types@4.2.0': + resolution: {integrity: sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==} + engines: {node: '>=18.0.0'} - '@smithy/url-parser@3.0.11': - resolution: {integrity: sha512-TmlqXkSk8ZPhfc+SQutjmFr5FjC0av3GZP4B/10caK1SbRwe/v+Wzu/R6xEKxoNqL+8nY18s1byiy6HqPG37Aw==} + '@smithy/url-parser@4.0.2': + resolution: {integrity: sha512-Bm8n3j2ScqnT+kJaClSVCMeiSenK6jVAzZCNewsYWuZtnBehEz4r2qP0riZySZVfzB+03XZHJeqfmJDkeeSLiQ==} + engines: {node: '>=18.0.0'} - '@smithy/util-base64@3.0.0': - resolution: {integrity: sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==} - engines: {node: '>=16.0.0'} + '@smithy/util-base64@4.0.0': + resolution: {integrity: sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==} + engines: {node: '>=18.0.0'} - '@smithy/util-body-length-browser@3.0.0': - resolution: {integrity: sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==} + '@smithy/util-body-length-browser@4.0.0': + resolution: {integrity: sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==} + engines: {node: '>=18.0.0'} - '@smithy/util-body-length-node@3.0.0': - resolution: {integrity: sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==} - engines: {node: '>=16.0.0'} + '@smithy/util-body-length-node@4.0.0': + resolution: {integrity: sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==} + engines: {node: '>=18.0.0'} '@smithy/util-buffer-from@2.2.0': resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} engines: {node: '>=14.0.0'} - '@smithy/util-buffer-from@3.0.0': - resolution: {integrity: sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==} - engines: {node: '>=16.0.0'} + '@smithy/util-buffer-from@4.0.0': + resolution: {integrity: sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==} + engines: {node: '>=18.0.0'} - '@smithy/util-config-provider@3.0.0': - resolution: {integrity: sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==} - engines: {node: '>=16.0.0'} + '@smithy/util-config-provider@4.0.0': + resolution: {integrity: sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==} + engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-browser@3.0.32': - resolution: {integrity: sha512-FAGsnm/xJ19SZeoqGyo9CosqjUlm+XJTmygDMktebvDKw3bKiIiZ40O1MA6Z52KLmekYU2GO7BEK7u6e7ZORKw==} - engines: {node: '>= 10.0.0'} + '@smithy/util-defaults-mode-browser@4.0.8': + resolution: {integrity: sha512-ZTypzBra+lI/LfTYZeop9UjoJhhGRTg3pxrNpfSTQLd3AJ37r2z4AXTKpq1rFXiiUIJsYyFgNJdjWRGP/cbBaQ==} + engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-node@3.0.32': - resolution: {integrity: sha512-2CzKhkPFCVdd15f3+0D1rldNlvJME8pVRBtVVsea2hy7lcOn0bGB0dTVUwzgfM4LW/aU4IOg3jWf25ZWaxbOiw==} - engines: {node: '>= 10.0.0'} + '@smithy/util-defaults-mode-node@4.0.8': + resolution: {integrity: sha512-Rgk0Jc/UDfRTzVthye/k2dDsz5Xxs9LZaKCNPgJTRyoyBoeiNCnHsYGOyu1PKN+sDyPnJzMOz22JbwxzBp9NNA==} + engines: {node: '>=18.0.0'} - '@smithy/util-endpoints@2.1.7': - resolution: {integrity: sha512-tSfcqKcN/Oo2STEYCABVuKgJ76nyyr6skGl9t15hs+YaiU06sgMkN7QYjo0BbVw+KT26zok3IzbdSOksQ4YzVw==} - engines: {node: '>=16.0.0'} + '@smithy/util-endpoints@3.0.2': + resolution: {integrity: sha512-6QSutU5ZyrpNbnd51zRTL7goojlcnuOB55+F9VBD+j8JpRY50IGamsjlycrmpn8PQkmJucFW8A0LSfXj7jjtLQ==} + engines: {node: '>=18.0.0'} - '@smithy/util-hex-encoding@3.0.0': - resolution: {integrity: sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==} - engines: {node: '>=16.0.0'} + '@smithy/util-hex-encoding@4.0.0': + resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==} + engines: {node: '>=18.0.0'} - '@smithy/util-middleware@3.0.11': - resolution: {integrity: sha512-dWpyc1e1R6VoXrwLoLDd57U1z6CwNSdkM69Ie4+6uYh2GC7Vg51Qtan7ITzczuVpqezdDTKJGJB95fFvvjU/ow==} - engines: {node: '>=16.0.0'} + '@smithy/util-middleware@4.0.2': + resolution: {integrity: sha512-6GDamTGLuBQVAEuQ4yDQ+ti/YINf/MEmIegrEeg7DdB/sld8BX1lqt9RRuIcABOhAGTA50bRbPzErez7SlDtDQ==} + engines: {node: '>=18.0.0'} - '@smithy/util-retry@3.0.11': - resolution: {integrity: sha512-hJUC6W7A3DQgaee3Hp9ZFcOxVDZzmBIRBPlUAk8/fSOEl7pE/aX7Dci0JycNOnm9Mfr0KV2XjIlUOcGWXQUdVQ==} - engines: {node: '>=16.0.0'} + '@smithy/util-retry@4.0.2': + resolution: {integrity: sha512-Qryc+QG+7BCpvjloFLQrmlSd0RsVRHejRXd78jNO3+oREueCjwG1CCEH1vduw/ZkM1U9TztwIKVIi3+8MJScGg==} + engines: {node: '>=18.0.0'} - '@smithy/util-stream@3.3.3': - resolution: {integrity: sha512-bOm0YMMxRjbI3X6QkWwADPFkh2AH2xBMQIB1IQgCsCRqXXpSJatgjUR3oxHthpYwFkw3WPkOt8VgMpJxC0rFqg==} - engines: {node: '>=16.0.0'} + '@smithy/util-stream@4.2.0': + resolution: {integrity: sha512-Vj1TtwWnuWqdgQI6YTUF5hQ/0jmFiOYsc51CSMgj7QfyO+RF4EnT2HNjoviNlOOmgzgvf3f5yno+EiC4vrnaWQ==} + engines: {node: '>=18.0.0'} - '@smithy/util-uri-escape@3.0.0': - resolution: {integrity: sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==} - engines: {node: '>=16.0.0'} + '@smithy/util-uri-escape@4.0.0': + resolution: {integrity: sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==} + engines: {node: '>=18.0.0'} '@smithy/util-utf8@2.3.0': resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} engines: {node: '>=14.0.0'} - '@smithy/util-utf8@3.0.0': - resolution: {integrity: sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==} - engines: {node: '>=16.0.0'} + '@smithy/util-utf8@4.0.0': + resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==} + engines: {node: '>=18.0.0'} - '@stylistic/eslint-plugin-ts@2.11.0': - resolution: {integrity: sha512-ZBxnfSjzxUiwCibbVCeYCYwZw+P5xaQw+pNA8B8uR42fdMQIOhUstXjJuS2nTHoW5CF4+vGSxbL4gklI8WxhyA==} + '@stylistic/eslint-plugin-ts@2.13.0': + resolution: {integrity: sha512-nooe1oTwz60T4wQhZ+5u0/GAu3ygkKF9vPPZeRn/meG71ntQ0EZXVOKEonluAYl/+CV2T+nN0dknHa4evAW13Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.40.0' @@ -3250,14 +3113,14 @@ packages: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} - '@tanstack/react-virtual@3.13.2': - resolution: {integrity: sha512-LceSUgABBKF6HSsHK2ZqHzQ37IKV/jlaWbHm+NyTa3/WNb/JZVcThDuTainf+PixltOOcFCYXwxbLpOX9sCx+g==} + '@tanstack/react-virtual@3.13.5': + resolution: {integrity: sha512-MzSSMGkFWCDSb2xXqmdbfQqBG4wcRI3JKVjpYGZG0CccnViLpfRW4tGU97ImfBbSYzvEWJ/2SK/OiIoSmcUBAA==} 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 - '@tanstack/virtual-core@3.13.2': - resolution: {integrity: sha512-Qzz4EgzMbO5gKrmqUondCjiHcuu4B1ftHb0pjCut661lXZdGoHeze9f/M8iwsK1t5LGR6aNuNGU7mxkowaW6RQ==} + '@tanstack/virtual-core@3.13.5': + resolution: {integrity: sha512-gMLNylxhJdUlfRR1G3U9rtuwUh2IjdrrniJIDcekVJN3/3i+bluvdMi3+eodnxzJq5nKnxnigo9h0lIpaqV6HQ==} '@testing-library/dom@10.4.0': resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} @@ -3301,8 +3164,8 @@ packages: '@types/babel__template@7.4.4': resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - '@types/babel__traverse@7.20.6': - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/babel__traverse@7.20.7': + resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} '@types/cacheable-request@6.0.3': resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} @@ -3326,14 +3189,11 @@ packages: resolution: {integrity: sha512-NIJokDkGv9h+MStCL1IuiL1FOHYVkszoWeNxJtSI5dcEKRGbX83JcVYNAgk019qOQgJkHtz9WdP0CDXvrArrGg==} deprecated: This is a stub types definition. electron provides its own type definitions, so you do not need this installed. - '@types/eslint@8.56.10': - resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} - '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/estree@1.0.7': + resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} '@types/file-saver@2.0.7': resolution: {integrity: sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==} @@ -3371,14 +3231,14 @@ packages: '@types/mdx@2.0.13': resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} - '@types/ms@0.7.34': - resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@20.17.16': - resolution: {integrity: sha512-vOTpLduLkZXePLxHiHsBLp98mHGnl8RptV4YAO3HfKO5UHjDvySGbxKtpYfy8Sx5+WKcgc45qNreJJRVM3L6mw==} + '@types/node@20.17.28': + resolution: {integrity: sha512-DHlH/fNL6Mho38jTy7/JT7sn2wnXI+wULR6PV4gy4VHLVvnrV/d3pHAMQHhc4gjdLmK2ZiPoMxzp6B3yRajLSQ==} - '@types/node@22.10.1': - resolution: {integrity: sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==} + '@types/node@22.13.14': + resolution: {integrity: sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==} '@types/path-browserify@1.0.3': resolution: {integrity: sha512-ZmHivEbNCBtAfcrFeBCiTjdIc2dey0l7oCGNGpSuRTy8jP6UVND7oUowlvDujBy8r2Hoa8bfFUOCiPWfmtkfxw==} @@ -3386,8 +3246,8 @@ packages: '@types/plist@3.0.5': resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==} - '@types/prop-types@15.7.13': - resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} + '@types/prop-types@15.7.14': + resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} '@types/raf@3.4.3': resolution: {integrity: sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==} @@ -3395,14 +3255,19 @@ packages: '@types/react-beautiful-dnd@13.1.8': resolution: {integrity: sha512-E3TyFsro9pQuK4r8S/OL6G99eq7p8v29sX0PM7oT8Z+PJfZvSQTx4zTQbUJ+QZXioAF0e7TGBEcA1XhYhCweyQ==} - '@types/react-dom@18.3.1': - resolution: {integrity: sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==} + '@types/react-dom@18.3.5': + resolution: {integrity: sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==} + peerDependencies: + '@types/react': ^18.0.0 '@types/react-redux@7.1.34': resolution: {integrity: sha512-GdFaVjEbYv4Fthm2ZLvj1VSCedV7TqE5y1kNwnjSdBOTXuRSgowux6J8TAct15T3CKBr63UMk+2CO7ilRhyrAQ==} - '@types/react@18.3.12': - resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} + '@types/react-window@1.8.8': + resolution: {integrity: sha512-8Ls660bHR1AUA2kuRvVG9D/4XpRC6wjAaPT9dil7Ckc76eP9TKWZwwmgfq8Q1LANX3QNDnoU4Zp48A3w+zK69Q==} + + '@types/react@18.3.20': + resolution: {integrity: sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==} '@types/responselike@1.0.3': resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} @@ -3416,86 +3281,71 @@ packages: '@types/uuid@9.0.8': resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - '@types/verror@1.10.10': - resolution: {integrity: sha512-l4MM0Jppn18hb9xmM6wwD1uTdShpf9Pn80aXTStnK1C94gtPvJcV2FrDmbOQUAQfJ1cKZHktkQUDwEqaAKXMMg==} + '@types/verror@1.10.11': + resolution: {integrity: sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==} '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.17.0': - resolution: {integrity: sha512-HU1KAdW3Tt8zQkdvNoIijfWDMvdSweFYm4hWh+KwhPstv+sCmWb89hCIP8msFm9N1R/ooh9honpSuvqKWlYy3w==} + '@typescript-eslint/eslint-plugin@8.28.0': + resolution: {integrity: sha512-lvFK3TCGAHsItNdWZ/1FkvpzCxTHUVuFrdnOGLMa0GGCFIbCgQWVk3CzCGdA7kM3qGVc+dfW9tr0Z/sHnGDFyg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.17.0': - resolution: {integrity: sha512-Drp39TXuUlD49F7ilHHCG7TTg8IkA+hxCuULdmzWYICxGXvDXmDmWEjJYZQYgf6l/TFfYNE167m7isnc3xlIEg==} + '@typescript-eslint/parser@8.28.0': + resolution: {integrity: sha512-LPcw1yHD3ToaDEoljFEfQ9j2xShY367h7FZ1sq5NJT9I3yj4LHer1Xd1yRSOdYy9BpsrxU7R+eoDokChYM53lQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/scope-manager@8.17.0': - resolution: {integrity: sha512-/ewp4XjvnxaREtqsZjF4Mfn078RD/9GmiEAtTeLQ7yFdKnqwTOgRMSvFz4et9U5RiJQ15WTGXPLj89zGusvxBg==} + '@typescript-eslint/scope-manager@8.28.0': + resolution: {integrity: sha512-u2oITX3BJwzWCapoZ/pXw6BCOl8rJP4Ij/3wPoGvY8XwvXflOzd1kLrDUUUAIEdJSFh+ASwdTHqtan9xSg8buw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.17.0': - resolution: {integrity: sha512-q38llWJYPd63rRnJ6wY/ZQqIzPrBCkPdpIsaCfkR3Q4t3p6sb422zougfad4TFW9+ElIFLVDzWGiGAfbb/v2qw==} + '@typescript-eslint/type-utils@8.28.0': + resolution: {integrity: sha512-oRoXu2v0Rsy/VoOGhtWrOKDiIehvI+YNrDk5Oqj40Mwm0Yt01FC/Q7nFqg088d3yAsR1ZcZFVfPCTTFCe/KPwg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/types@8.17.0': - resolution: {integrity: sha512-gY2TVzeve3z6crqh2Ic7Cr+CAv6pfb0Egee7J5UAVWCpVvDI/F71wNfolIim4FE6hT15EbpZFVUj9j5i38jYXA==} + '@typescript-eslint/types@8.28.0': + resolution: {integrity: sha512-bn4WS1bkKEjx7HqiwG2JNB3YJdC1q6Ue7GyGlwPHyt0TnVq6TtD/hiOdTZt71sq0s7UzqBFXD8t8o2e63tXgwA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.17.0': - resolution: {integrity: sha512-JqkOopc1nRKZpX+opvKqnM3XUlM7LpFMD0lYxTqOTKQfCWAmxw45e3qlOCsEqEB2yuacujivudOFpCnqkBDNMw==} + '@typescript-eslint/typescript-estree@8.28.0': + resolution: {integrity: sha512-H74nHEeBGeklctAVUvmDkxB1mk+PAZ9FiOMPFncdqeRBXxk1lWSYraHw8V12b7aa6Sg9HOBNbGdSHobBPuQSuA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.17.0': - resolution: {integrity: sha512-bQC8BnEkxqG8HBGKwG9wXlZqg37RKSMY7v/X8VEWD8JG2JuTHuNK0VFvMPMUKQcbk6B+tf05k+4AShAEtCtJ/w==} + '@typescript-eslint/utils@8.28.0': + resolution: {integrity: sha512-OELa9hbTYciYITqgurT1u/SzpQVtDLmQMFzy/N8pQE+tefOyCWT79jHsav294aTqV1q1u+VzqDGbuujvRYaeSQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/visitor-keys@8.17.0': - resolution: {integrity: sha512-1Hm7THLpO6ww5QU6H/Qp+AusUUl+z/CAm3cNZZ0jQvon9yicgO7Rwd+/WWRpMKLYV6p2UvdbR27c86rzCPpreg==} + '@typescript-eslint/visitor-keys@8.28.0': + resolution: {integrity: sha512-hbn8SZ8w4u2pRwgQ1GlUrPKE+t2XvcCW5tTRF7j6SMYIuYG37XuzIW44JCZPa36evi0Oy2SnM664BlIaAuQcvg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@uiw/codemirror-theme-vscode@4.23.6': - resolution: {integrity: sha512-xUo1ic+Kk5hnv5gy+cXU12GZVSnDjic8s8weKq8loPHF1dSR1e6gkKVIKZRnvoOZ302taKRk7phWpBUaWIuKQg==} + '@uiw/codemirror-theme-vscode@4.23.10': + resolution: {integrity: sha512-d9qGC6/yq6d+REMZUs7jrs2kGZoAAyNu0USOxsDa3Mqhh/dSUfC+ErDqwF02OfylsdcuPSzelu99EAvkjorpmQ==} - '@uiw/codemirror-themes@4.23.6': - resolution: {integrity: sha512-0dpuLQW+V6zrKvfvor/eo71V3tpr2L2Hsu8QZAdtSzksjWABxTOzH3ShaBRxCEsrz6sU9sa9o7ShwBMMDz59bQ==} + '@uiw/codemirror-themes@4.23.10': + resolution: {integrity: sha512-dU0UgEEgEXCAYpxuVDQ6fovE82XsqgHZckTJOH6Bs8xCi3Z7dwBKO4pXuiA8qGDwTOXOMjSzfi+pRViDm7OfWw==} peerDependencies: '@codemirror/language': '>=6.0.0' '@codemirror/state': '>=6.0.0' '@codemirror/view': '>=6.0.0' - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} '@unocss/astro@0.61.9': resolution: {integrity: sha512-adOXz4itYHxqhvQgJHlEU58EHDTtY2qrcEPVmQVk4qI1W+ezQV6nQMQvti8mS/HbFw3MOJhIY1MlJoZK36/cyw==} @@ -3583,11 +3433,11 @@ packages: peerDependencies: vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 - '@vanilla-extract/babel-plugin-debug-ids@1.1.0': - resolution: {integrity: sha512-Zy9bKjaL2P5zsrFYQJ8IjWGlFODmZrpvFmjFE0Zv8om55Pz1JtpJtL6DvlxlWUxbVaP1HKCqsmEfFOZN8fX/ZQ==} + '@vanilla-extract/babel-plugin-debug-ids@1.2.0': + resolution: {integrity: sha512-z5nx2QBnOhvmlmBKeRX5sPVLz437wV30u+GJL+Hzj1rGiJYVNvgIIlzUpRNjVQ0MgAgiQIqIUbqPnmMc6HmDlQ==} - '@vanilla-extract/css@1.16.1': - resolution: {integrity: sha512-3jKxH5ty/ZjmGoLAx8liY7e87FRCIJfnuufX/K9fQklu0YHP3ClrNisU++LkZuD+GZleqMSAQMF0r8Otln+OPQ==} + '@vanilla-extract/css@1.17.1': + resolution: {integrity: sha512-tOHQXHm10FrJeXKFeWE09JfDGN/tvV6mbjwoNB9k03u930Vg021vTnbrCwVLkECj9Zvh/SHLBHJ4r2flGqfovw==} '@vanilla-extract/integration@6.5.0': resolution: {integrity: sha512-E2YcfO8vA+vs+ua+gpvy1HRqvgWbI+MTlUpxA8FvatOvybuNcWAY0CKwQ/Gpj7rswYKtC6C7+xw33emM6/ImdQ==} @@ -3601,11 +3451,11 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 - '@vitest/expect@2.1.8': - resolution: {integrity: sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==} + '@vitest/expect@2.1.9': + resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==} - '@vitest/mocker@2.1.8': - resolution: {integrity: sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA==} + '@vitest/mocker@2.1.9': + resolution: {integrity: sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==} peerDependencies: msw: ^2.4.9 vite: ^5.0.0 @@ -3615,20 +3465,20 @@ packages: vite: optional: true - '@vitest/pretty-format@2.1.8': - resolution: {integrity: sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==} + '@vitest/pretty-format@2.1.9': + resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} - '@vitest/runner@2.1.8': - resolution: {integrity: sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg==} + '@vitest/runner@2.1.9': + resolution: {integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==} - '@vitest/snapshot@2.1.8': - resolution: {integrity: sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg==} + '@vitest/snapshot@2.1.9': + resolution: {integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==} - '@vitest/spy@2.1.8': - resolution: {integrity: sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg==} + '@vitest/spy@2.1.9': + resolution: {integrity: sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==} - '@vitest/utils@2.1.8': - resolution: {integrity: sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==} + '@vitest/utils@2.1.9': + resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} '@web3-storage/multipart-parser@1.0.0': resolution: {integrity: sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==} @@ -3681,6 +3531,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + engines: {node: '>=0.4.0'} + hasBin: true + agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -3697,17 +3552,15 @@ packages: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} - ai@4.1.2: - resolution: {integrity: sha512-11efhPorWFphIpeCgjW6r/jk4wB5RWUGjxayHblBXCq6YEc7o5ki7vlmSnESprsDkMEfmONBWb/xM8pWjR5O2g==} + ai@4.2.8: + resolution: {integrity: sha512-0gwfPZAuuQ+uTfk/GssrfnNTYxliCFKojbSQoEhzpbpSVaPao9NoU3iuE8vwBjWuDKqILRGzYGFE4+vTak0Oxg==} engines: {node: '>=18'} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc - zod: ^3.0.0 + zod: ^3.23.8 peerDependenciesMeta: react: optional: true - zod: - optional: true ajv-formats@3.0.1: resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} @@ -3952,8 +3805,8 @@ packages: browserify-zlib@0.2.0: resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} - browserslist@4.24.2: - resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -3981,14 +3834,18 @@ packages: resolution: {integrity: sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw==} engines: {node: '>=12.0.0'} + builder-util-runtime@9.3.1: + resolution: {integrity: sha512-2/egrNDDnRaxVwK3A+cJq6UOlqOdedGA7JPqCeJjN2Zjk1/QB/6QUi3b714ScIGS7HafFXTyzJEOr5b44I3kvQ==} + engines: {node: '>=12.0.0'} + builder-util@25.1.7: resolution: {integrity: sha512-7jPjzBwEGRbwNcep0gGNpLXG9P94VA3CPAZQCzxkFXiV2GMQKlziMbY//rXPI7WKfhsvGgFXjTcXdBEwgXw9ww==} builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} - bundle-require@5.0.0: - resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==} + bundle-require@5.1.0: + resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: esbuild: '>=0.18' @@ -4017,26 +3874,34 @@ packages: resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} engines: {node: '>=8'} - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001685: - resolution: {integrity: sha512-e/kJN1EMyHQzgcMEEgoo+YTCO1NGCmIYHk5Qk8jT6AazWemS5QFKJ5ShCJlH3GZrNIdZofcNCEwZqbMjjKzmnA==} + caniuse-lite@1.0.30001707: + resolution: {integrity: sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==} - canvg@3.0.10: - resolution: {integrity: sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==} + canvg@3.0.11: + resolution: {integrity: sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA==} engines: {node: '>=10.0.0'} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chai@5.1.2: - resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} + chai@5.2.0: + resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} engines: {node: '>=12'} chalk@3.0.0: @@ -4115,9 +3980,6 @@ packages: resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} engines: {node: '>=8'} - client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -4203,11 +4065,14 @@ packages: confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + confbox@0.2.1: + resolution: {integrity: sha512-hkT3yDPFbs95mNCy1+7qNKC6Pro+/ibzYxtM2iqEigpf0sVw+bg4Zh9/snjsBcf990vfIsg5+1U7VyiyBb3etg==} + config-file-ts@0.2.8-rc1: resolution: {integrity: sha512-GtNECbVI82bT4RiDIzBSVuTKoSHufnU7Ce7/42bkWZJZFLjmDF2WBpVsvRkhKCfKBnTBb3qZrBwPpFBU/Myvhg==} - consola@3.2.3: - resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} console-browserify@1.2.0: @@ -4320,8 +4185,8 @@ packages: engines: {node: '>=4'} hasBin: true - cssstyle@4.2.1: - resolution: {integrity: sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw==} + cssstyle@4.3.0: + resolution: {integrity: sha512-6r0NiY0xizYqfBvWp1G7WXJ06/bZyrk7Dc6PHql82C/pKGUTKu4yAX4Y8JPamb1ob9nBKuxWzCGTRuGwU3yxJQ==} engines: {node: '>=18'} csstype@3.1.3: @@ -4361,15 +4226,6 @@ packages: supports-color: optional: true - debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.0: resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} @@ -4382,8 +4238,8 @@ packages: decimal.js@10.5.0: resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} - decode-named-character-reference@1.0.2: - resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + decode-named-character-reference@1.1.0: + resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==} decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} @@ -4520,6 +4376,10 @@ packages: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} @@ -4549,8 +4409,8 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - electron-log@5.3.0: - resolution: {integrity: sha512-ILgbh2k9IKbSaN8NAbQriVteEhmkdLo/e4J1dg+JIBTFzXS/kO8zNRZBh/4YPwIT/zeyxF1jP6Xz8GLsPE2IBQ==} + electron-log@5.3.3: + resolution: {integrity: sha512-ZOnlgCVfhKC0Nef68L0wDhwhg8nh5QkpEOA+udjpBxcPfTHGgbZbfoCBS6hmAgVHTAWByHNPkHKpSbEOPGZcxA==} engines: {node: '>= 14'} electron-publish@25.1.7: @@ -4560,14 +4420,14 @@ packages: resolution: {integrity: sha512-Ok0bF13WWdTzZi9rCtPN8wUfwx+yDMmV6PAnCMqjNRKEXHmklW/rV+6DofV/Vf5qoAh+Bl9Bj7dQ+0W+IL2psg==} engines: {node: '>=20'} - electron-to-chromium@1.5.68: - resolution: {integrity: sha512-FgMdJlma0OzUYlbrtZ4AeXjKxKPk6KT8WOP8BjcqxWtlg8qyJQjRzPJzUtUn5GBg1oQ26hFs7HOOHJMYiJRnvQ==} + electron-to-chromium@1.5.128: + resolution: {integrity: sha512-bo1A4HH/NS522Ws0QNFIzyPcyUUNV/yyy70Ho1xqfGYzPUme2F/xr4tlEOuM6/A538U1vDA7a4XfCd1CKRegKQ==} - electron-updater@6.3.9: - resolution: {integrity: sha512-2PJNONi+iBidkoC5D1nzT9XqsE8Q1X28Fn6xRQhO3YX8qRRyJ3mkV4F1aQsuRnYPqq6Hw+E51y27W75WgDoofw==} + electron-updater@6.6.2: + resolution: {integrity: sha512-Cr4GDOkbAUqRHP5/oeOmH/L2Bn6+FQPxVLZtPbcmKZC63a1F3uu5EefYOssgZXG3u/zBlubbJ5PJdITdMVggbw==} - electron@33.3.2: - resolution: {integrity: sha512-2pWr0frM9UrZGX1d7eoFdMROw10h2vXIWJmXdjwlKnSWWUm18GCrEOUeDUr+IMgz5EjO7JM7FQDHDMApeMgHyg==} + electron@33.4.8: + resolution: {integrity: sha512-dy/92HufGG66PslDMlXuK6uhO+70tgiZ4esReTZgDcZ0E67jCJ7S4/et4yZSEjXiT7IyjZTf72QwQbTpANxW4g==} engines: {node: '>= 12.20.55'} hasBin: true @@ -4612,30 +4472,33 @@ packages: err-code@2.0.3: resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@1.5.4: - resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} - esbuild-plugins-node-modules-polyfill@1.6.8: - resolution: {integrity: sha512-bRB4qbgUDWrdY1eMk123KiaCSW9VzQ+QLZrmU7D//cCFkmksPd9mUMpmWoFK/rxjIeTfTSOpKCoGoimlvI+AWw==} + esbuild-plugins-node-modules-polyfill@1.7.0: + resolution: {integrity: sha512-Z81w5ReugIBAgufGeGWee+Uxzgs5Na4LprUAK3XlJEh2ktY3LkNuEGMaZyBXxQxGK8SQDS5yKLW5QKGF5qLjYA==} engines: {node: '>=14.0.0'} peerDependencies: - esbuild: '>=0.14.0 <=0.24.x' - - esbuild@0.17.19: - resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} - engines: {node: '>=12'} - hasBin: true + esbuild: '>=0.14.0 <=0.25.x' esbuild@0.17.6: resolution: {integrity: sha512-TKFRp9TxrJDdRWfSsSERKEovm6v30iHnrjlcGhLBOtReE28Yp1VSBRfO3GTaOFMoxsNerx4TjrhzSuma9ha83Q==} @@ -4657,6 +4520,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.25.1: + resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -4695,19 +4563,19 @@ packages: '@eslint/json': optional: true - eslint-plugin-jsonc@2.18.2: - resolution: {integrity: sha512-SDhJiSsWt3nItl/UuIv+ti4g3m4gpGkmnUJS9UWR3TrpyNsIcnJoBRD7Kof6cM4Rk3L0wrmY5Tm3z7ZPjR2uGg==} + eslint-plugin-jsonc@2.20.0: + resolution: {integrity: sha512-FRgCn9Hzk5eKboCbVMrr9QrhM0eO4G+WKH8IFXoaeqhM/2kuWzbStJn4kkr0VWL8J5H8RYZF+Aoam1vlBaZVkw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' - eslint-plugin-prettier@5.2.1: - resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} + eslint-plugin-prettier@5.2.5: + resolution: {integrity: sha512-IKKP8R87pJyMl7WWamLgPkloB16dagPIdd2FjBDbyRYPKo93wS/NbCOPh6gH+ieNLC+XZrhJt/kWj0PS/DFdmg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' eslint: '>=8.0.0' - eslint-config-prettier: '*' + eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' prettier: '>=3.0.0' peerDependenciesMeta: '@types/eslint': @@ -4715,8 +4583,8 @@ packages: eslint-config-prettier: optional: true - eslint-scope@8.2.0: - resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + eslint-scope@8.3.0: + resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: @@ -4727,8 +4595,8 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.16.0: - resolution: {integrity: sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==} + eslint@9.23.0: + resolution: {integrity: sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -4815,8 +4683,8 @@ packages: resolution: {integrity: sha512-v0eOBUbiaFojBu2s2NPBfYUoRR9GjcDNvCXVaqEf5vVfpIAh9f8RCo4vXTP8c63QRKCFwoLpMpTdPwwhEKVgzA==} engines: {node: '>=14.18'} - eventsource-parser@3.0.0: - resolution: {integrity: sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA==} + eventsource-parser@3.0.1: + resolution: {integrity: sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==} engines: {node: '>=18.0.0'} evp_bytestokey@1.0.3: @@ -4830,15 +4698,15 @@ packages: resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} engines: {node: '>=6'} - expect-type@1.1.0: - resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} + expect-type@1.2.0: + resolution: {integrity: sha512-80F22aiJ3GLyVnS/B3HzgR6RelZVumzj9jkL0Rhz4h0xYbNW9PjlQz5h3J/SShErbXBc295vseR4/MIbVmUbeA==} engines: {node: '>=12.0.0'} - exponential-backoff@3.1.1: - resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} + exponential-backoff@3.1.2: + resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} - express@4.21.1: - resolution: {integrity: sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==} + express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} exsolve@1.0.4: @@ -4856,14 +4724,17 @@ packages: resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==} engines: {'0': node >=0.6.0} + fast-content-type-parse@2.0.1: + resolution: {integrity: sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} fast-diff@1.3.0: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} fast-json-stable-stringify@2.1.0: @@ -4879,8 +4750,8 @@ packages: resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} hasBin: true - fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} fault@2.0.1: resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} @@ -4921,18 +4792,19 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flatted@3.3.2: - resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} - foreground-child@3.3.0: - resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} - form-data@4.0.1: - resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + form-data@4.0.2: + resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} engines: {node: '>= 6'} format@0.2.2: @@ -4947,12 +4819,12 @@ packages: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} - framer-motion@11.12.0: - resolution: {integrity: sha512-gZaZeqFM6pX9kMVti60hYAa75jGpSsGYWAHbBfIkuHN7DkVHVkxSxeNYnrGmHuM0zPkWTzQx10ZT+fDjn7N4SA==} + framer-motion@11.18.2: + resolution: {integrity: sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==} peerDependencies: '@emotion/is-prop-valid': '*' - react: ^18.0.0 - react-dom: ^18.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@emotion/is-prop-valid': optional: true @@ -5019,8 +4891,8 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} get-nonce@1.0.1: @@ -5031,6 +4903,10 @@ packages: resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} engines: {node: '>=8'} + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + get-source@2.0.12: resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} @@ -5042,8 +4918,8 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-tsconfig@4.8.1: - resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + get-tsconfig@4.10.0: + resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} @@ -5085,8 +4961,8 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@15.13.0: - resolution: {integrity: sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==} + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} engines: {node: '>=18'} globalthis@1.0.4: @@ -5096,8 +4972,8 @@ packages: globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - gopd@1.1.0: - resolution: {integrity: sha512-FQoVQnqcdk4hVM4JN1eromaun4iuS34oStkdlLENLdpULsuQcTyXj8w7ayhuUfPwEYZ1ZOooOTT6fdA9Vmx/RA==} + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} got@11.8.6: @@ -5125,10 +5001,6 @@ packages: has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - has-proto@1.1.0: - resolution: {integrity: sha512-QLdzI9IIO1Jg7f9GT1gXpPpXArAn6cS31R1eEZqz08Gc+uQ8/XiqHWt17Fiw+2p6oTTIq5GXEpQkAlA88YRl/Q==} - engines: {node: '>= 0.4'} - has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -5151,8 +5023,8 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hast-util-from-parse5@8.0.2: - resolution: {integrity: sha512-SfMzfdAi/zAoZ1KkFEyyeXBn7u/ShQrfd675ZEE9M3qj+PMFX05xubzRyF76CCSJu8au9jgVxDV1+okFvgZU4A==} + hast-util-from-parse5@8.0.3: + resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} hast-util-parse-selector@4.0.0: resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} @@ -5166,11 +5038,11 @@ packages: hast-util-to-estree@2.3.3: resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==} - hast-util-to-html@9.0.3: - resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==} + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} - hast-util-to-jsx-runtime@2.3.2: - resolution: {integrity: sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==} + hast-util-to-jsx-runtime@2.3.6: + resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} hast-util-to-parse5@8.0.0: resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} @@ -5181,8 +5053,8 @@ packages: hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - hastscript@9.0.0: - resolution: {integrity: sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw==} + hastscript@9.0.1: + resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} @@ -5287,11 +5159,11 @@ packages: immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - immutable@5.0.3: - resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} + immutable@5.1.1: + resolution: {integrity: sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg==} - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} importx@0.4.4: @@ -5321,9 +5193,6 @@ packages: inline-style-parser@0.2.4: resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} - invariant@2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - ip-address@9.0.5: resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} engines: {node: '>= 12'} @@ -5338,8 +5207,8 @@ packages: is-alphanumerical@2.0.1: resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} - is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + is-arguments@1.2.0: + resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} engines: {node: '>= 0.4'} is-arrayish@0.3.2: @@ -5361,8 +5230,8 @@ packages: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} hasBin: true - is-core-module@2.15.1: - resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} is-decimal@2.0.1: @@ -5379,8 +5248,8 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} engines: {node: '>= 0.4'} is-glob@4.0.3: @@ -5423,12 +5292,16 @@ packages: is-reference@3.0.3: resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} is-unicode-supported@0.1.0: @@ -5453,9 +5326,9 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - isomorphic-git@1.27.2: - resolution: {integrity: sha512-nCiz+ieOkWb5kDJSSckDTiMjTcgkxqH2xuiQmw1Y6O/spwx4d6TKYSfGCd4f71HGvUYcRSUGqJEI+3uN6UQlOw==} - engines: {node: '>=12'} + isomorphic-git@1.30.1: + resolution: {integrity: sha512-eWBlPIPDOctGY/bTUc/whs6EZ8YvnG1H2kOjTCJ/AkvBWUzODXcfulhpiA8Y4Px9e+bRYYkifE5fSE8FcRk8Ew==} + engines: {node: '>=14.17'} hasBin: true isomorphic-timers-promises@1.0.1: @@ -5477,16 +5350,16 @@ packages: javascript-stringify@2.1.0: resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==} - jiti@1.21.6: - resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true jiti@2.0.0-beta.3: resolution: {integrity: sha512-pmfRbVRs/7khFrSAYnSiJ8C0D5GvzkE4Ey2pAvUcJsw1ly/p+7ut27jbJrjY79BpAJQJ4gXYFtK6d1Aub+9baQ==} hasBin: true - jose@5.9.6: - resolution: {integrity: sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==} + jose@5.10.0: + resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} js-cookie@3.0.5: resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} @@ -5591,8 +5464,8 @@ packages: lie@3.3.0: resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} - lilconfig@3.1.2: - resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} load-tsconfig@0.2.5: @@ -5603,8 +5476,8 @@ packages: resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} engines: {node: '>= 12.13.0'} - local-pkg@0.5.1: - resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} + local-pkg@1.1.1: + resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} engines: {node: '>=14'} locate-path@6.0.0: @@ -5656,8 +5529,8 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@3.1.2: - resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} + loupe@3.1.3: + resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} lowercase-keys@2.0.0: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} @@ -5677,6 +5550,11 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} + lucide-react@0.485.0: + resolution: {integrity: sha512-NvyQJ0LKyyCxL23nPKESlr/jmz8r7fJO1bkuptSNYSy0s8VVj4ojhX0YAgmE1e0ewfxUZjIlZpvH+otfTnla8Q==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true @@ -5684,8 +5562,8 @@ packages: magic-string@0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - magic-string@0.30.14: - resolution: {integrity: sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==} + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} make-fetch-happen@10.2.1: resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} @@ -5702,14 +5580,18 @@ packages: resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} engines: {node: '>=10'} + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} mdast-util-definitions@5.1.2: resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} - mdast-util-find-and-replace@3.0.1: - resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} mdast-util-from-markdown@1.3.1: resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} @@ -5723,8 +5605,8 @@ packages: mdast-util-gfm-autolink-literal@2.0.1: resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} - mdast-util-gfm-footnote@2.0.0: - resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==} + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} mdast-util-gfm-strikethrough@2.0.0: resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} @@ -5735,8 +5617,8 @@ packages: mdast-util-gfm-task-list-item@2.0.0: resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} - mdast-util-gfm@3.0.0: - resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==} + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} mdast-util-mdx-expression@1.3.2: resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} @@ -5747,8 +5629,8 @@ packages: mdast-util-mdx-jsx@2.1.4: resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} - mdast-util-mdx-jsx@3.1.3: - resolution: {integrity: sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==} + mdast-util-mdx-jsx@3.2.0: + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} mdast-util-mdx@2.0.1: resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==} @@ -5813,8 +5695,8 @@ packages: micromark-core-commonmark@1.1.0: resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} - micromark-core-commonmark@2.0.2: - resolution: {integrity: sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==} + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} micromark-extension-frontmatter@1.1.1: resolution: {integrity: sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==} @@ -5828,8 +5710,8 @@ packages: micromark-extension-gfm-strikethrough@2.1.0: resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} - micromark-extension-gfm-table@2.1.0: - resolution: {integrity: sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==} + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} micromark-extension-gfm-tagfilter@2.0.0: resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} @@ -5960,8 +5842,8 @@ packages: micromark-util-subtokenize@1.1.0: resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} - micromark-util-subtokenize@2.0.3: - resolution: {integrity: sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg==} + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} micromark-util-symbol@1.1.0: resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} @@ -5972,14 +5854,14 @@ packages: micromark-util-types@1.1.0: resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} - micromark-util-types@2.0.1: - resolution: {integrity: sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==} + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} micromark@3.2.0: resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} - micromark@4.0.1: - resolution: {integrity: sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==} + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} @@ -5993,6 +5875,10 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} @@ -6121,8 +6007,8 @@ packages: engines: {node: '>=10'} hasBin: true - mlly@1.7.3: - resolution: {integrity: sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==} + mlly@1.7.4: + resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} modern-ahocorasick@1.1.0: resolution: {integrity: sha512-sEKPVl2rM+MNVkGQt3ChdmD8YsigmXdn5NifZn6jiwn9LRJpWm8F3guhaqrJT/JOat6pwpbXEk6kv+b9DMIjsQ==} @@ -6131,6 +6017,12 @@ packages: resolution: {integrity: sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==} engines: {node: '>= 0.8.0'} + motion-dom@11.18.1: + resolution: {integrity: sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==} + + motion-utils@11.18.1: + resolution: {integrity: sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==} + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -6139,8 +6031,8 @@ packages: resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} engines: {node: '>=10'} - mrmime@2.0.0: - resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} ms@2.0.0: @@ -6153,13 +6045,13 @@ packages: resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} hasBin: true - nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@3.3.8: - resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + nanoid@3.3.6: + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -6185,15 +6077,15 @@ packages: node-addon-api@1.7.2: resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==} - node-api-version@0.2.0: - resolution: {integrity: sha512-fthTTsi8CxaBXMaBAD7ST2uylwvsnYxh2PfaScwpMhos6KlSFajXQPcM4ogNE1q2s3Lbz9GCGqeIHC+C6OZnKg==} + node-api-version@0.2.1: + resolution: {integrity: sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==} node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} - node-fetch-native@1.6.4: - resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} + node-fetch-native@1.6.6: + resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==} node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} @@ -6204,11 +6096,11 @@ packages: engines: {node: ^12.13 || ^14.13 || >=16} hasBin: true - node-releases@2.0.18: - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} - node-stdlib-browser@1.3.0: - resolution: {integrity: sha512-g/koYzOr9Fb1Jc+tHUHlFd5gODjGn48tHexUK8q6iqOVriEgSnd3/1T7myBYc+0KBVze/7F7n65ec9rW6OD7xw==} + node-stdlib-browser@1.3.1: + resolution: {integrity: sha512-X75ZN8DCLftGM5iKwoYLA3rjnrAEs97MkzvSd4q2746Tgpg8b8XWiBGiBG4ZpgcAqBgtgPHTiAc8ZMCvZuikDw==} engines: {node: '>=10'} nopt@6.0.0: @@ -6253,15 +6145,15 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} deprecated: This package is no longer supported. - nwsapi@2.2.18: - resolution: {integrity: sha512-p1TRH/edngVEHVbwqWnxUViEmq5znDvyB+Sik5cmuLpGOIfDf/39zLiq3swPF8Vakqn+gvNiOQAZu8djYlQILA==} + nwsapi@2.2.20: + resolution: {integrity: sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==} object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-inspect@1.13.3: - resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} object-is@1.1.6: @@ -6272,8 +6164,8 @@ packages: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} ofetch@1.4.1: @@ -6310,8 +6202,8 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} - oniguruma-to-es@0.7.0: - resolution: {integrity: sha512-HRaRh09cE0gRS3+wi2zxekB+I5L8C/gN60S+vb11eADHUaB/q4u8wGGOX3GvwvitG8ixaeycZfeoyruKQzUgNg==} + oniguruma-to-es@2.3.0: + resolution: {integrity: sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==} optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} @@ -6346,8 +6238,8 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - package-manager-detector@0.2.6: - resolution: {integrity: sha512-9vPH3qooBlYRJdmdYP00nvjZOulm40r5dhtal8st18ctf+6S1k7pi5yIHLvI4w5D70x0Y+xdVD9qITH0QO/A8A==} + package-manager-detector@0.2.11: + resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} pako@0.2.9: resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} @@ -6363,8 +6255,8 @@ packages: resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==} engines: {node: '>= 0.10'} - parse-entities@4.0.1: - resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} parse-ms@2.1.0: resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} @@ -6402,8 +6294,8 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-to-regexp@0.1.10: - resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} + path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} @@ -6465,20 +6357,23 @@ packages: resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} engines: {node: '>=10'} - pkg-types@1.2.1: - resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==} + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.1.0: + resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} plist@3.1.0: resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} engines: {node: '>=10.4.0'} - pnpm@9.14.4: - resolution: {integrity: sha512-yBgLP75OS8oCyUI0cXiWtVKXQKbLrfGfp4JUJwQD6i8n1OHUagig9WyJtj3I6/0+5TMm2nICc3lOYgD88NGEqw==} + pnpm@9.15.9: + resolution: {integrity: sha512-aARhQYk8ZvrQHAeSMRKOmvuJ74fiaR1p5NQO7iKJiClf1GghgbrlW1hBjDolO95lpQXsfF+UA+zlzDzTfc8lMQ==} engines: {node: '>=18.12'} hasBin: true - possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} postcss-discard-duplicates@5.1.0: @@ -6505,8 +6400,8 @@ packages: peerDependencies: postcss: ^8.1.0 - postcss-modules-local-by-default@4.1.0: - resolution: {integrity: sha512-rm0bdSv4jC3BDma3s9H19ZddW0aHX6EoqwDYU2IfZhRN+53QrufTRo2IdkAbRqLx4R2IYbZnbjKKxg4VN5oU9Q==} + postcss-modules-local-by-default@4.2.0: + resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 @@ -6528,15 +6423,15 @@ packages: peerDependencies: postcss: ^8.0.0 - postcss-selector-parser@7.0.0: - resolution: {integrity: sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==} + postcss-selector-parser@7.1.0: + resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} engines: {node: '>=4'} postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.49: - resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -6552,8 +6447,8 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.4.1: - resolution: {integrity: sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg==} + prettier@3.5.3: + resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} engines: {node: '>=14'} hasBin: true @@ -6601,6 +6496,9 @@ packages: property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + property-information@7.0.0: + resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} + proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -6628,10 +6526,13 @@ packages: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} - qs@6.13.1: - resolution: {integrity: sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==} + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} engines: {node: '>=0.6'} + quansync@0.2.10: + resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} + querystring-es3@0.2.1: resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} engines: {node: '>=0.4.x'} @@ -6716,8 +6617,8 @@ packages: react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - react-markdown@9.0.1: - resolution: {integrity: sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==} + react-markdown@9.1.0: + resolution: {integrity: sha512-xaijuJB0kzGiUdG7nc2MOMDUDBWPyGAjZtUrow9XxUeua8IqeP+VlIfAZ3bphpcLTnSZXz6z9jcVC/TCwbfgdw==} peerDependencies: '@types/react': '>=18' react: '>=18' @@ -6738,16 +6639,6 @@ packages: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} - react-remove-scroll-bar@2.3.6: - resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - react-remove-scroll-bar@2.3.8: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} @@ -6758,16 +6649,6 @@ packages: '@types/react': optional: true - react-remove-scroll@2.6.0: - resolution: {integrity: sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - react-remove-scroll@2.6.3: resolution: {integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==} engines: {node: '>=10'} @@ -6797,16 +6678,6 @@ packages: peerDependencies: react: '>=16.8' - react-style-singleton@2.2.1: - resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - react-style-singleton@2.2.3: resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} engines: {node: '>=10'} @@ -6823,6 +6694,13 @@ packages: react: '>=18' react-dom: '>=18' + react-window@1.8.11: + resolution: {integrity: sha512-+SRbUVT2scadgFSWx+R1P754xHPEqvcfSfVX10QYg6POOz+WNgkN48pS+BtZNIMGiL1HYrSEiCkwsMS15QogEQ==} + engines: {node: '>8.0.0'} + peerDependencies: + react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} @@ -6858,14 +6736,14 @@ packages: regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - regex-recursion@4.3.0: - resolution: {integrity: sha512-5LcLnizwjcQ2ALfOj95MjcatxyqF5RPySx9yT+PaXu3Gox2vyAtLDjHB8NTJLtMGkvyau6nI3CfpwFCjPUIs/A==} + regex-recursion@5.1.1: + resolution: {integrity: sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==} regex-utilities@2.3.0: resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} - regex@5.0.2: - resolution: {integrity: sha512-/pczGbKIQgfTMRV0XjABvc5RzLqQmwqxLHdQao2RTXPk+pmTXB2P0IaUHYdYyk412YLwUIkaeMd5T+RzVgTqnQ==} + regex@5.1.1: + resolution: {integrity: sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==} rehype-raw@7.0.0: resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} @@ -6876,8 +6754,8 @@ packages: remark-frontmatter@4.0.1: resolution: {integrity: sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==} - remark-gfm@4.0.0: - resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==} + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} remark-mdx-frontmatter@1.1.1: resolution: {integrity: sha512-7teX9DW4tI2WZkXS4DBxneYSY7NHiXl4AKdWDO9LXVweULlCT8OPWsOjLEnMIXViN1j+QcY8mfbq3k0EK6x3uA==} @@ -6971,8 +6849,9 @@ packages: resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} engines: {node: '>=10'} - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} hasBin: true responselike@2.0.1: @@ -6986,8 +6865,8 @@ packages: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} rgbcolor@1.0.1: @@ -7021,8 +6900,8 @@ packages: rollup-pluginutils@2.8.2: resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} - rollup@4.28.0: - resolution: {integrity: sha512-G9GOrmgWHBma4YfCcX8PjH0qhXSdH8B4HDE2o4/jaxj93S4DPCIDoLcXz99eWMji4hB29UFCEd7B2gwGJDR9cQ==} + rollup@4.38.0: + resolution: {integrity: sha512-5SsIRtJy9bf1ErAOiFMFzl64Ex9X5V7bnJ+WlFMb+zmP459OSWCEG7b0ERZ+PEU7xPt4OG3RHbrp1LJlXxYTrw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -7032,8 +6911,8 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} @@ -7045,134 +6924,138 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} sanitize-filename@1.6.3: resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} - sass-embedded-android-arm64@1.81.0: - resolution: {integrity: sha512-I36P77/PKAHx6sqOmexO2iEY5kpsmQ1VxcgITZSOxPMQhdB6m4t3bTabfDuWQQmCrqqiNFtLQHeytB65bUqwiw==} + sass-embedded-android-arm64@1.86.0: + resolution: {integrity: sha512-r7MZtlAI2VFUnKE8B5UOrpoE6OGpdf1dIB6ndoxb3oiURgMyfTVU7yvJcL12GGvtVwQ2boCj6dq//Lqq9CXPlQ==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [android] - sass-embedded-android-arm@1.81.0: - resolution: {integrity: sha512-NWEmIuaIEsGFNsIRa+5JpIpPJyZ32H15E85CNZqEIhhwWlk9UNw7vlOCmTH8MtabtnACwC/2NG8VyNa3nxKzUQ==} + sass-embedded-android-arm@1.86.0: + resolution: {integrity: sha512-NS8v6BCbzskXUMBtzfuB+j2yQMgiwg5edKHTYfQU7gAWai2hkRhS06YNEMff3aRxV0IFInxPRHOobd8xWPHqeA==} engines: {node: '>=14.0.0'} cpu: [arm] os: [android] - sass-embedded-android-ia32@1.81.0: - resolution: {integrity: sha512-k8V1usXw30w1GVxvrteG1RzgYJzYQ9PfL2aeOqGdroBN7zYTD9VGJXTGcxA4IeeRxmRd7szVW2mKXXS472fh8g==} + sass-embedded-android-ia32@1.86.0: + resolution: {integrity: sha512-UjfElrGaOTNOnxLZLxf6MFndFIe7zyK+81f83BioZ7/jcoAd6iCHZT8yQMvu8wINyVodPcaXZl8KxlKcl62VAA==} engines: {node: '>=14.0.0'} cpu: [ia32] os: [android] - sass-embedded-android-riscv64@1.81.0: - resolution: {integrity: sha512-RXlanyLXEpN/DEehXgLuKPsqT//GYlsGFxKXgRiCc8hIPAueFLQXKJmLWlL3BEtHgmFdbsStIu4aZCcb1hOFlQ==} + sass-embedded-android-riscv64@1.86.0: + resolution: {integrity: sha512-TsqCLxHWLFS2mbpUkL/nge3jSkaPK2VmLkkoi5iO/EQT4SFvm1lNUgPwlLXu9DplZ+aqGVzRS9Y6Psjv+qW7kw==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [android] - sass-embedded-android-x64@1.81.0: - resolution: {integrity: sha512-RQG0FxGQ1DERNyUDED8+BDVaLIjI+BNg8lVcyqlLZUrWY6NhzjwYEeiN/DNZmMmHtqDucAPNDcsdVUNQqsBy2A==} + sass-embedded-android-x64@1.86.0: + resolution: {integrity: sha512-8Q263GgwGjz7Jkf7Eghp7NrwqskDL95WO9sKrNm9iOd2re/M48W7RN/lpdcZwrUnEOhueks0RRyYyZYBNRz8Tg==} engines: {node: '>=14.0.0'} cpu: [x64] os: [android] - sass-embedded-darwin-arm64@1.81.0: - resolution: {integrity: sha512-gLKbsfII9Ppua76N41ODFnKGutla9qv0OGAas8gxe0jYBeAQFi/1iKQYdNtQtKi4mA9n5TQTqz+HHCKszZCoyA==} + sass-embedded-darwin-arm64@1.86.0: + resolution: {integrity: sha512-d8oMEaIweq1tjrb/BT43igDviOMS1TeDpc51QF7vAHkt9drSjPmqEmbqStdFYPAGZj1j0RA4WCRoVl6jVixi/w==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [darwin] - sass-embedded-darwin-x64@1.81.0: - resolution: {integrity: sha512-7uMOlT9hD2KUJCbTN2XcfghDxt/rc50ujjfSjSHjX1SYj7mGplkINUXvVbbvvaV2wt6t9vkGkCo5qNbeBhfwBg==} + sass-embedded-darwin-x64@1.86.0: + resolution: {integrity: sha512-5NLRtn0ZUDBkfpKOsgLGl9B34po4Qui8Nff/lXTO+YkxBQFX4GoMkYNk9EJqHwoLLzICsxIhNDMMDiPGz7Fdrw==} engines: {node: '>=14.0.0'} cpu: [x64] os: [darwin] - sass-embedded-linux-arm64@1.81.0: - resolution: {integrity: sha512-jy4bvhdUmqbyw1jv1f3Uxl+MF8EU/Y/GDx4w6XPJm4Ds+mwH/TwnyAwsxxoBhWfnBnW8q2ADy039DlS5p+9csQ==} + sass-embedded-linux-arm64@1.86.0: + resolution: {integrity: sha512-50A+0rhahRDRkKkv+qS7GDAAkW1VPm2RCX4zY4JWydhV4NwMXr6HbkLnsJ2MGixCyibPh59iflMpNBhe7SEMNg==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] - sass-embedded-linux-arm@1.81.0: - resolution: {integrity: sha512-REqR9qM4RchCE3cKqzRy9Q4zigIV82SbSpCi/O4O3oK3pg2I1z7vkb3TiJsivusG/li7aqKZGmYOtAXjruGQDA==} + sass-embedded-linux-arm@1.86.0: + resolution: {integrity: sha512-b6wm0+Il+blJDleRXAqA6JISGMjRb0/thTEg4NWgmiJwUoZjDycj5FTbfYPnLXjCEIMGaYmW3patrJ3JMJcT3Q==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] - sass-embedded-linux-ia32@1.81.0: - resolution: {integrity: sha512-ga/Jk4q5Bn1aC+iHJteDZuLSKnmBUiS3dEg1fnl/Z7GaHIChceKDJOw0zNaILRXI0qT2E1at9MwzoRaRA5Nn/g==} + sass-embedded-linux-ia32@1.86.0: + resolution: {integrity: sha512-h0mr9w71TV3BRPk9JHr0flnRCznhkraY14gaj5T+t78vUFByOUMxp4hTr+JpZAR5mv0mIeoMwrQYwWJoqKI0mw==} engines: {node: '>=14.0.0'} cpu: [ia32] os: [linux] - sass-embedded-linux-musl-arm64@1.81.0: - resolution: {integrity: sha512-hpntWf5kjkoxncA1Vh8vhsUOquZ8AROZKx0rQh7ZjSRs4JrYZASz1cfevPKaEM3wIim/nYa6TJqm0VqWsrERlA==} + sass-embedded-linux-musl-arm64@1.86.0: + resolution: {integrity: sha512-5OZjiJIUyhvKJIGNDEjyRUWDe+W91hq4Bji27sy8gdEuDzPWLx4NzwpKwsBUALUfyW/J5dxgi0ZAQnI3HieyQg==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] - sass-embedded-linux-musl-arm@1.81.0: - resolution: {integrity: sha512-oWVUvQ4d5Kx1Md75YXZl5z1WBjc+uOhfRRqzkJ3nWc8tjszxJN+y/5EOJavhsNI3/2yoTt6eMXRTqDD9b0tWSQ==} + sass-embedded-linux-musl-arm@1.86.0: + resolution: {integrity: sha512-KZU70jBMVykC9HzS+o2FhrJaprFLDk3LWXVPtBFxgLlkcQ/apCkUCh2WVNViLhI2U4NrMSnTvd4kDnC/0m8qIw==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] - sass-embedded-linux-musl-ia32@1.81.0: - resolution: {integrity: sha512-UEXUYkBuqTSwg5JNWiNlfMZ1Jx6SJkaEdx+fsL3Tk099L8cKSoJWH2EPz4ZJjNbyIMymrSdVfymheTeZ8u24xA==} + sass-embedded-linux-musl-ia32@1.86.0: + resolution: {integrity: sha512-vq9wJ7kaELrsNU6Ld6kvrIHxoIUWaD+5T6TQVj4SJP/iw1NjonyCDMQGGs6UgsIEzvaIwtlSlDbRewAq+4PchA==} engines: {node: '>=14.0.0'} cpu: [ia32] os: [linux] - sass-embedded-linux-musl-riscv64@1.81.0: - resolution: {integrity: sha512-1D7OznytbIhx2XDHWi1nuQ8d/uCVR7FGGzELgaU//T8A9DapVTUgPKvB70AF1k4GzChR9IXU/WvFZs2hDTbaJg==} + sass-embedded-linux-musl-riscv64@1.86.0: + resolution: {integrity: sha512-UZJPu4zKe3phEzoSVRh5jcSicBBPe+jEbVNALHSSz881iOAYnDQXHITGeQ4mM1/7e/LTyryHk6EPBoaLOv6JrA==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] - sass-embedded-linux-musl-x64@1.81.0: - resolution: {integrity: sha512-ia6VCTeVDQtBSMktXRFza1AZCt8/6aUoujot6Ugf4KmdytQqPJIHxkHaGftm5xwi9WdrMGYS7zgolToPijR11A==} + sass-embedded-linux-musl-x64@1.86.0: + resolution: {integrity: sha512-8taAgbWMk4QHneJcouWmWZJlmKa2O03g4I/CFo4bfMPL87bibY90pAsSDd+C+t81g0+2aK0/lY/BoB0r3qXLiA==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] - sass-embedded-linux-riscv64@1.81.0: - resolution: {integrity: sha512-KbxSsqu4tT1XbhZfJV/5NfW0VtJIGlD58RjqJqJBi8Rnjrx29/upBsuwoDWtsPV/LhoGwwU1XkSa9Q1ifCz4fQ==} + sass-embedded-linux-riscv64@1.86.0: + resolution: {integrity: sha512-yREY6o2sLwiiA03MWHVpnUliLscz0flEmFW/wzxYZJDqg9eZteB3hUWgZD63eLm2PTZsYxDQpjAHpa48nnIEmA==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] - sass-embedded-linux-x64@1.81.0: - resolution: {integrity: sha512-AMDeVY2T9WAnSFkuQcsOn5c29GRs/TuqnCiblKeXfxCSKym5uKdBl/N7GnTV6OjzoxiJBbkYKdVIaS5By7Gj4g==} + sass-embedded-linux-x64@1.86.0: + resolution: {integrity: sha512-sH0F8np9PTgTbFcJWxfr1NzPkL5ID2NcpMtZyKPTdnn9NkE/L2UwXSo6xOvY0Duc4Hg+58wSrDnj6KbvdeHCPg==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] - sass-embedded-win32-arm64@1.81.0: - resolution: {integrity: sha512-YOmBRYnygwWUmCoH14QbMRHjcvCJufeJBAp0m61tOJXIQh64ziwV4mjdqjS/Rx3zhTT4T+nulDUw4d3kLiMncA==} + sass-embedded-win32-arm64@1.86.0: + resolution: {integrity: sha512-4O1XVUxLTIjMOvrziYwEZgvFqC5sF6t0hTAPJ+h2uiAUZg9Joo0PvuEedXurjISgDBsb5W5DTL9hH9q1BbP4cQ==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [win32] - sass-embedded-win32-ia32@1.81.0: - resolution: {integrity: sha512-HFfr/C+uLJGGTENdnssuNTmXI/xnIasUuEHEKqI+2J0FHCWT5cpz3PGAOHymPyJcZVYGUG/7gIxIx/d7t0LFYw==} + sass-embedded-win32-ia32@1.86.0: + resolution: {integrity: sha512-zuSP2axkGm4VaJWt38P464H+4424Swr9bzFNfbbznxe3Ue4RuqSBqwiLiYdg9Q1cecTQ2WGH7G7WO56KK7WLwg==} engines: {node: '>=14.0.0'} cpu: [ia32] os: [win32] - sass-embedded-win32-x64@1.81.0: - resolution: {integrity: sha512-wxj52jDcIAwWcXb7ShZ7vQYKcVUkJ+04YM9l46jDY+qwHzliGuorAUyujLyKTE9heGD3gShJ3wPPC1lXzq6v9A==} + sass-embedded-win32-x64@1.86.0: + resolution: {integrity: sha512-GVX0CHtukr3kjqfqretSlPiJzV7V4JxUjpRZV+yC9gUMTiDErilJh2Chw1r0+MYiYvumCDUSDlticmvJs7v0tA==} engines: {node: '>=14.0.0'} cpu: [x64] os: [win32] - sass-embedded@1.81.0: - resolution: {integrity: sha512-uZQ2Faxb1oWBHpeSSzjxnhClbMb3QadN0ql0ZFNuqWOLUxwaVhrMlMhPq6TDPbbfDUjihuwrMCuy695Bgna5RA==} + sass-embedded@1.86.0: + resolution: {integrity: sha512-Ibq5DzxjSf9f/IJmKeHVeXlVqiZWdRJF+RXy6v6UupvMYVMU5Ei+teSFBvvpPD5bB2QhhnU/OJlSM0EBCtfr9g==} engines: {node: '>=16.0.0'} hasBin: true @@ -7196,8 +7079,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} engines: {node: '>=10'} hasBin: true @@ -7249,11 +7132,23 @@ packages: resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} engines: {node: '>= 0.4'} - shiki@1.24.0: - resolution: {integrity: sha512-qIneep7QRwxRd5oiHb8jaRzH15V/S8F3saCXOdjwRLgozZJr5x2yeBhQtqkO3FSzQDwYEFAYuifg4oHjpDghrg==} + shiki@1.29.2: + resolution: {integrity: sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==} - side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} siginfo@2.0.0: @@ -7295,8 +7190,8 @@ packages: resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} engines: {node: '>= 10'} - socks@2.8.3: - resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + socks@2.8.4: + resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} source-map-js@1.2.1: @@ -7333,8 +7228,8 @@ packages: spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - spdx-license-ids@3.0.20: - resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} + spdx-license-ids@3.0.21: + resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} sprintf-js@1.1.3: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} @@ -7365,8 +7260,8 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - std-env@3.8.0: - resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} + std-env@3.8.1: + resolution: {integrity: sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==} stoppable@1.1.0: resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} @@ -7428,8 +7323,8 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strnum@1.0.5: - resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + strnum@1.1.2: + resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} stubborn-fs@1.2.5: resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} @@ -7437,6 +7332,9 @@ packages: style-mod@4.1.2: resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} + style-to-js@1.1.16: + resolution: {integrity: sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==} + style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} @@ -7463,10 +7361,10 @@ packages: resolution: {integrity: sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==} engines: {node: '>=12.0.0'} - swr@2.2.5: - resolution: {integrity: sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==} + swr@2.3.3: + resolution: {integrity: sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A==} peerDependencies: - react: ^16.11.0 || ^17.0.0 || ^18.0.0 + react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} @@ -7479,12 +7377,8 @@ packages: resolution: {integrity: sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==} engines: {node: '>=16.0.0'} - synckit@0.6.2: - resolution: {integrity: sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==} - engines: {node: '>=12.20'} - - synckit@0.9.2: - resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} + synckit@0.10.3: + resolution: {integrity: sha512-R1urvuyiTaWfeCggqEvpDJwAlDVdsT9NM+IP//Tk2x7qHCkSvBk/fwFgw/TLAHzZlrAnnazMcRw0ZD8HlYFTEQ==} engines: {node: ^14.18.0 || >=16.0.0} tabbable@6.2.0: @@ -7493,8 +7387,8 @@ packages: tailwind-merge@2.6.0: resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} - tar-fs@2.1.1: - resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + tar-fs@2.1.2: + resolution: {integrity: sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==} tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} @@ -7534,8 +7428,8 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@0.3.1: - resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} tinypool@1.0.2: resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} @@ -7549,11 +7443,11 @@ packages: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} - tldts-core@6.1.83: - resolution: {integrity: sha512-I2wb9OJc6rXyh9d4aInhSNWChNI+ra6qDnFEGEwe9OoA68lE4Temw29bOkf1Uvwt8VZS079t1BFZdXVBmmB4dw==} + tldts-core@6.1.85: + resolution: {integrity: sha512-DTjUVvxckL1fIoPSb3KE7ISNtkWSawZdpfxGxwiIrZoO6EbHVDXXUIlIuWympPaeS+BLGyggozX/HTMsRAdsoA==} - tldts@6.1.83: - resolution: {integrity: sha512-FHxxNJJ0WNsEBPHyC1oesQb3rRoxpuho/z2g3zIIAhw1WHJeQsUzK1jYK8TI1/iClaa4fS3Z2TCA9mtxXsENSg==} + tldts@6.1.85: + resolution: {integrity: sha512-gBdZ1RjCSevRPFix/hpaUWeak2/RNUZB4/8frF1r5uYMHjFptkiT0JXIebWvgI/0ZHXvxaUDDJshiA0j6GdL3w==} hasBin: true tmp-promise@3.0.3: @@ -7582,8 +7476,8 @@ packages: resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} engines: {node: '>=16'} - tr46@5.0.0: - resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} + tr46@5.1.0: + resolution: {integrity: sha512-IUWnUK7ADYR5Sl1fZlO1INDUhVhatWl7BtJWsIhwJ0UAK7ilzzIa8uIqOO/aYVWHZPJkKbEL+362wrzoeRF7bw==} engines: {node: '>=18'} tree-kill@1.2.2: @@ -7599,14 +7493,14 @@ packages: truncate-utf8-bytes@1.0.2: resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} - ts-api-utils@1.4.3: - resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} - engines: {node: '>=16'} + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} peerDependencies: - typescript: '>=4.2.0' + typescript: '>=4.8.4' - tsconfck@3.1.4: - resolution: {integrity: sha512-kdqWFGVJqe+KGYvlSO9NIaWn9jT1Ny4oKVzAJsKii5eoE9snzTJzL4+MMVOMn+fikWGFmKEylcXL710V/kIPJQ==} + tsconfck@3.1.5: + resolution: {integrity: sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==} engines: {node: ^18 || >=20} hasBin: true peerDependencies: @@ -7622,8 +7516,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.19.2: - resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} + tsx@4.19.3: + resolution: {integrity: sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==} engines: {node: '>=18.0.0'} hasBin: true @@ -7641,26 +7535,23 @@ packages: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} engines: {node: '>=10'} - type-fest@4.30.0: - resolution: {integrity: sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==} + type-fest@4.38.0: + resolution: {integrity: sha512-2dBz5D5ycHIoliLYLi0Q2V7KRaDlH0uWIvmk7TYlAg5slqwiPv1ezJdZm1QEM0xgk29oYWMCbIG7E6gHpvChlg==} engines: {node: '>=16'} type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} - typescript-eslint@8.17.0: - resolution: {integrity: sha512-409VXvFd/f1br1DCbuKNFqQpXICoTB+V51afcwG1pn1a3Cp92MqAUges3YjwEdQ0cMUoCIodjVDAYzyD8h3SYA==} + typescript-eslint@8.28.0: + resolution: {integrity: sha512-jfZtxJoHm59bvoCMYCe2BM0/baMswRhMmYhy+w6VfcyHrjxZ0OJe0tGasydCpIpA+A/WIJhTyZfb3EtwNC/kHQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.9.0' - typescript@5.7.2: - resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} engines: {node: '>=14.17'} hasBin: true @@ -7684,8 +7575,8 @@ packages: resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} engines: {node: '>=14.0'} - undici@6.21.0: - resolution: {integrity: sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==} + undici@6.21.2: + resolution: {integrity: sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g==} engines: {node: '>=18.17'} unenv@2.0.0-rc.15: @@ -7779,8 +7670,8 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - update-browserslist-db@1.1.1: - resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -7792,16 +7683,6 @@ packages: resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} engines: {node: '>= 0.4'} - use-callback-ref@1.3.2: - resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - use-callback-ref@1.3.3: resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} @@ -7817,16 +7698,6 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - use-sidecar@1.1.2: - resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - use-sidecar@1.1.3: resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} engines: {node: '>=10'} @@ -7837,10 +7708,10 @@ packages: '@types/react': optional: true - use-sync-external-store@1.2.2: - resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} + use-sync-external-store@1.5.0: + resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 utf8-byte-length@1.0.5: resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==} @@ -7912,13 +7783,13 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite-node@1.6.0: - resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==} + vite-node@1.6.1: + resolution: {integrity: sha512-YAXkfvGtuTzwWbDSACdJSg4A4DZiAqckWe90Zapc/sEX3XvHcw1NdurM/6od8J207tSDqNbSsgdCacBgvJKFuA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true - vite-node@2.1.8: - resolution: {integrity: sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==} + vite-node@2.1.9: + resolution: {integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -7936,10 +7807,10 @@ packages: peerDependencies: vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 - vite-plugin-optimize-css-modules@1.1.0: - resolution: {integrity: sha512-6vtG+GwqBoT0yz90LAKKPf0HkiKkX7oCUzdw0Y0Jjv2S4pKyifq2IKTgCEJu5cLYhPku1mrPIjNVvQRmP0RgLQ==} + vite-plugin-optimize-css-modules@1.2.0: + resolution: {integrity: sha512-5kOEVyif9qSoLAQDmN6nXW2fgz66oLXGlapKwY7u8nPVaVoyabkioQqf90s0gFvssCAY2bwBndx5sK7LF+i2rA==} peerDependencies: - vite: ^5.0.0 || ^4.0.0 || ^3.0.0 || ^2.0.0 + vite: ^6.0.0 || ^5.0.0 || ^4.0.0 || ^3.0.0 || ^2.0.0 vite-tsconfig-paths@4.3.2: resolution: {integrity: sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==} @@ -7949,8 +7820,8 @@ packages: vite: optional: true - vite@5.4.11: - resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} + vite@5.4.15: + resolution: {integrity: sha512-6ANcZRivqL/4WtwPGTKNaosuNJr5tWiftOC7liM7G9+rMb8+oeJeyzymDu4rTN93seySBmbjSfsS3Vzr19KNtA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -7980,15 +7851,15 @@ packages: terser: optional: true - vitest@2.1.8: - resolution: {integrity: sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ==} + vitest@2.1.9: + resolution: {integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 2.1.8 - '@vitest/ui': 2.1.8 + '@vitest/browser': 2.1.9 + '@vitest/ui': 2.1.9 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -8040,15 +7911,15 @@ packages: resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} engines: {node: '>=18'} - whatwg-url@14.1.1: - resolution: {integrity: sha512-mDGf9diDad/giZ/Sm9Xi2YcyzaFpbdLpJPr+E9fSkyQ7KpQD4SdFcugkRQYzhmfI4KeV4Qpnn2sKPdo+kmsgRQ==} + whatwg-url@14.2.0: + resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} engines: {node: '>=18'} when-exit@2.1.4: resolution: {integrity: sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==} - which-typed-array@1.1.16: - resolution: {integrity: sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==} + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} engines: {node: '>= 0.4'} which@2.0.2: @@ -8078,8 +7949,8 @@ packages: engines: {node: '>=16'} hasBin: true - wrangler@4.5.1: - resolution: {integrity: sha512-7ct52LPiKnjqtC6SteKr0aherOS6CmvEurGXxGoDjgIOuoAPjN7jjYAw3eEIReGPlcQXmhpPLuunVFkWNhCoZA==} + wrangler@4.6.0: + resolution: {integrity: sha512-2a2ZD0adlvxQ1H+nRKkuuD0dkgaYTOPlC7gBolItk5TfqOSliEV4m6DtZtKtJp33ioM+Uy6TlEWPpA2TrDveEQ==} engines: {node: '>=18.0.0'} hasBin: true peerDependencies: @@ -8123,6 +7994,18 @@ packages: utf-8-validate: optional: true + ws@8.18.1: + resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + xml-name-validator@5.0.0: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} @@ -8148,8 +8031,8 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.6.1: - resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} engines: {node: '>= 14'} hasBin: true @@ -8175,16 +8058,16 @@ packages: resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==} engines: {node: '>= 10'} - zod-to-json-schema@3.24.1: - resolution: {integrity: sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w==} + zod-to-json-schema@3.24.5: + resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==} peerDependencies: zod: ^3.24.1 zod@3.22.3: resolution: {integrity: sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==} - zod@3.24.1: - resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} + zod@3.24.2: + resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} zustand@5.0.3: resolution: {integrity: sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==} @@ -8213,112 +8096,110 @@ snapshots: '@adobe/css-tools@4.4.2': {} - '@ai-sdk/amazon-bedrock@1.0.6(zod@3.24.1)': + '@ai-sdk/amazon-bedrock@1.0.6(zod@3.24.2)': dependencies: '@ai-sdk/provider': 1.0.3 - '@ai-sdk/provider-utils': 2.0.5(zod@3.24.1) - '@aws-sdk/client-bedrock-runtime': 3.716.0 - zod: 3.24.1 + '@ai-sdk/provider-utils': 2.0.5(zod@3.24.2) + '@aws-sdk/client-bedrock-runtime': 3.778.0 + zod: 3.24.2 transitivePeerDependencies: - aws-crt - '@ai-sdk/anthropic@0.0.39(zod@3.24.1)': + '@ai-sdk/anthropic@0.0.39(zod@3.24.2)': dependencies: '@ai-sdk/provider': 0.0.17 - '@ai-sdk/provider-utils': 1.0.9(zod@3.24.1) - zod: 3.24.1 + '@ai-sdk/provider-utils': 1.0.9(zod@3.24.2) + zod: 3.24.2 - '@ai-sdk/cohere@1.0.3(zod@3.24.1)': + '@ai-sdk/cohere@1.2.2(zod@3.24.2)': dependencies: - '@ai-sdk/provider': 1.0.1 - '@ai-sdk/provider-utils': 2.0.2(zod@3.24.1) - zod: 3.24.1 + '@ai-sdk/provider': 1.1.0 + '@ai-sdk/provider-utils': 2.2.1(zod@3.24.2) + zod: 3.24.2 - '@ai-sdk/deepseek@0.1.3(zod@3.24.1)': + '@ai-sdk/deepseek@0.1.17(zod@3.24.2)': dependencies: - '@ai-sdk/openai-compatible': 0.1.3(zod@3.24.1) - '@ai-sdk/provider': 1.0.6 - '@ai-sdk/provider-utils': 2.1.2(zod@3.24.1) - zod: 3.24.1 + '@ai-sdk/openai-compatible': 0.1.17(zod@3.24.2) + '@ai-sdk/provider': 1.0.12 + '@ai-sdk/provider-utils': 2.1.15(zod@3.24.2) + zod: 3.24.2 - '@ai-sdk/google@0.0.52(zod@3.24.1)': + '@ai-sdk/google@0.0.52(zod@3.24.2)': dependencies: '@ai-sdk/provider': 0.0.24 - '@ai-sdk/provider-utils': 1.0.20(zod@3.24.1) + '@ai-sdk/provider-utils': 1.0.20(zod@3.24.2) json-schema: 0.4.0 - zod: 3.24.1 + zod: 3.24.2 - '@ai-sdk/mistral@0.0.43(zod@3.24.1)': + '@ai-sdk/mistral@0.0.43(zod@3.24.2)': dependencies: '@ai-sdk/provider': 0.0.24 - '@ai-sdk/provider-utils': 1.0.20(zod@3.24.1) - zod: 3.24.1 + '@ai-sdk/provider-utils': 1.0.20(zod@3.24.2) + zod: 3.24.2 - '@ai-sdk/openai-compatible@0.1.3(zod@3.24.1)': + '@ai-sdk/openai-compatible@0.1.17(zod@3.24.2)': dependencies: - '@ai-sdk/provider': 1.0.6 - '@ai-sdk/provider-utils': 2.1.2(zod@3.24.1) - zod: 3.24.1 + '@ai-sdk/provider': 1.0.12 + '@ai-sdk/provider-utils': 2.1.15(zod@3.24.2) + zod: 3.24.2 - '@ai-sdk/openai@1.1.2(zod@3.24.1)': + '@ai-sdk/openai@1.3.4(zod@3.24.2)': dependencies: - '@ai-sdk/provider': 1.0.6 - '@ai-sdk/provider-utils': 2.1.2(zod@3.24.1) - zod: 3.24.1 + '@ai-sdk/provider': 1.1.0 + '@ai-sdk/provider-utils': 2.2.1(zod@3.24.2) + zod: 3.24.2 - '@ai-sdk/provider-utils@1.0.2(zod@3.24.1)': + '@ai-sdk/provider-utils@1.0.2(zod@3.24.2)': dependencies: '@ai-sdk/provider': 0.0.12 eventsource-parser: 1.1.2 nanoid: 3.3.6 secure-json-parse: 2.7.0 optionalDependencies: - zod: 3.24.1 + zod: 3.24.2 - '@ai-sdk/provider-utils@1.0.20(zod@3.24.1)': + '@ai-sdk/provider-utils@1.0.20(zod@3.24.2)': dependencies: '@ai-sdk/provider': 0.0.24 eventsource-parser: 1.1.2 nanoid: 3.3.6 secure-json-parse: 2.7.0 optionalDependencies: - zod: 3.24.1 + zod: 3.24.2 - '@ai-sdk/provider-utils@1.0.9(zod@3.24.1)': + '@ai-sdk/provider-utils@1.0.9(zod@3.24.2)': dependencies: '@ai-sdk/provider': 0.0.17 eventsource-parser: 1.1.2 nanoid: 3.3.6 secure-json-parse: 2.7.0 optionalDependencies: - zod: 3.24.1 + zod: 3.24.2 - '@ai-sdk/provider-utils@2.0.2(zod@3.24.1)': - dependencies: - '@ai-sdk/provider': 1.0.1 - eventsource-parser: 3.0.0 - nanoid: 3.3.8 - secure-json-parse: 2.7.0 - optionalDependencies: - zod: 3.24.1 - - '@ai-sdk/provider-utils@2.0.5(zod@3.24.1)': + '@ai-sdk/provider-utils@2.0.5(zod@3.24.2)': dependencies: '@ai-sdk/provider': 1.0.3 - eventsource-parser: 3.0.0 - nanoid: 3.3.8 + eventsource-parser: 3.0.1 + nanoid: 3.3.11 secure-json-parse: 2.7.0 optionalDependencies: - zod: 3.24.1 + zod: 3.24.2 - '@ai-sdk/provider-utils@2.1.2(zod@3.24.1)': + '@ai-sdk/provider-utils@2.1.15(zod@3.24.2)': dependencies: - '@ai-sdk/provider': 1.0.6 - eventsource-parser: 3.0.0 - nanoid: 3.3.8 + '@ai-sdk/provider': 1.0.12 + eventsource-parser: 3.0.1 + nanoid: 3.3.11 secure-json-parse: 2.7.0 optionalDependencies: - zod: 3.24.1 + zod: 3.24.2 + + '@ai-sdk/provider-utils@2.2.1(zod@3.24.2)': + dependencies: + '@ai-sdk/provider': 1.1.0 + nanoid: 3.3.11 + secure-json-parse: 2.7.0 + zod: 3.24.2 '@ai-sdk/provider@0.0.12': dependencies: @@ -8332,7 +8213,7 @@ snapshots: dependencies: json-schema: 0.4.0 - '@ai-sdk/provider@1.0.1': + '@ai-sdk/provider@1.0.12': dependencies: json-schema: 0.4.0 @@ -8340,41 +8221,42 @@ snapshots: dependencies: json-schema: 0.4.0 - '@ai-sdk/provider@1.0.6': + '@ai-sdk/provider@1.1.0': dependencies: json-schema: 0.4.0 - '@ai-sdk/react@1.1.2(react@18.3.1)(zod@3.24.1)': + '@ai-sdk/react@1.2.3(react@18.3.1)(zod@3.24.2)': dependencies: - '@ai-sdk/provider-utils': 2.1.2(zod@3.24.1) - '@ai-sdk/ui-utils': 1.1.2(zod@3.24.1) - swr: 2.2.5(react@18.3.1) + '@ai-sdk/provider-utils': 2.2.1(zod@3.24.2) + '@ai-sdk/ui-utils': 1.2.2(zod@3.24.2) + react: 18.3.1 + swr: 2.3.3(react@18.3.1) throttleit: 2.1.0 optionalDependencies: - react: 18.3.1 - zod: 3.24.1 + zod: 3.24.2 - '@ai-sdk/ui-utils@1.1.2(zod@3.24.1)': + '@ai-sdk/ui-utils@1.2.2(zod@3.24.2)': dependencies: - '@ai-sdk/provider': 1.0.6 - '@ai-sdk/provider-utils': 2.1.2(zod@3.24.1) - zod-to-json-schema: 3.24.1(zod@3.24.1) - optionalDependencies: - zod: 3.24.1 + '@ai-sdk/provider': 1.1.0 + '@ai-sdk/provider-utils': 2.2.1(zod@3.24.2) + zod: 3.24.2 + zod-to-json-schema: 3.24.5(zod@3.24.2) '@ampproject/remapping@2.3.0': dependencies: - '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - '@antfu/install-pkg@0.4.1': + '@antfu/install-pkg@1.0.0': dependencies: - package-manager-detector: 0.2.6 - tinyexec: 0.3.1 + package-manager-detector: 0.2.11 + tinyexec: 0.3.2 '@antfu/utils@0.7.10': {} - '@asamuzakjp/css-color@2.8.3': + '@antfu/utils@8.1.1': {} + + '@asamuzakjp/css-color@3.1.1': dependencies: '@csstools/css-calc': 2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) '@csstools/css-color-parser': 3.0.8(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) @@ -8385,7 +8267,7 @@ snapshots: '@aws-crypto/crc32@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.714.0 + '@aws-sdk/types': 3.775.0 tslib: 2.8.1 '@aws-crypto/sha256-browser@5.2.0': @@ -8393,15 +8275,15 @@ snapshots: '@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.714.0 - '@aws-sdk/util-locate-window': 3.693.0 + '@aws-sdk/types': 3.775.0 + '@aws-sdk/util-locate-window': 3.723.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 '@aws-crypto/sha256-js@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.714.0 + '@aws-sdk/types': 3.775.0 tslib: 2.8.1 '@aws-crypto/supports-web-crypto@5.2.0': @@ -8410,377 +8292,328 @@ snapshots: '@aws-crypto/util@5.2.0': dependencies: - '@aws-sdk/types': 3.714.0 + '@aws-sdk/types': 3.775.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/client-bedrock-runtime@3.716.0': + '@aws-sdk/client-bedrock-runtime@3.778.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.716.0(@aws-sdk/client-sts@3.716.0) - '@aws-sdk/client-sts': 3.716.0 - '@aws-sdk/core': 3.716.0 - '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0) - '@aws-sdk/middleware-host-header': 3.714.0 - '@aws-sdk/middleware-logger': 3.714.0 - '@aws-sdk/middleware-recursion-detection': 3.714.0 - '@aws-sdk/middleware-user-agent': 3.716.0 - '@aws-sdk/region-config-resolver': 3.714.0 - '@aws-sdk/types': 3.714.0 - '@aws-sdk/util-endpoints': 3.714.0 - '@aws-sdk/util-user-agent-browser': 3.714.0 - '@aws-sdk/util-user-agent-node': 3.716.0 - '@smithy/config-resolver': 3.0.13 - '@smithy/core': 2.5.6 - '@smithy/eventstream-serde-browser': 3.0.14 - '@smithy/eventstream-serde-config-resolver': 3.0.11 - '@smithy/eventstream-serde-node': 3.0.13 - '@smithy/fetch-http-handler': 4.1.2 - '@smithy/hash-node': 3.0.11 - '@smithy/invalid-dependency': 3.0.11 - '@smithy/middleware-content-length': 3.0.13 - '@smithy/middleware-endpoint': 3.2.7 - '@smithy/middleware-retry': 3.0.32 - '@smithy/middleware-serde': 3.0.11 - '@smithy/middleware-stack': 3.0.11 - '@smithy/node-config-provider': 3.1.12 - '@smithy/node-http-handler': 3.3.3 - '@smithy/protocol-http': 4.1.8 - '@smithy/smithy-client': 3.5.2 - '@smithy/types': 3.7.2 - '@smithy/url-parser': 3.0.11 - '@smithy/util-base64': 3.0.0 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.32 - '@smithy/util-defaults-mode-node': 3.0.32 - '@smithy/util-endpoints': 2.1.7 - '@smithy/util-middleware': 3.0.11 - '@smithy/util-retry': 3.0.11 - '@smithy/util-stream': 3.3.3 - '@smithy/util-utf8': 3.0.0 + '@aws-sdk/core': 3.775.0 + '@aws-sdk/credential-provider-node': 3.777.0 + '@aws-sdk/middleware-host-header': 3.775.0 + '@aws-sdk/middleware-logger': 3.775.0 + '@aws-sdk/middleware-recursion-detection': 3.775.0 + '@aws-sdk/middleware-user-agent': 3.775.0 + '@aws-sdk/region-config-resolver': 3.775.0 + '@aws-sdk/types': 3.775.0 + '@aws-sdk/util-endpoints': 3.775.0 + '@aws-sdk/util-user-agent-browser': 3.775.0 + '@aws-sdk/util-user-agent-node': 3.775.0 + '@smithy/config-resolver': 4.1.0 + '@smithy/core': 3.2.0 + '@smithy/eventstream-serde-browser': 4.0.2 + '@smithy/eventstream-serde-config-resolver': 4.1.0 + '@smithy/eventstream-serde-node': 4.0.2 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/hash-node': 4.0.2 + '@smithy/invalid-dependency': 4.0.2 + '@smithy/middleware-content-length': 4.0.2 + '@smithy/middleware-endpoint': 4.1.0 + '@smithy/middleware-retry': 4.1.0 + '@smithy/middleware-serde': 4.0.3 + '@smithy/middleware-stack': 4.0.2 + '@smithy/node-config-provider': 4.0.2 + '@smithy/node-http-handler': 4.0.4 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.8 + '@smithy/util-defaults-mode-node': 4.0.8 + '@smithy/util-endpoints': 3.0.2 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.2 + '@smithy/util-stream': 4.2.0 + '@smithy/util-utf8': 4.0.0 '@types/uuid': 9.0.8 tslib: 2.8.1 uuid: 9.0.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0)': + '@aws-sdk/client-sso@3.777.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sts': 3.716.0 - '@aws-sdk/core': 3.716.0 - '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0) - '@aws-sdk/middleware-host-header': 3.714.0 - '@aws-sdk/middleware-logger': 3.714.0 - '@aws-sdk/middleware-recursion-detection': 3.714.0 - '@aws-sdk/middleware-user-agent': 3.716.0 - '@aws-sdk/region-config-resolver': 3.714.0 - '@aws-sdk/types': 3.714.0 - '@aws-sdk/util-endpoints': 3.714.0 - '@aws-sdk/util-user-agent-browser': 3.714.0 - '@aws-sdk/util-user-agent-node': 3.716.0 - '@smithy/config-resolver': 3.0.13 - '@smithy/core': 2.5.6 - '@smithy/fetch-http-handler': 4.1.2 - '@smithy/hash-node': 3.0.11 - '@smithy/invalid-dependency': 3.0.11 - '@smithy/middleware-content-length': 3.0.13 - '@smithy/middleware-endpoint': 3.2.7 - '@smithy/middleware-retry': 3.0.32 - '@smithy/middleware-serde': 3.0.11 - '@smithy/middleware-stack': 3.0.11 - '@smithy/node-config-provider': 3.1.12 - '@smithy/node-http-handler': 3.3.3 - '@smithy/protocol-http': 4.1.8 - '@smithy/smithy-client': 3.5.2 - '@smithy/types': 3.7.2 - '@smithy/url-parser': 3.0.11 - '@smithy/util-base64': 3.0.0 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.32 - '@smithy/util-defaults-mode-node': 3.0.32 - '@smithy/util-endpoints': 2.1.7 - '@smithy/util-middleware': 3.0.11 - '@smithy/util-retry': 3.0.11 - '@smithy/util-utf8': 3.0.0 + '@aws-sdk/core': 3.775.0 + '@aws-sdk/middleware-host-header': 3.775.0 + '@aws-sdk/middleware-logger': 3.775.0 + '@aws-sdk/middleware-recursion-detection': 3.775.0 + '@aws-sdk/middleware-user-agent': 3.775.0 + '@aws-sdk/region-config-resolver': 3.775.0 + '@aws-sdk/types': 3.775.0 + '@aws-sdk/util-endpoints': 3.775.0 + '@aws-sdk/util-user-agent-browser': 3.775.0 + '@aws-sdk/util-user-agent-node': 3.775.0 + '@smithy/config-resolver': 4.1.0 + '@smithy/core': 3.2.0 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/hash-node': 4.0.2 + '@smithy/invalid-dependency': 4.0.2 + '@smithy/middleware-content-length': 4.0.2 + '@smithy/middleware-endpoint': 4.1.0 + '@smithy/middleware-retry': 4.1.0 + '@smithy/middleware-serde': 4.0.3 + '@smithy/middleware-stack': 4.0.2 + '@smithy/node-config-provider': 4.0.2 + '@smithy/node-http-handler': 4.0.4 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.8 + '@smithy/util-defaults-mode-node': 4.0.8 + '@smithy/util-endpoints': 3.0.2 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.2 + '@smithy/util-utf8': 4.0.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso@3.716.0': + '@aws-sdk/core@3.775.0': dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.716.0 - '@aws-sdk/middleware-host-header': 3.714.0 - '@aws-sdk/middleware-logger': 3.714.0 - '@aws-sdk/middleware-recursion-detection': 3.714.0 - '@aws-sdk/middleware-user-agent': 3.716.0 - '@aws-sdk/region-config-resolver': 3.714.0 - '@aws-sdk/types': 3.714.0 - '@aws-sdk/util-endpoints': 3.714.0 - '@aws-sdk/util-user-agent-browser': 3.714.0 - '@aws-sdk/util-user-agent-node': 3.716.0 - '@smithy/config-resolver': 3.0.13 - '@smithy/core': 2.5.6 - '@smithy/fetch-http-handler': 4.1.2 - '@smithy/hash-node': 3.0.11 - '@smithy/invalid-dependency': 3.0.11 - '@smithy/middleware-content-length': 3.0.13 - '@smithy/middleware-endpoint': 3.2.7 - '@smithy/middleware-retry': 3.0.32 - '@smithy/middleware-serde': 3.0.11 - '@smithy/middleware-stack': 3.0.11 - '@smithy/node-config-provider': 3.1.12 - '@smithy/node-http-handler': 3.3.3 - '@smithy/protocol-http': 4.1.8 - '@smithy/smithy-client': 3.5.2 - '@smithy/types': 3.7.2 - '@smithy/url-parser': 3.0.11 - '@smithy/util-base64': 3.0.0 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.32 - '@smithy/util-defaults-mode-node': 3.0.32 - '@smithy/util-endpoints': 2.1.7 - '@smithy/util-middleware': 3.0.11 - '@smithy/util-retry': 3.0.11 - '@smithy/util-utf8': 3.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-sts@3.716.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.716.0(@aws-sdk/client-sts@3.716.0) - '@aws-sdk/core': 3.716.0 - '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0) - '@aws-sdk/middleware-host-header': 3.714.0 - '@aws-sdk/middleware-logger': 3.714.0 - '@aws-sdk/middleware-recursion-detection': 3.714.0 - '@aws-sdk/middleware-user-agent': 3.716.0 - '@aws-sdk/region-config-resolver': 3.714.0 - '@aws-sdk/types': 3.714.0 - '@aws-sdk/util-endpoints': 3.714.0 - '@aws-sdk/util-user-agent-browser': 3.714.0 - '@aws-sdk/util-user-agent-node': 3.716.0 - '@smithy/config-resolver': 3.0.13 - '@smithy/core': 2.5.6 - '@smithy/fetch-http-handler': 4.1.2 - '@smithy/hash-node': 3.0.11 - '@smithy/invalid-dependency': 3.0.11 - '@smithy/middleware-content-length': 3.0.13 - '@smithy/middleware-endpoint': 3.2.7 - '@smithy/middleware-retry': 3.0.32 - '@smithy/middleware-serde': 3.0.11 - '@smithy/middleware-stack': 3.0.11 - '@smithy/node-config-provider': 3.1.12 - '@smithy/node-http-handler': 3.3.3 - '@smithy/protocol-http': 4.1.8 - '@smithy/smithy-client': 3.5.2 - '@smithy/types': 3.7.2 - '@smithy/url-parser': 3.0.11 - '@smithy/util-base64': 3.0.0 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.32 - '@smithy/util-defaults-mode-node': 3.0.32 - '@smithy/util-endpoints': 2.1.7 - '@smithy/util-middleware': 3.0.11 - '@smithy/util-retry': 3.0.11 - '@smithy/util-utf8': 3.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/core@3.716.0': - dependencies: - '@aws-sdk/types': 3.714.0 - '@smithy/core': 2.5.6 - '@smithy/node-config-provider': 3.1.12 - '@smithy/property-provider': 3.1.11 - '@smithy/protocol-http': 4.1.8 - '@smithy/signature-v4': 4.2.4 - '@smithy/smithy-client': 3.5.2 - '@smithy/types': 3.7.2 - '@smithy/util-middleware': 3.0.11 + '@aws-sdk/types': 3.775.0 + '@smithy/core': 3.2.0 + '@smithy/node-config-provider': 4.0.2 + '@smithy/property-provider': 4.0.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/signature-v4': 5.0.2 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/util-middleware': 4.0.2 fast-xml-parser: 4.4.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-env@3.716.0': + '@aws-sdk/credential-provider-env@3.775.0': dependencies: - '@aws-sdk/core': 3.716.0 - '@aws-sdk/types': 3.714.0 - '@smithy/property-provider': 3.1.11 - '@smithy/types': 3.7.2 + '@aws-sdk/core': 3.775.0 + '@aws-sdk/types': 3.775.0 + '@smithy/property-provider': 4.0.2 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.716.0': + '@aws-sdk/credential-provider-http@3.775.0': dependencies: - '@aws-sdk/core': 3.716.0 - '@aws-sdk/types': 3.714.0 - '@smithy/fetch-http-handler': 4.1.2 - '@smithy/node-http-handler': 3.3.3 - '@smithy/property-provider': 3.1.11 - '@smithy/protocol-http': 4.1.8 - '@smithy/smithy-client': 3.5.2 - '@smithy/types': 3.7.2 - '@smithy/util-stream': 3.3.3 + '@aws-sdk/core': 3.775.0 + '@aws-sdk/types': 3.775.0 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/node-http-handler': 4.0.4 + '@smithy/property-provider': 4.0.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/util-stream': 4.2.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0)': + '@aws-sdk/credential-provider-ini@3.777.0': dependencies: - '@aws-sdk/client-sts': 3.716.0 - '@aws-sdk/core': 3.716.0 - '@aws-sdk/credential-provider-env': 3.716.0 - '@aws-sdk/credential-provider-http': 3.716.0 - '@aws-sdk/credential-provider-process': 3.716.0 - '@aws-sdk/credential-provider-sso': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0)) - '@aws-sdk/credential-provider-web-identity': 3.716.0(@aws-sdk/client-sts@3.716.0) - '@aws-sdk/types': 3.714.0 - '@smithy/credential-provider-imds': 3.2.8 - '@smithy/property-provider': 3.1.11 - '@smithy/shared-ini-file-loader': 3.1.12 - '@smithy/types': 3.7.2 + '@aws-sdk/core': 3.775.0 + '@aws-sdk/credential-provider-env': 3.775.0 + '@aws-sdk/credential-provider-http': 3.775.0 + '@aws-sdk/credential-provider-process': 3.775.0 + '@aws-sdk/credential-provider-sso': 3.777.0 + '@aws-sdk/credential-provider-web-identity': 3.777.0 + '@aws-sdk/nested-clients': 3.777.0 + '@aws-sdk/types': 3.775.0 + '@smithy/credential-provider-imds': 4.0.2 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 tslib: 2.8.1 transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-node@3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0)': + '@aws-sdk/credential-provider-node@3.777.0': dependencies: - '@aws-sdk/credential-provider-env': 3.716.0 - '@aws-sdk/credential-provider-http': 3.716.0 - '@aws-sdk/credential-provider-ini': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0) - '@aws-sdk/credential-provider-process': 3.716.0 - '@aws-sdk/credential-provider-sso': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0)) - '@aws-sdk/credential-provider-web-identity': 3.716.0(@aws-sdk/client-sts@3.716.0) - '@aws-sdk/types': 3.714.0 - '@smithy/credential-provider-imds': 3.2.8 - '@smithy/property-provider': 3.1.11 - '@smithy/shared-ini-file-loader': 3.1.12 - '@smithy/types': 3.7.2 + '@aws-sdk/credential-provider-env': 3.775.0 + '@aws-sdk/credential-provider-http': 3.775.0 + '@aws-sdk/credential-provider-ini': 3.777.0 + '@aws-sdk/credential-provider-process': 3.775.0 + '@aws-sdk/credential-provider-sso': 3.777.0 + '@aws-sdk/credential-provider-web-identity': 3.777.0 + '@aws-sdk/types': 3.775.0 + '@smithy/credential-provider-imds': 4.0.2 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 tslib: 2.8.1 transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - '@aws-sdk/client-sts' - aws-crt - '@aws-sdk/credential-provider-process@3.716.0': + '@aws-sdk/credential-provider-process@3.775.0': dependencies: - '@aws-sdk/core': 3.716.0 - '@aws-sdk/types': 3.714.0 - '@smithy/property-provider': 3.1.11 - '@smithy/shared-ini-file-loader': 3.1.12 - '@smithy/types': 3.7.2 + '@aws-sdk/core': 3.775.0 + '@aws-sdk/types': 3.775.0 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))': + '@aws-sdk/credential-provider-sso@3.777.0': dependencies: - '@aws-sdk/client-sso': 3.716.0 - '@aws-sdk/core': 3.716.0 - '@aws-sdk/token-providers': 3.714.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0)) - '@aws-sdk/types': 3.714.0 - '@smithy/property-provider': 3.1.11 - '@smithy/shared-ini-file-loader': 3.1.12 - '@smithy/types': 3.7.2 + '@aws-sdk/client-sso': 3.777.0 + '@aws-sdk/core': 3.775.0 + '@aws-sdk/token-providers': 3.777.0 + '@aws-sdk/types': 3.775.0 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 tslib: 2.8.1 transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-web-identity@3.716.0(@aws-sdk/client-sts@3.716.0)': + '@aws-sdk/credential-provider-web-identity@3.777.0': dependencies: - '@aws-sdk/client-sts': 3.716.0 - '@aws-sdk/core': 3.716.0 - '@aws-sdk/types': 3.714.0 - '@smithy/property-provider': 3.1.11 - '@smithy/types': 3.7.2 + '@aws-sdk/core': 3.775.0 + '@aws-sdk/nested-clients': 3.777.0 + '@aws-sdk/types': 3.775.0 + '@smithy/property-provider': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/middleware-host-header@3.775.0': + dependencies: + '@aws-sdk/types': 3.775.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@aws-sdk/middleware-host-header@3.714.0': + '@aws-sdk/middleware-logger@3.775.0': dependencies: - '@aws-sdk/types': 3.714.0 - '@smithy/protocol-http': 4.1.8 - '@smithy/types': 3.7.2 + '@aws-sdk/types': 3.775.0 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@aws-sdk/middleware-logger@3.714.0': + '@aws-sdk/middleware-recursion-detection@3.775.0': dependencies: - '@aws-sdk/types': 3.714.0 - '@smithy/types': 3.7.2 + '@aws-sdk/types': 3.775.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@aws-sdk/middleware-recursion-detection@3.714.0': + '@aws-sdk/middleware-user-agent@3.775.0': dependencies: - '@aws-sdk/types': 3.714.0 - '@smithy/protocol-http': 4.1.8 - '@smithy/types': 3.7.2 + '@aws-sdk/core': 3.775.0 + '@aws-sdk/types': 3.775.0 + '@aws-sdk/util-endpoints': 3.775.0 + '@smithy/core': 3.2.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@aws-sdk/middleware-user-agent@3.716.0': + '@aws-sdk/nested-clients@3.777.0': dependencies: - '@aws-sdk/core': 3.716.0 - '@aws-sdk/types': 3.714.0 - '@aws-sdk/util-endpoints': 3.714.0 - '@smithy/core': 2.5.6 - '@smithy/protocol-http': 4.1.8 - '@smithy/types': 3.7.2 + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.775.0 + '@aws-sdk/middleware-host-header': 3.775.0 + '@aws-sdk/middleware-logger': 3.775.0 + '@aws-sdk/middleware-recursion-detection': 3.775.0 + '@aws-sdk/middleware-user-agent': 3.775.0 + '@aws-sdk/region-config-resolver': 3.775.0 + '@aws-sdk/types': 3.775.0 + '@aws-sdk/util-endpoints': 3.775.0 + '@aws-sdk/util-user-agent-browser': 3.775.0 + '@aws-sdk/util-user-agent-node': 3.775.0 + '@smithy/config-resolver': 4.1.0 + '@smithy/core': 3.2.0 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/hash-node': 4.0.2 + '@smithy/invalid-dependency': 4.0.2 + '@smithy/middleware-content-length': 4.0.2 + '@smithy/middleware-endpoint': 4.1.0 + '@smithy/middleware-retry': 4.1.0 + '@smithy/middleware-serde': 4.0.3 + '@smithy/middleware-stack': 4.0.2 + '@smithy/node-config-provider': 4.0.2 + '@smithy/node-http-handler': 4.0.4 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.8 + '@smithy/util-defaults-mode-node': 4.0.8 + '@smithy/util-endpoints': 3.0.2 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.2 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/region-config-resolver@3.775.0': + dependencies: + '@aws-sdk/types': 3.775.0 + '@smithy/node-config-provider': 4.0.2 + '@smithy/types': 4.2.0 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.2 tslib: 2.8.1 - '@aws-sdk/region-config-resolver@3.714.0': + '@aws-sdk/token-providers@3.777.0': dependencies: - '@aws-sdk/types': 3.714.0 - '@smithy/node-config-provider': 3.1.12 - '@smithy/types': 3.7.2 - '@smithy/util-config-provider': 3.0.0 - '@smithy/util-middleware': 3.0.11 + '@aws-sdk/nested-clients': 3.777.0 + '@aws-sdk/types': 3.775.0 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/types@3.775.0': + dependencies: + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@aws-sdk/token-providers@3.714.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))': + '@aws-sdk/util-endpoints@3.775.0': dependencies: - '@aws-sdk/client-sso-oidc': 3.716.0(@aws-sdk/client-sts@3.716.0) - '@aws-sdk/types': 3.714.0 - '@smithy/property-provider': 3.1.11 - '@smithy/shared-ini-file-loader': 3.1.12 - '@smithy/types': 3.7.2 + '@aws-sdk/types': 3.775.0 + '@smithy/types': 4.2.0 + '@smithy/util-endpoints': 3.0.2 tslib: 2.8.1 - '@aws-sdk/types@3.714.0': - dependencies: - '@smithy/types': 3.7.2 - tslib: 2.8.1 - - '@aws-sdk/util-endpoints@3.714.0': - dependencies: - '@aws-sdk/types': 3.714.0 - '@smithy/types': 3.7.2 - '@smithy/util-endpoints': 2.1.7 - tslib: 2.8.1 - - '@aws-sdk/util-locate-window@3.693.0': + '@aws-sdk/util-locate-window@3.723.0': dependencies: tslib: 2.8.1 - '@aws-sdk/util-user-agent-browser@3.714.0': + '@aws-sdk/util-user-agent-browser@3.775.0': dependencies: - '@aws-sdk/types': 3.714.0 - '@smithy/types': 3.7.2 + '@aws-sdk/types': 3.775.0 + '@smithy/types': 4.2.0 bowser: 2.11.0 tslib: 2.8.1 - '@aws-sdk/util-user-agent-node@3.716.0': + '@aws-sdk/util-user-agent-node@3.775.0': dependencies: - '@aws-sdk/middleware-user-agent': 3.716.0 - '@aws-sdk/types': 3.714.0 - '@smithy/node-config-provider': 3.1.12 - '@smithy/types': 3.7.2 + '@aws-sdk/middleware-user-agent': 3.775.0 + '@aws-sdk/types': 3.775.0 + '@smithy/node-config-provider': 4.0.2 + '@smithy/types': 4.2.0 tslib: 2.8.1 '@babel/code-frame@7.26.2': @@ -8789,110 +8622,103 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.26.2': {} + '@babel/compat-data@7.26.8': {} - '@babel/core@7.26.0': + '@babel/core@7.26.10': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.2 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helpers': 7.26.0 - '@babel/parser': 7.26.2 - '@babel/template': 7.25.9 - '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 + '@babel/generator': 7.27.0 + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helpers': 7.27.0 + '@babel/parser': 7.27.0 + '@babel/template': 7.27.0 + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 convert-source-map: 2.0.0 - debug: 4.3.7 + debug: 4.4.0 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.26.2': + '@babel/generator@7.27.0': dependencies: - '@babel/parser': 7.26.2 - '@babel/types': 7.26.0 - '@jridgewell/gen-mapping': 0.3.5 + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 + '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 '@babel/helper-annotate-as-pure@7.25.9': dependencies: - '@babel/types': 7.26.0 + '@babel/types': 7.27.0 - '@babel/helper-compilation-targets@7.25.9': + '@babel/helper-compilation-targets@7.27.0': dependencies: - '@babel/compat-data': 7.26.2 + '@babel/compat-data': 7.26.8 '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.2 + browserslist: 4.24.4 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)': + '@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.27.0 semver: 6.3.1 transitivePeerDependencies: - supports-color '@babel/helper-member-expression-to-functions@7.25.9': dependencies: - '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/helper-module-imports': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.25.9': dependencies: - '@babel/types': 7.26.0 + '@babel/types': 7.27.0 - '@babel/helper-plugin-utils@7.25.9': {} + '@babel/helper-plugin-utils@7.26.5': {} - '@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0)': + '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.25.9 - transitivePeerDependencies: - - supports-color - - '@babel/helper-simple-access@7.25.9': - dependencies: - '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 + '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: - '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 transitivePeerDependencies: - supports-color @@ -8902,111 +8728,110 @@ snapshots: '@babel/helper-validator-option@7.25.9': {} - '@babel/helpers@7.26.0': + '@babel/helpers@7.27.0': dependencies: - '@babel/template': 7.25.9 - '@babel/types': 7.26.0 + '@babel/template': 7.27.0 + '@babel/types': 7.27.0 - '@babel/parser@7.26.2': + '@babel/parser@7.27.0': dependencies: - '@babel/types': 7.26.0 + '@babel/types': 7.27.0 - '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-modules-commonjs@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-simple-access': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-typescript@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-transform-typescript@7.27.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.26.0(@babel/core@7.26.0)': + '@babel/preset-typescript@7.27.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.10) + '@babel/plugin-transform-typescript': 7.27.0(@babel/core@7.26.10) transitivePeerDependencies: - supports-color - '@babel/runtime@7.26.0': + '@babel/runtime@7.27.0': dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.25.9': + '@babel/template@7.27.0': dependencies: '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.2 - '@babel/types': 7.26.0 + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 - '@babel/traverse@7.25.9': + '@babel/traverse@7.27.0': dependencies: '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.2 - '@babel/parser': 7.26.2 - '@babel/template': 7.25.9 - '@babel/types': 7.26.0 - debug: 4.3.7 + '@babel/generator': 7.27.0 + '@babel/parser': 7.27.0 + '@babel/template': 7.27.0 + '@babel/types': 7.27.0 + debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.26.0': + '@babel/types@7.27.0': dependencies: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@blitz/eslint-plugin@0.1.0(@types/eslint@8.56.10)(jiti@1.21.6)(prettier@3.4.1)(typescript@5.7.2)': + '@blitz/eslint-plugin@0.1.0(jiti@1.21.7)(prettier@3.5.3)(typescript@5.8.2)': dependencies: - '@stylistic/eslint-plugin-ts': 2.11.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) - '@typescript-eslint/eslint-plugin': 8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2))(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) - '@typescript-eslint/parser': 8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) - '@typescript-eslint/utils': 8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) + '@stylistic/eslint-plugin-ts': 2.13.0(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2) + '@typescript-eslint/eslint-plugin': 8.28.0(@typescript-eslint/parser@8.28.0(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2))(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2) + '@typescript-eslint/parser': 8.28.0(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2) + '@typescript-eslint/utils': 8.28.0(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2) common-tags: 1.8.2 - eslint: 9.16.0(jiti@1.21.6) - eslint-config-prettier: 9.1.0(eslint@9.16.0(jiti@1.21.6)) - eslint-plugin-jsonc: 2.18.2(eslint@9.16.0(jiti@1.21.6)) - eslint-plugin-prettier: 5.2.1(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@9.16.0(jiti@1.21.6)))(eslint@9.16.0(jiti@1.21.6))(prettier@3.4.1) - globals: 15.13.0 - typescript-eslint: 8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) + eslint: 9.23.0(jiti@1.21.7) + eslint-config-prettier: 9.1.0(eslint@9.23.0(jiti@1.21.7)) + eslint-plugin-jsonc: 2.20.0(eslint@9.23.0(jiti@1.21.7)) + eslint-plugin-prettier: 5.2.5(eslint-config-prettier@9.1.0(eslint@9.23.0(jiti@1.21.7)))(eslint@9.23.0(jiti@1.21.7))(prettier@3.5.3) + globals: 15.15.0 + typescript-eslint: 8.28.0(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2) transitivePeerDependencies: - '@eslint/json' - '@types/eslint' @@ -9015,7 +8840,7 @@ snapshots: - supports-color - typescript - '@bufbuild/protobuf@2.2.2': {} + '@bufbuild/protobuf@2.2.5': {} '@cloudflare/kv-asset-handler@0.1.3': dependencies: @@ -9046,136 +8871,132 @@ snapshots: '@cloudflare/workerd-windows-64@1.20250321.0': optional: true - '@cloudflare/workers-types@4.20241127.0': {} + '@cloudflare/workers-types@4.20250327.0': {} - '@codemirror/autocomplete@6.18.3(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)(@lezer/common@1.2.3)': + '@codemirror/autocomplete@6.18.6': dependencies: - '@codemirror/language': 6.10.6 - '@codemirror/state': 6.4.1 - '@codemirror/view': 6.35.0 + '@codemirror/language': 6.11.0 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.36.5 '@lezer/common': 1.2.3 - '@codemirror/commands@6.7.1': + '@codemirror/commands@6.8.0': dependencies: - '@codemirror/language': 6.10.6 - '@codemirror/state': 6.4.1 - '@codemirror/view': 6.35.0 + '@codemirror/language': 6.11.0 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.36.5 '@lezer/common': 1.2.3 '@codemirror/lang-cpp@6.0.2': dependencies: - '@codemirror/language': 6.10.6 - '@lezer/cpp': 1.1.2 + '@codemirror/language': 6.11.0 + '@lezer/cpp': 1.1.3 - '@codemirror/lang-css@6.3.1(@codemirror/view@6.35.0)': + '@codemirror/lang-css@6.3.1': dependencies: - '@codemirror/autocomplete': 6.18.3(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)(@lezer/common@1.2.3) - '@codemirror/language': 6.10.6 - '@codemirror/state': 6.4.1 + '@codemirror/autocomplete': 6.18.6 + '@codemirror/language': 6.11.0 + '@codemirror/state': 6.5.2 '@lezer/common': 1.2.3 - '@lezer/css': 1.1.9 - transitivePeerDependencies: - - '@codemirror/view' + '@lezer/css': 1.1.11 '@codemirror/lang-html@6.4.9': dependencies: - '@codemirror/autocomplete': 6.18.3(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)(@lezer/common@1.2.3) - '@codemirror/lang-css': 6.3.1(@codemirror/view@6.35.0) - '@codemirror/lang-javascript': 6.2.2 - '@codemirror/language': 6.10.6 - '@codemirror/state': 6.4.1 - '@codemirror/view': 6.35.0 + '@codemirror/autocomplete': 6.18.6 + '@codemirror/lang-css': 6.3.1 + '@codemirror/lang-javascript': 6.2.3 + '@codemirror/language': 6.11.0 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.36.5 '@lezer/common': 1.2.3 - '@lezer/css': 1.1.9 + '@lezer/css': 1.1.11 '@lezer/html': 1.3.10 - '@codemirror/lang-javascript@6.2.2': + '@codemirror/lang-javascript@6.2.3': dependencies: - '@codemirror/autocomplete': 6.18.3(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)(@lezer/common@1.2.3) - '@codemirror/language': 6.10.6 - '@codemirror/lint': 6.8.4 - '@codemirror/state': 6.4.1 - '@codemirror/view': 6.35.0 + '@codemirror/autocomplete': 6.18.6 + '@codemirror/language': 6.11.0 + '@codemirror/lint': 6.8.5 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.36.5 '@lezer/common': 1.2.3 - '@lezer/javascript': 1.4.20 + '@lezer/javascript': 1.4.21 '@codemirror/lang-json@6.0.1': dependencies: - '@codemirror/language': 6.10.6 - '@lezer/json': 1.0.2 + '@codemirror/language': 6.11.0 + '@lezer/json': 1.0.3 - '@codemirror/lang-markdown@6.3.1': + '@codemirror/lang-markdown@6.3.2': dependencies: - '@codemirror/autocomplete': 6.18.3(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)(@lezer/common@1.2.3) + '@codemirror/autocomplete': 6.18.6 '@codemirror/lang-html': 6.4.9 - '@codemirror/language': 6.10.6 - '@codemirror/state': 6.4.1 - '@codemirror/view': 6.35.0 + '@codemirror/language': 6.11.0 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.36.5 '@lezer/common': 1.2.3 - '@lezer/markdown': 1.3.2 + '@lezer/markdown': 1.4.2 - '@codemirror/lang-python@6.1.6(@codemirror/view@6.35.0)': + '@codemirror/lang-python@6.1.7': dependencies: - '@codemirror/autocomplete': 6.18.3(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)(@lezer/common@1.2.3) - '@codemirror/language': 6.10.6 - '@codemirror/state': 6.4.1 + '@codemirror/autocomplete': 6.18.6 + '@codemirror/language': 6.11.0 + '@codemirror/state': 6.5.2 '@lezer/common': 1.2.3 - '@lezer/python': 1.1.14 - transitivePeerDependencies: - - '@codemirror/view' + '@lezer/python': 1.1.17 - '@codemirror/lang-sass@6.0.2(@codemirror/view@6.35.0)': + '@codemirror/lang-sass@6.0.2': dependencies: - '@codemirror/lang-css': 6.3.1(@codemirror/view@6.35.0) - '@codemirror/language': 6.10.6 - '@codemirror/state': 6.4.1 + '@codemirror/lang-css': 6.3.1 + '@codemirror/language': 6.11.0 + '@codemirror/state': 6.5.2 '@lezer/common': 1.2.3 '@lezer/sass': 1.0.7 - transitivePeerDependencies: - - '@codemirror/view' '@codemirror/lang-vue@0.1.3': dependencies: '@codemirror/lang-html': 6.4.9 - '@codemirror/lang-javascript': 6.2.2 - '@codemirror/language': 6.10.6 + '@codemirror/lang-javascript': 6.2.3 + '@codemirror/language': 6.11.0 '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 '@codemirror/lang-wast@6.0.2': dependencies: - '@codemirror/language': 6.10.6 + '@codemirror/language': 6.11.0 '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 - '@codemirror/language@6.10.6': + '@codemirror/language@6.11.0': dependencies: - '@codemirror/state': 6.4.1 - '@codemirror/view': 6.35.0 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.36.5 '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 style-mod: 4.1.2 - '@codemirror/lint@6.8.4': + '@codemirror/lint@6.8.5': dependencies: - '@codemirror/state': 6.4.1 - '@codemirror/view': 6.35.0 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.36.5 crelt: 1.0.6 - '@codemirror/search@6.5.8': + '@codemirror/search@6.5.10': dependencies: - '@codemirror/state': 6.4.1 - '@codemirror/view': 6.35.0 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.36.5 crelt: 1.0.6 - '@codemirror/state@6.4.1': {} - - '@codemirror/view@6.35.0': + '@codemirror/state@6.5.2': dependencies: - '@codemirror/state': 6.4.1 + '@marijn/find-cluster-break': 1.0.2 + + '@codemirror/view@6.36.5': + dependencies: + '@codemirror/state': 6.5.2 style-mod: 4.1.2 w3c-keyname: 2.2.8 @@ -9208,7 +9029,7 @@ snapshots: ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) - '@electron/asar@3.2.18': + '@electron/asar@3.3.1': dependencies: commander: 5.1.0 glob: 7.2.3 @@ -9216,7 +9037,7 @@ snapshots: '@electron/get@2.0.3': dependencies: - debug: 4.3.7 + debug: 4.4.0 env-paths: 2.2.1 fs-extra: 8.1.0 got: 11.8.6 @@ -9230,7 +9051,7 @@ snapshots: '@electron/notarize@2.5.0': dependencies: - debug: 4.3.7 + debug: 4.4.0 fs-extra: 9.1.0 promise-retry: 2.0.1 transitivePeerDependencies: @@ -9239,7 +9060,7 @@ snapshots: '@electron/osx-sign@1.3.1': dependencies: compare-version: 0.1.2 - debug: 4.3.7 + debug: 4.4.0 fs-extra: 10.1.0 isbinaryfile: 4.0.10 minimist: 1.2.8 @@ -9251,16 +9072,16 @@ snapshots: dependencies: '@malept/cross-spawn-promise': 2.0.0 chalk: 4.1.2 - debug: 4.3.7 + debug: 4.4.0 detect-libc: 2.0.3 fs-extra: 10.1.0 got: 11.8.6 node-abi: 3.74.0 - node-api-version: 0.2.0 + node-api-version: 0.2.1 node-gyp: 9.4.1 ora: 5.4.1 read-binary-file-arch: 1.0.6 - semver: 7.6.3 + semver: 7.7.1 tar: 6.2.1 yargs: 17.7.2 transitivePeerDependencies: @@ -9269,9 +9090,9 @@ snapshots: '@electron/universal@2.0.1': dependencies: - '@electron/asar': 3.2.18 + '@electron/asar': 3.3.1 '@malept/cross-spawn-promise': 2.0.0 - debug: 4.3.7 + debug: 4.4.0 dir-compare: 4.2.0 fs-extra: 11.3.0 minimatch: 9.0.5 @@ -9279,7 +9100,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@emnapi/runtime@1.3.1': + '@emnapi/runtime@1.4.0': dependencies: tslib: 2.8.1 optional: true @@ -9295,7 +9116,7 @@ snapshots: '@esbuild/aix-ppc64@0.24.2': optional: true - '@esbuild/android-arm64@0.17.19': + '@esbuild/aix-ppc64@0.25.1': optional: true '@esbuild/android-arm64@0.17.6': @@ -9310,7 +9131,7 @@ snapshots: '@esbuild/android-arm64@0.24.2': optional: true - '@esbuild/android-arm@0.17.19': + '@esbuild/android-arm64@0.25.1': optional: true '@esbuild/android-arm@0.17.6': @@ -9325,7 +9146,7 @@ snapshots: '@esbuild/android-arm@0.24.2': optional: true - '@esbuild/android-x64@0.17.19': + '@esbuild/android-arm@0.25.1': optional: true '@esbuild/android-x64@0.17.6': @@ -9340,7 +9161,7 @@ snapshots: '@esbuild/android-x64@0.24.2': optional: true - '@esbuild/darwin-arm64@0.17.19': + '@esbuild/android-x64@0.25.1': optional: true '@esbuild/darwin-arm64@0.17.6': @@ -9355,7 +9176,7 @@ snapshots: '@esbuild/darwin-arm64@0.24.2': optional: true - '@esbuild/darwin-x64@0.17.19': + '@esbuild/darwin-arm64@0.25.1': optional: true '@esbuild/darwin-x64@0.17.6': @@ -9370,7 +9191,7 @@ snapshots: '@esbuild/darwin-x64@0.24.2': optional: true - '@esbuild/freebsd-arm64@0.17.19': + '@esbuild/darwin-x64@0.25.1': optional: true '@esbuild/freebsd-arm64@0.17.6': @@ -9385,7 +9206,7 @@ snapshots: '@esbuild/freebsd-arm64@0.24.2': optional: true - '@esbuild/freebsd-x64@0.17.19': + '@esbuild/freebsd-arm64@0.25.1': optional: true '@esbuild/freebsd-x64@0.17.6': @@ -9400,7 +9221,7 @@ snapshots: '@esbuild/freebsd-x64@0.24.2': optional: true - '@esbuild/linux-arm64@0.17.19': + '@esbuild/freebsd-x64@0.25.1': optional: true '@esbuild/linux-arm64@0.17.6': @@ -9415,7 +9236,7 @@ snapshots: '@esbuild/linux-arm64@0.24.2': optional: true - '@esbuild/linux-arm@0.17.19': + '@esbuild/linux-arm64@0.25.1': optional: true '@esbuild/linux-arm@0.17.6': @@ -9430,7 +9251,7 @@ snapshots: '@esbuild/linux-arm@0.24.2': optional: true - '@esbuild/linux-ia32@0.17.19': + '@esbuild/linux-arm@0.25.1': optional: true '@esbuild/linux-ia32@0.17.6': @@ -9445,7 +9266,7 @@ snapshots: '@esbuild/linux-ia32@0.24.2': optional: true - '@esbuild/linux-loong64@0.17.19': + '@esbuild/linux-ia32@0.25.1': optional: true '@esbuild/linux-loong64@0.17.6': @@ -9460,7 +9281,7 @@ snapshots: '@esbuild/linux-loong64@0.24.2': optional: true - '@esbuild/linux-mips64el@0.17.19': + '@esbuild/linux-loong64@0.25.1': optional: true '@esbuild/linux-mips64el@0.17.6': @@ -9475,7 +9296,7 @@ snapshots: '@esbuild/linux-mips64el@0.24.2': optional: true - '@esbuild/linux-ppc64@0.17.19': + '@esbuild/linux-mips64el@0.25.1': optional: true '@esbuild/linux-ppc64@0.17.6': @@ -9490,7 +9311,7 @@ snapshots: '@esbuild/linux-ppc64@0.24.2': optional: true - '@esbuild/linux-riscv64@0.17.19': + '@esbuild/linux-ppc64@0.25.1': optional: true '@esbuild/linux-riscv64@0.17.6': @@ -9505,7 +9326,7 @@ snapshots: '@esbuild/linux-riscv64@0.24.2': optional: true - '@esbuild/linux-s390x@0.17.19': + '@esbuild/linux-riscv64@0.25.1': optional: true '@esbuild/linux-s390x@0.17.6': @@ -9520,7 +9341,7 @@ snapshots: '@esbuild/linux-s390x@0.24.2': optional: true - '@esbuild/linux-x64@0.17.19': + '@esbuild/linux-s390x@0.25.1': optional: true '@esbuild/linux-x64@0.17.6': @@ -9535,10 +9356,13 @@ snapshots: '@esbuild/linux-x64@0.24.2': optional: true + '@esbuild/linux-x64@0.25.1': + optional: true + '@esbuild/netbsd-arm64@0.24.2': optional: true - '@esbuild/netbsd-x64@0.17.19': + '@esbuild/netbsd-arm64@0.25.1': optional: true '@esbuild/netbsd-x64@0.17.6': @@ -9553,13 +9377,16 @@ snapshots: '@esbuild/netbsd-x64@0.24.2': optional: true + '@esbuild/netbsd-x64@0.25.1': + optional: true + '@esbuild/openbsd-arm64@0.23.1': optional: true '@esbuild/openbsd-arm64@0.24.2': optional: true - '@esbuild/openbsd-x64@0.17.19': + '@esbuild/openbsd-arm64@0.25.1': optional: true '@esbuild/openbsd-x64@0.17.6': @@ -9574,7 +9401,7 @@ snapshots: '@esbuild/openbsd-x64@0.24.2': optional: true - '@esbuild/sunos-x64@0.17.19': + '@esbuild/openbsd-x64@0.25.1': optional: true '@esbuild/sunos-x64@0.17.6': @@ -9589,7 +9416,7 @@ snapshots: '@esbuild/sunos-x64@0.24.2': optional: true - '@esbuild/win32-arm64@0.17.19': + '@esbuild/sunos-x64@0.25.1': optional: true '@esbuild/win32-arm64@0.17.6': @@ -9604,7 +9431,7 @@ snapshots: '@esbuild/win32-arm64@0.24.2': optional: true - '@esbuild/win32-ia32@0.17.19': + '@esbuild/win32-arm64@0.25.1': optional: true '@esbuild/win32-ia32@0.17.6': @@ -9619,7 +9446,7 @@ snapshots: '@esbuild/win32-ia32@0.24.2': optional: true - '@esbuild/win32-x64@0.17.19': + '@esbuild/win32-ia32@0.25.1': optional: true '@esbuild/win32-x64@0.17.6': @@ -9634,80 +9461,88 @@ snapshots: '@esbuild/win32-x64@0.24.2': optional: true - '@eslint-community/eslint-utils@4.4.1(eslint@9.16.0(jiti@1.21.6))': + '@esbuild/win32-x64@0.25.1': + optional: true + + '@eslint-community/eslint-utils@4.5.1(eslint@9.23.0(jiti@1.21.7))': dependencies: - eslint: 9.16.0(jiti@1.21.6) + eslint: 9.23.0(jiti@1.21.7) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.19.0': + '@eslint/config-array@0.19.2': dependencies: - '@eslint/object-schema': 2.1.4 - debug: 4.3.7 + '@eslint/object-schema': 2.1.6 + debug: 4.4.0 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/core@0.9.0': {} + '@eslint/config-helpers@0.2.0': {} - '@eslint/eslintrc@3.2.0': + '@eslint/core@0.12.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 - debug: 4.3.7 + debug: 4.4.0 espree: 10.3.0 globals: 14.0.0 ignore: 5.3.2 - import-fresh: 3.3.0 + import-fresh: 3.3.1 js-yaml: 4.1.0 minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@eslint/js@9.16.0': {} + '@eslint/js@9.23.0': {} - '@eslint/object-schema@2.1.4': {} + '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.2.3': + '@eslint/plugin-kit@0.2.7': dependencies: + '@eslint/core': 0.12.0 levn: 0.4.1 '@fastify/busboy@2.1.1': {} - '@floating-ui/core@1.6.8': + '@floating-ui/core@1.6.9': dependencies: - '@floating-ui/utils': 0.2.8 + '@floating-ui/utils': 0.2.9 - '@floating-ui/dom@1.6.12': + '@floating-ui/dom@1.6.13': dependencies: - '@floating-ui/core': 1.6.8 - '@floating-ui/utils': 0.2.8 + '@floating-ui/core': 1.6.9 + '@floating-ui/utils': 0.2.9 '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@floating-ui/dom': 1.6.12 + '@floating-ui/dom': 1.6.13 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) '@floating-ui/react@0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@floating-ui/utils': 0.2.8 + '@floating-ui/utils': 0.2.9 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tabbable: 6.2.0 - '@floating-ui/utils@0.2.8': {} + '@floating-ui/utils@0.2.9': {} '@gar/promisify@1.1.3': {} '@headlessui/react@2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/react': 0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/focus': 3.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tanstack/react-virtual': 3.13.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/focus': 3.20.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tanstack/react-virtual': 3.13.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -9722,27 +9557,28 @@ snapshots: '@humanwhocodes/retry@0.3.1': {} - '@humanwhocodes/retry@0.4.1': {} + '@humanwhocodes/retry@0.4.2': {} - '@iconify-json/ph@1.2.1': + '@iconify-json/ph@1.2.2': dependencies: '@iconify/types': 2.0.0 - '@iconify-json/svg-spinners@1.2.1': + '@iconify-json/svg-spinners@1.2.2': dependencies: '@iconify/types': 2.0.0 '@iconify/types@2.0.0': {} - '@iconify/utils@2.1.33': + '@iconify/utils@2.3.0': dependencies: - '@antfu/install-pkg': 0.4.1 - '@antfu/utils': 0.7.10 + '@antfu/install-pkg': 1.0.0 + '@antfu/utils': 8.1.1 '@iconify/types': 2.0.0 - debug: 4.3.7 + debug: 4.4.0 + globals: 15.15.0 kolorist: 1.8.0 - local-pkg: 0.5.1 - mlly: 1.7.3 + local-pkg: 1.1.1 + mlly: 1.7.4 transitivePeerDependencies: - supports-color @@ -9812,7 +9648,7 @@ snapshots: '@img/sharp-wasm32@0.33.5': dependencies: - '@emnapi/runtime': 1.3.1 + '@emnapi/runtime': 1.4.0 optional: true '@img/sharp-win32-ia32@0.33.5': @@ -9830,7 +9666,7 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@jridgewell/gen-mapping@0.3.5': + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 @@ -9852,19 +9688,19 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@jspm/core@2.0.1': {} + '@jspm/core@2.1.0': {} '@kurkle/color@0.3.4': {} '@lezer/common@1.2.3': {} - '@lezer/cpp@1.1.2': + '@lezer/cpp@1.1.3': dependencies: '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 - '@lezer/css@1.1.9': + '@lezer/css@1.1.11': dependencies: '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 @@ -9880,13 +9716,13 @@ snapshots: '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 - '@lezer/javascript@1.4.20': + '@lezer/javascript@1.4.21': dependencies: '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 - '@lezer/json@1.0.2': + '@lezer/json@1.0.3': dependencies: '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 @@ -9896,12 +9732,12 @@ snapshots: dependencies: '@lezer/common': 1.2.3 - '@lezer/markdown@1.3.2': + '@lezer/markdown@1.4.2': dependencies: '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 - '@lezer/python@1.1.14': + '@lezer/python@1.1.17': dependencies: '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 @@ -9919,13 +9755,15 @@ snapshots: '@malept/flatpak-bundler@0.4.0': dependencies: - debug: 4.3.7 + debug: 4.4.0 fs-extra: 9.1.0 lodash: 4.17.21 tmp-promise: 3.0.3 transitivePeerDependencies: - supports-color + '@marijn/find-cluster-break@1.0.2': {} + '@mdx-js/mdx@2.3.0': dependencies: '@types/estree-jsx': 1.0.5 @@ -9963,16 +9801,16 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 + fastq: 1.19.1 '@npmcli/fs@2.1.2': dependencies: '@gar/promisify': 1.1.3 - semver: 7.6.3 + semver: 7.7.1 '@npmcli/fs@3.1.1': dependencies: - semver: 7.6.3 + semver: 7.7.1 '@npmcli/git@4.1.0': dependencies: @@ -9982,7 +9820,7 @@ snapshots: proc-log: 3.0.0 promise-inflight: 1.0.1 promise-retry: 2.0.1 - semver: 7.6.3 + semver: 7.7.1 which: 3.0.1 transitivePeerDependencies: - bluebird @@ -10000,7 +9838,7 @@ snapshots: json-parse-even-better-errors: 3.0.2 normalize-package-data: 5.0.0 proc-log: 3.0.0 - semver: 7.6.3 + semver: 7.7.1 transitivePeerDependencies: - bluebird @@ -10008,72 +9846,73 @@ snapshots: dependencies: which: 3.0.1 - '@octokit/auth-token@5.1.1': {} + '@octokit/auth-token@5.1.2': {} - '@octokit/core@6.1.2': + '@octokit/core@6.1.4': dependencies: - '@octokit/auth-token': 5.1.1 - '@octokit/graphql': 8.1.1 - '@octokit/request': 9.1.3 - '@octokit/request-error': 6.1.5 - '@octokit/types': 13.6.2 + '@octokit/auth-token': 5.1.2 + '@octokit/graphql': 8.2.1 + '@octokit/request': 9.2.2 + '@octokit/request-error': 6.1.7 + '@octokit/types': 13.10.0 before-after-hook: 3.0.2 universal-user-agent: 7.0.2 - '@octokit/endpoint@10.1.1': + '@octokit/endpoint@10.1.3': dependencies: - '@octokit/types': 13.6.2 + '@octokit/types': 13.10.0 universal-user-agent: 7.0.2 - '@octokit/graphql@8.1.1': + '@octokit/graphql@8.2.1': dependencies: - '@octokit/request': 9.1.3 - '@octokit/types': 13.6.2 + '@octokit/request': 9.2.2 + '@octokit/types': 13.10.0 universal-user-agent: 7.0.2 - '@octokit/openapi-types@22.2.0': {} + '@octokit/openapi-types@24.2.0': {} - '@octokit/plugin-paginate-rest@11.3.6(@octokit/core@6.1.2)': + '@octokit/plugin-paginate-rest@11.6.0(@octokit/core@6.1.4)': dependencies: - '@octokit/core': 6.1.2 - '@octokit/types': 13.6.2 + '@octokit/core': 6.1.4 + '@octokit/types': 13.10.0 - '@octokit/plugin-request-log@5.3.1(@octokit/core@6.1.2)': + '@octokit/plugin-request-log@5.3.1(@octokit/core@6.1.4)': dependencies: - '@octokit/core': 6.1.2 + '@octokit/core': 6.1.4 - '@octokit/plugin-rest-endpoint-methods@13.2.6(@octokit/core@6.1.2)': + '@octokit/plugin-rest-endpoint-methods@13.5.0(@octokit/core@6.1.4)': dependencies: - '@octokit/core': 6.1.2 - '@octokit/types': 13.6.2 + '@octokit/core': 6.1.4 + '@octokit/types': 13.10.0 - '@octokit/request-error@6.1.5': + '@octokit/request-error@6.1.7': dependencies: - '@octokit/types': 13.6.2 + '@octokit/types': 13.10.0 - '@octokit/request@9.1.3': + '@octokit/request@9.2.2': dependencies: - '@octokit/endpoint': 10.1.1 - '@octokit/request-error': 6.1.5 - '@octokit/types': 13.6.2 + '@octokit/endpoint': 10.1.3 + '@octokit/request-error': 6.1.7 + '@octokit/types': 13.10.0 + fast-content-type-parse: 2.0.1 universal-user-agent: 7.0.2 - '@octokit/rest@21.0.2': + '@octokit/rest@21.1.1': dependencies: - '@octokit/core': 6.1.2 - '@octokit/plugin-paginate-rest': 11.3.6(@octokit/core@6.1.2) - '@octokit/plugin-request-log': 5.3.1(@octokit/core@6.1.2) - '@octokit/plugin-rest-endpoint-methods': 13.2.6(@octokit/core@6.1.2) + '@octokit/core': 6.1.4 + '@octokit/plugin-paginate-rest': 11.6.0(@octokit/core@6.1.4) + '@octokit/plugin-request-log': 5.3.1(@octokit/core@6.1.4) + '@octokit/plugin-rest-endpoint-methods': 13.5.0(@octokit/core@6.1.4) - '@octokit/types@13.6.2': + '@octokit/types@13.10.0': dependencies: - '@octokit/openapi-types': 22.2.0 + '@octokit/openapi-types': 24.2.0 - '@openrouter/ai-sdk-provider@0.0.5(zod@3.24.1)': + '@openrouter/ai-sdk-provider@0.0.5(zod@3.24.2)': dependencies: '@ai-sdk/provider': 0.0.12 - '@ai-sdk/provider-utils': 1.0.2(zod@3.24.1) - zod: 3.24.1 + '@ai-sdk/provider-utils': 1.0.2(zod@3.24.2) + zod: 3.24.2 '@opentelemetry/api@1.9.0': {} @@ -10085,600 +9924,460 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@pkgr/core@0.1.1': {} + '@pkgr/core@0.2.0': {} '@polka/url@1.0.0-next.28': {} '@radix-ui/number@1.1.0': {} - '@radix-ui/primitive@1.1.0': {} - '@radix-ui/primitive@1.1.1': {} - '@radix-ui/react-arrow@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-arrow@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-arrow@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-collapsible@1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-checkbox@1.1.4(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.20)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-collection@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-collection@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.2(@types/react@18.3.12)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.12)(react@18.3.1)': - dependencies: - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.12 - - '@radix-ui/react-compose-refs@1.1.1(@types/react@18.3.12)(react@18.3.1)': - dependencies: - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.12 - - '@radix-ui/react-context-menu@2.2.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-menu': 2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-context@1.1.0(@types/react@18.3.12)(react@18.3.1)': - dependencies: - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.12 - - '@radix-ui/react-context@1.1.1(@types/react@18.3.12)(react@18.3.1)': - dependencies: - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.12 - - '@radix-ui/react-dialog@1.1.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-collapsible@1.1.3(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.2(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.20)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) + + '@radix-ui/react-collection@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.3.20)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) + + '@radix-ui/react-compose-refs@1.1.1(@types/react@18.3.20)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.20 + + '@radix-ui/react-context-menu@2.2.6(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-context': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-menu': 2.1.6(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.20)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) + + '@radix-ui/react-context@1.1.1(@types/react@18.3.20)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.20 + + '@radix-ui/react-dialog@1.1.6(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.20)(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.6.3(@types/react@18.3.12)(react@18.3.1) + react-remove-scroll: 2.6.3(@types/react@18.3.20)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-direction@1.1.0(@types/react@18.3.12)(react@18.3.1)': + '@radix-ui/react-direction@1.1.0(@types/react@18.3.20)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.12 + '@types/react': 18.3.20 - '@radix-ui/react-dismissable-layer@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.12)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.20)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-dropdown-menu@2.1.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dropdown-menu@2.1.6(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-menu': 2.1.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-menu': 2.1.6(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.20)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-focus-guards@1.1.1(@types/react@18.3.12)(react@18.3.1)': + '@radix-ui/react-focus-guards@1.1.1(@types/react@18.3.20)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.12 + '@types/react': 18.3.20 - '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-focus-scope@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.20)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-focus-scope@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-id@1.1.0(@types/react@18.3.20)(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.20)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.20 + + '@radix-ui/react-label@2.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-id@1.1.0(@types/react@18.3.12)(react@18.3.1)': + '@radix-ui/react-menu@2.1.6(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.12 - - '@radix-ui/react-label@2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-menu@2.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.20)(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.6.0(@types/react@18.3.12)(react@18.3.1) + react-remove-scroll: 2.6.3(@types/react@18.3.20)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-menu@2.1.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-popover@1.1.6(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.2(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.20)(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.6.3(@types/react@18.3.12)(react@18.3.1) + react-remove-scroll: 2.6.3(@types/react@18.3.20)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-popover@1.1.6(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.2(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) - aria-hidden: 1.2.4 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.6.3(@types/react@18.3.12)(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-popper@1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-popper@1.2.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-arrow': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-arrow': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.20)(react@18.3.1) '@radix-ui/rect': 1.1.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-popper@1.2.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-portal@1.1.4(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-arrow': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/rect': 1.1.0 + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.20)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-portal@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-presence@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.20)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-portal@1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-primitive@2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.3.20)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-presence@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-progress@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-presence@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-primitive@2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/react-slot': 1.1.2(@types/react@18.3.12)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-progress@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-context': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-roving-focus@1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-roving-focus@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.20)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-scroll-area@1.2.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-scroll-area@1.2.3(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/number': 1.1.0 '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.20)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-separator@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-separator@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-slot@1.1.0(@types/react@18.3.12)(react@18.3.1)': + '@radix-ui/react-slot@1.1.2(@types/react@18.3.20)(react@18.3.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.20)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.12 + '@types/react': 18.3.20 - '@radix-ui/react-slot@1.1.2(@types/react@18.3.12)(react@18.3.1)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.12)(react@18.3.1) - react: 18.3.1 - optionalDependencies: - '@types/react': 18.3.12 - - '@radix-ui/react-switch@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.12)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 - - '@radix-ui/react-tabs@1.1.3(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-switch@1.1.3(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.20)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-tooltip@1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-tabs@1.1.3(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/primitive': 1.1.0 - '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-context': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.20)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) - '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.12)(react@18.3.1)': + '@radix-ui/react-tooltip@1.1.8(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-popper': 1.2.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.20)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) + + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.20)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.12 + '@types/react': 18.3.20 - '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.12)(react@18.3.1)': + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.20)(react@18.3.1)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.20)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.12 + '@types/react': 18.3.20 - '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.12)(react@18.3.1)': + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.20)(react@18.3.1)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.20)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.12 + '@types/react': 18.3.20 - '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.12)(react@18.3.1)': + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.20)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.12 + '@types/react': 18.3.20 - '@radix-ui/react-use-previous@1.1.0(@types/react@18.3.12)(react@18.3.1)': + '@radix-ui/react-use-previous@1.1.0(@types/react@18.3.20)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: - '@types/react': 18.3.12 + '@types/react': 18.3.20 - '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.12)(react@18.3.1)': + '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.20)(react@18.3.1)': dependencies: '@radix-ui/rect': 1.1.0 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.12 + '@types/react': 18.3.20 - '@radix-ui/react-use-size@1.1.0(@types/react@18.3.12)(react@18.3.1)': + '@radix-ui/react-use-size@1.1.0(@types/react@18.3.20)(react@18.3.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.20)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.12 + '@types/react': 18.3.20 - '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-visually-hidden@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) '@radix-ui/rect@1.1.0': {} - '@react-aria/focus@3.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/focus@3.20.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-types/shared': 3.28.0(react@18.3.1) '@swc/helpers': 0.5.15 clsx: 2.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@react-aria/interactions@3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/interactions@3.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-aria/utils': 3.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-stately/flags': 3.1.0 '@react-types/shared': 3.28.0(react@18.3.1) '@swc/helpers': 0.5.15 @@ -10690,7 +10389,7 @@ snapshots: '@swc/helpers': 0.5.15 react: 18.3.1 - '@react-aria/utils@3.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@react-aria/utils@3.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@react-aria/ssr': 3.9.7(react@18.3.1) '@react-stately/flags': 3.1.0 @@ -10720,51 +10419,51 @@ snapshots: dependencies: react: 18.3.1 - '@remix-run/cloudflare-pages@2.16.0(@cloudflare/workers-types@4.20241127.0)(typescript@5.7.2)': + '@remix-run/cloudflare-pages@2.16.3(@cloudflare/workers-types@4.20250327.0)(typescript@5.8.2)': dependencies: - '@cloudflare/workers-types': 4.20241127.0 - '@remix-run/cloudflare': 2.16.0(@cloudflare/workers-types@4.20241127.0)(typescript@5.7.2) + '@cloudflare/workers-types': 4.20250327.0 + '@remix-run/cloudflare': 2.16.3(@cloudflare/workers-types@4.20250327.0)(typescript@5.8.2) optionalDependencies: - typescript: 5.7.2 + typescript: 5.8.2 - '@remix-run/cloudflare@2.16.0(@cloudflare/workers-types@4.20241127.0)(typescript@5.7.2)': + '@remix-run/cloudflare@2.16.3(@cloudflare/workers-types@4.20250327.0)(typescript@5.8.2)': dependencies: '@cloudflare/kv-asset-handler': 0.1.3 - '@cloudflare/workers-types': 4.20241127.0 - '@remix-run/server-runtime': 2.16.0(typescript@5.7.2) + '@cloudflare/workers-types': 4.20250327.0 + '@remix-run/server-runtime': 2.16.3(typescript@5.8.2) optionalDependencies: - typescript: 5.7.2 + typescript: 5.8.2 - '@remix-run/dev@2.16.0(@remix-run/react@2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2))(@remix-run/serve@2.16.0(typescript@5.7.2))(@types/node@22.10.1)(sass-embedded@1.81.0)(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0))(wrangler@4.5.1(@cloudflare/workers-types@4.20241127.0))': + '@remix-run/dev@2.16.3(@remix-run/react@2.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.2))(@remix-run/serve@2.16.3(typescript@5.8.2))(@types/node@22.13.14)(sass-embedded@1.86.0)(typescript@5.8.2)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0))(wrangler@4.6.0(@cloudflare/workers-types@4.20250327.0))': dependencies: - '@babel/core': 7.26.0 - '@babel/generator': 7.26.2 - '@babel/parser': 7.26.2 - '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) - '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) - '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 + '@babel/core': 7.26.10 + '@babel/generator': 7.27.0 + '@babel/parser': 7.27.0 + '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) + '@babel/preset-typescript': 7.27.0(@babel/core@7.26.10) + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 '@mdx-js/mdx': 2.3.0 '@npmcli/package-json': 4.0.1 - '@remix-run/node': 2.16.0(typescript@5.7.2) - '@remix-run/react': 2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2) + '@remix-run/node': 2.16.3(typescript@5.8.2) + '@remix-run/react': 2.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.2) '@remix-run/router': 1.23.0 - '@remix-run/server-runtime': 2.16.0(typescript@5.7.2) + '@remix-run/server-runtime': 2.16.3(typescript@5.8.2) '@types/mdx': 2.0.13 - '@vanilla-extract/integration': 6.5.0(@types/node@22.10.1)(sass-embedded@1.81.0) + '@vanilla-extract/integration': 6.5.0(@types/node@22.13.14)(sass-embedded@1.86.0) arg: 5.0.2 cacache: 17.1.4 chalk: 4.1.2 chokidar: 3.6.0 cross-spawn: 7.0.6 dotenv: 16.4.7 - es-module-lexer: 1.5.4 + es-module-lexer: 1.6.0 esbuild: 0.17.6 - esbuild-plugins-node-modules-polyfill: 1.6.8(esbuild@0.17.6) + esbuild-plugins-node-modules-polyfill: 1.7.0(esbuild@0.17.6) execa: 5.1.1 exit-hook: 2.2.1 - express: 4.21.1 + express: 4.21.2 fs-extra: 10.1.0 get-port: 5.1.1 gunzip-maybe: 1.4.2 @@ -10778,27 +10477,27 @@ snapshots: picocolors: 1.1.1 picomatch: 2.3.1 pidtree: 0.6.0 - postcss: 8.4.49 - postcss-discard-duplicates: 5.1.0(postcss@8.4.49) - postcss-load-config: 4.0.2(postcss@8.4.49) - postcss-modules: 6.0.1(postcss@8.4.49) + postcss: 8.5.3 + postcss-discard-duplicates: 5.1.0(postcss@8.5.3) + postcss-load-config: 4.0.2(postcss@8.5.3) + postcss-modules: 6.0.1(postcss@8.5.3) prettier: 2.8.8 pretty-ms: 7.0.1 react-refresh: 0.14.2 remark-frontmatter: 4.0.1 remark-mdx-frontmatter: 1.1.1 - semver: 7.6.3 + semver: 7.7.1 set-cookie-parser: 2.7.1 - tar-fs: 2.1.1 + tar-fs: 2.1.2 tsconfig-paths: 4.2.0 - valibot: 0.41.0(typescript@5.7.2) - vite-node: 3.0.0-beta.2(@types/node@22.10.1)(sass-embedded@1.81.0) + valibot: 0.41.0(typescript@5.8.2) + vite-node: 3.0.0-beta.2(@types/node@22.13.14)(sass-embedded@1.86.0) ws: 7.5.10 optionalDependencies: - '@remix-run/serve': 2.16.0(typescript@5.7.2) - typescript: 5.7.2 - vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) - wrangler: 4.5.1(@cloudflare/workers-types@4.20241127.0) + '@remix-run/serve': 2.16.3(typescript@5.8.2) + typescript: 5.8.2 + vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) + wrangler: 4.6.0(@cloudflare/workers-types@4.20250327.0) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -10815,60 +10514,46 @@ snapshots: - ts-node - utf-8-validate - '@remix-run/express@2.16.0(express@4.21.1)(typescript@5.7.2)': + '@remix-run/express@2.16.3(express@4.21.2)(typescript@5.8.2)': dependencies: - '@remix-run/node': 2.16.0(typescript@5.7.2) - express: 4.21.1 + '@remix-run/node': 2.16.3(typescript@5.8.2) + express: 4.21.2 optionalDependencies: - typescript: 5.7.2 + typescript: 5.8.2 - '@remix-run/node@2.15.3(typescript@5.7.2)': + '@remix-run/node@2.16.3(typescript@5.8.2)': dependencies: - '@remix-run/server-runtime': 2.15.3(typescript@5.7.2) + '@remix-run/server-runtime': 2.16.3(typescript@5.8.2) '@remix-run/web-fetch': 4.4.2 '@web3-storage/multipart-parser': 1.0.0 cookie-signature: 1.2.2 source-map-support: 0.5.21 stream-slice: 0.1.2 - undici: 6.21.0 + undici: 6.21.2 optionalDependencies: - typescript: 5.7.2 + typescript: 5.8.2 - '@remix-run/node@2.16.0(typescript@5.7.2)': - dependencies: - '@remix-run/server-runtime': 2.16.0(typescript@5.7.2) - '@remix-run/web-fetch': 4.4.2 - '@web3-storage/multipart-parser': 1.0.0 - cookie-signature: 1.2.2 - source-map-support: 0.5.21 - stream-slice: 0.1.2 - undici: 6.21.0 - optionalDependencies: - typescript: 5.7.2 - - '@remix-run/react@2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2)': + '@remix-run/react@2.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.2)': dependencies: '@remix-run/router': 1.23.0 - '@remix-run/server-runtime': 2.16.0(typescript@5.7.2) + '@remix-run/server-runtime': 2.16.3(typescript@5.8.2) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-router: 6.30.0(react@18.3.1) react-router-dom: 6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) turbo-stream: 2.4.0 optionalDependencies: - typescript: 5.7.2 - - '@remix-run/router@1.22.0': {} + typescript: 5.8.2 '@remix-run/router@1.23.0': {} - '@remix-run/serve@2.16.0(typescript@5.7.2)': + '@remix-run/serve@2.16.3(typescript@5.8.2)': dependencies: - '@remix-run/express': 2.16.0(express@4.21.1)(typescript@5.7.2) - '@remix-run/node': 2.16.0(typescript@5.7.2) + '@remix-run/express': 2.16.3(express@4.21.2)(typescript@5.8.2) + '@remix-run/node': 2.16.3(typescript@5.8.2) chokidar: 3.6.0 compression: 1.8.0 - express: 4.21.1 + express: 4.21.2 get-port: 5.1.1 morgan: 1.10.0 source-map-support: 0.5.21 @@ -10876,19 +10561,7 @@ snapshots: - supports-color - typescript - '@remix-run/server-runtime@2.15.3(typescript@5.7.2)': - dependencies: - '@remix-run/router': 1.22.0 - '@types/cookie': 0.6.0 - '@web3-storage/multipart-parser': 1.0.0 - cookie: 0.6.0 - set-cookie-parser: 2.7.1 - source-map: 0.7.4 - turbo-stream: 2.4.0 - optionalDependencies: - typescript: 5.7.2 - - '@remix-run/server-runtime@2.16.0(typescript@5.7.2)': + '@remix-run/server-runtime@2.16.3(typescript@5.8.2)': dependencies: '@remix-run/router': 1.23.0 '@types/cookie': 0.6.0 @@ -10898,7 +10571,7 @@ snapshots: source-map: 0.7.4 turbo-stream: 2.4.0 optionalDependencies: - typescript: 5.7.2 + typescript: 5.8.2 '@remix-run/web-blob@3.1.0': dependencies: @@ -10928,321 +10601,335 @@ snapshots: dependencies: web-streams-polyfill: 3.3.3 - '@rollup/plugin-inject@5.0.5(rollup@4.28.0)': + '@rollup/plugin-inject@5.0.5(rollup@4.38.0)': dependencies: - '@rollup/pluginutils': 5.1.3(rollup@4.28.0) + '@rollup/pluginutils': 5.1.4(rollup@4.38.0) estree-walker: 2.0.2 - magic-string: 0.30.14 + magic-string: 0.30.17 optionalDependencies: - rollup: 4.28.0 + rollup: 4.38.0 - '@rollup/pluginutils@5.1.3(rollup@4.28.0)': + '@rollup/pluginutils@5.1.4(rollup@4.38.0)': dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.28.0 + rollup: 4.38.0 - '@rollup/rollup-android-arm-eabi@4.28.0': + '@rollup/rollup-android-arm-eabi@4.38.0': optional: true - '@rollup/rollup-android-arm64@4.28.0': + '@rollup/rollup-android-arm64@4.38.0': optional: true - '@rollup/rollup-darwin-arm64@4.28.0': + '@rollup/rollup-darwin-arm64@4.38.0': optional: true - '@rollup/rollup-darwin-x64@4.28.0': + '@rollup/rollup-darwin-x64@4.38.0': optional: true - '@rollup/rollup-freebsd-arm64@4.28.0': + '@rollup/rollup-freebsd-arm64@4.38.0': optional: true - '@rollup/rollup-freebsd-x64@4.28.0': + '@rollup/rollup-freebsd-x64@4.38.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.28.0': + '@rollup/rollup-linux-arm-gnueabihf@4.38.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.28.0': + '@rollup/rollup-linux-arm-musleabihf@4.38.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.28.0': + '@rollup/rollup-linux-arm64-gnu@4.38.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.28.0': + '@rollup/rollup-linux-arm64-musl@4.38.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.28.0': + '@rollup/rollup-linux-loongarch64-gnu@4.38.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.28.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.38.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.28.0': + '@rollup/rollup-linux-riscv64-gnu@4.38.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.28.0': + '@rollup/rollup-linux-riscv64-musl@4.38.0': optional: true - '@rollup/rollup-linux-x64-musl@4.28.0': + '@rollup/rollup-linux-s390x-gnu@4.38.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.28.0': + '@rollup/rollup-linux-x64-gnu@4.38.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.28.0': + '@rollup/rollup-linux-x64-musl@4.38.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.28.0': + '@rollup/rollup-win32-arm64-msvc@4.38.0': optional: true - '@shikijs/core@1.24.0': + '@rollup/rollup-win32-ia32-msvc@4.38.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.38.0': + optional: true + + '@shikijs/core@1.29.2': dependencies: - '@shikijs/engine-javascript': 1.24.0 - '@shikijs/engine-oniguruma': 1.24.0 - '@shikijs/types': 1.24.0 - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/engine-javascript': 1.29.2 + '@shikijs/engine-oniguruma': 1.29.2 + '@shikijs/types': 1.29.2 + '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - hast-util-to-html: 9.0.3 + hast-util-to-html: 9.0.5 - '@shikijs/engine-javascript@1.24.0': + '@shikijs/engine-javascript@1.29.2': dependencies: - '@shikijs/types': 1.24.0 - '@shikijs/vscode-textmate': 9.3.0 - oniguruma-to-es: 0.7.0 + '@shikijs/types': 1.29.2 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 2.3.0 - '@shikijs/engine-oniguruma@1.24.0': + '@shikijs/engine-oniguruma@1.29.2': dependencies: - '@shikijs/types': 1.24.0 - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/types': 1.29.2 + '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/types@1.24.0': + '@shikijs/langs@1.29.2': dependencies: - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/types': 1.29.2 + + '@shikijs/themes@1.29.2': + dependencies: + '@shikijs/types': 1.29.2 + + '@shikijs/types@1.29.2': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - '@shikijs/vscode-textmate@9.3.0': {} + '@shikijs/vscode-textmate@10.0.2': {} '@sindresorhus/is@4.6.0': {} - '@smithy/abort-controller@3.1.9': + '@smithy/abort-controller@4.0.2': dependencies: - '@smithy/types': 3.7.2 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@smithy/config-resolver@3.0.13': + '@smithy/config-resolver@4.1.0': dependencies: - '@smithy/node-config-provider': 3.1.12 - '@smithy/types': 3.7.2 - '@smithy/util-config-provider': 3.0.0 - '@smithy/util-middleware': 3.0.11 + '@smithy/node-config-provider': 4.0.2 + '@smithy/types': 4.2.0 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.2 tslib: 2.8.1 - '@smithy/core@2.5.6': + '@smithy/core@3.2.0': dependencies: - '@smithy/middleware-serde': 3.0.11 - '@smithy/protocol-http': 4.1.8 - '@smithy/types': 3.7.2 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-middleware': 3.0.11 - '@smithy/util-stream': 3.3.3 - '@smithy/util-utf8': 3.0.0 + '@smithy/middleware-serde': 4.0.3 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-stream': 4.2.0 + '@smithy/util-utf8': 4.0.0 tslib: 2.8.1 - '@smithy/credential-provider-imds@3.2.8': + '@smithy/credential-provider-imds@4.0.2': dependencies: - '@smithy/node-config-provider': 3.1.12 - '@smithy/property-provider': 3.1.11 - '@smithy/types': 3.7.2 - '@smithy/url-parser': 3.0.11 + '@smithy/node-config-provider': 4.0.2 + '@smithy/property-provider': 4.0.2 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 tslib: 2.8.1 - '@smithy/eventstream-codec@3.1.10': + '@smithy/eventstream-codec@4.0.2': dependencies: '@aws-crypto/crc32': 5.2.0 - '@smithy/types': 3.7.2 - '@smithy/util-hex-encoding': 3.0.0 + '@smithy/types': 4.2.0 + '@smithy/util-hex-encoding': 4.0.0 tslib: 2.8.1 - '@smithy/eventstream-serde-browser@3.0.14': + '@smithy/eventstream-serde-browser@4.0.2': dependencies: - '@smithy/eventstream-serde-universal': 3.0.13 - '@smithy/types': 3.7.2 + '@smithy/eventstream-serde-universal': 4.0.2 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@smithy/eventstream-serde-config-resolver@3.0.11': + '@smithy/eventstream-serde-config-resolver@4.1.0': dependencies: - '@smithy/types': 3.7.2 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@smithy/eventstream-serde-node@3.0.13': + '@smithy/eventstream-serde-node@4.0.2': dependencies: - '@smithy/eventstream-serde-universal': 3.0.13 - '@smithy/types': 3.7.2 + '@smithy/eventstream-serde-universal': 4.0.2 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@smithy/eventstream-serde-universal@3.0.13': + '@smithy/eventstream-serde-universal@4.0.2': dependencies: - '@smithy/eventstream-codec': 3.1.10 - '@smithy/types': 3.7.2 + '@smithy/eventstream-codec': 4.0.2 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@smithy/fetch-http-handler@4.1.2': + '@smithy/fetch-http-handler@5.0.2': dependencies: - '@smithy/protocol-http': 4.1.8 - '@smithy/querystring-builder': 3.0.11 - '@smithy/types': 3.7.2 - '@smithy/util-base64': 3.0.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/querystring-builder': 4.0.2 + '@smithy/types': 4.2.0 + '@smithy/util-base64': 4.0.0 tslib: 2.8.1 - '@smithy/hash-node@3.0.11': + '@smithy/hash-node@4.0.2': dependencies: - '@smithy/types': 3.7.2 - '@smithy/util-buffer-from': 3.0.0 - '@smithy/util-utf8': 3.0.0 + '@smithy/types': 4.2.0 + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-utf8': 4.0.0 tslib: 2.8.1 - '@smithy/invalid-dependency@3.0.11': + '@smithy/invalid-dependency@4.0.2': dependencies: - '@smithy/types': 3.7.2 + '@smithy/types': 4.2.0 tslib: 2.8.1 '@smithy/is-array-buffer@2.2.0': dependencies: tslib: 2.8.1 - '@smithy/is-array-buffer@3.0.0': + '@smithy/is-array-buffer@4.0.0': dependencies: tslib: 2.8.1 - '@smithy/middleware-content-length@3.0.13': + '@smithy/middleware-content-length@4.0.2': dependencies: - '@smithy/protocol-http': 4.1.8 - '@smithy/types': 3.7.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@smithy/middleware-endpoint@3.2.7': + '@smithy/middleware-endpoint@4.1.0': dependencies: - '@smithy/core': 2.5.6 - '@smithy/middleware-serde': 3.0.11 - '@smithy/node-config-provider': 3.1.12 - '@smithy/shared-ini-file-loader': 3.1.12 - '@smithy/types': 3.7.2 - '@smithy/url-parser': 3.0.11 - '@smithy/util-middleware': 3.0.11 + '@smithy/core': 3.2.0 + '@smithy/middleware-serde': 4.0.3 + '@smithy/node-config-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-middleware': 4.0.2 tslib: 2.8.1 - '@smithy/middleware-retry@3.0.32': + '@smithy/middleware-retry@4.1.0': dependencies: - '@smithy/node-config-provider': 3.1.12 - '@smithy/protocol-http': 4.1.8 - '@smithy/service-error-classification': 3.0.11 - '@smithy/smithy-client': 3.5.2 - '@smithy/types': 3.7.2 - '@smithy/util-middleware': 3.0.11 - '@smithy/util-retry': 3.0.11 + '@smithy/node-config-provider': 4.0.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/service-error-classification': 4.0.2 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.2 tslib: 2.8.1 uuid: 9.0.1 - '@smithy/middleware-serde@3.0.11': + '@smithy/middleware-serde@4.0.3': dependencies: - '@smithy/types': 3.7.2 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@smithy/middleware-stack@3.0.11': + '@smithy/middleware-stack@4.0.2': dependencies: - '@smithy/types': 3.7.2 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@smithy/node-config-provider@3.1.12': + '@smithy/node-config-provider@4.0.2': dependencies: - '@smithy/property-provider': 3.1.11 - '@smithy/shared-ini-file-loader': 3.1.12 - '@smithy/types': 3.7.2 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@smithy/node-http-handler@3.3.3': + '@smithy/node-http-handler@4.0.4': dependencies: - '@smithy/abort-controller': 3.1.9 - '@smithy/protocol-http': 4.1.8 - '@smithy/querystring-builder': 3.0.11 - '@smithy/types': 3.7.2 + '@smithy/abort-controller': 4.0.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/querystring-builder': 4.0.2 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@smithy/property-provider@3.1.11': + '@smithy/property-provider@4.0.2': dependencies: - '@smithy/types': 3.7.2 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@smithy/protocol-http@4.1.8': + '@smithy/protocol-http@5.1.0': dependencies: - '@smithy/types': 3.7.2 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@smithy/querystring-builder@3.0.11': + '@smithy/querystring-builder@4.0.2': dependencies: - '@smithy/types': 3.7.2 - '@smithy/util-uri-escape': 3.0.0 + '@smithy/types': 4.2.0 + '@smithy/util-uri-escape': 4.0.0 tslib: 2.8.1 - '@smithy/querystring-parser@3.0.11': + '@smithy/querystring-parser@4.0.2': dependencies: - '@smithy/types': 3.7.2 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@smithy/service-error-classification@3.0.11': + '@smithy/service-error-classification@4.0.2': dependencies: - '@smithy/types': 3.7.2 + '@smithy/types': 4.2.0 - '@smithy/shared-ini-file-loader@3.1.12': + '@smithy/shared-ini-file-loader@4.0.2': dependencies: - '@smithy/types': 3.7.2 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@smithy/signature-v4@4.2.4': + '@smithy/signature-v4@5.0.2': dependencies: - '@smithy/is-array-buffer': 3.0.0 - '@smithy/protocol-http': 4.1.8 - '@smithy/types': 3.7.2 - '@smithy/util-hex-encoding': 3.0.0 - '@smithy/util-middleware': 3.0.11 - '@smithy/util-uri-escape': 3.0.0 - '@smithy/util-utf8': 3.0.0 + '@smithy/is-array-buffer': 4.0.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + '@smithy/util-hex-encoding': 4.0.0 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-uri-escape': 4.0.0 + '@smithy/util-utf8': 4.0.0 tslib: 2.8.1 - '@smithy/smithy-client@3.5.2': + '@smithy/smithy-client@4.2.0': dependencies: - '@smithy/core': 2.5.6 - '@smithy/middleware-endpoint': 3.2.7 - '@smithy/middleware-stack': 3.0.11 - '@smithy/protocol-http': 4.1.8 - '@smithy/types': 3.7.2 - '@smithy/util-stream': 3.3.3 + '@smithy/core': 3.2.0 + '@smithy/middleware-endpoint': 4.1.0 + '@smithy/middleware-stack': 4.0.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + '@smithy/util-stream': 4.2.0 tslib: 2.8.1 - '@smithy/types@3.7.2': + '@smithy/types@4.2.0': dependencies: tslib: 2.8.1 - '@smithy/url-parser@3.0.11': + '@smithy/url-parser@4.0.2': dependencies: - '@smithy/querystring-parser': 3.0.11 - '@smithy/types': 3.7.2 + '@smithy/querystring-parser': 4.0.2 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@smithy/util-base64@3.0.0': + '@smithy/util-base64@4.0.0': dependencies: - '@smithy/util-buffer-from': 3.0.0 - '@smithy/util-utf8': 3.0.0 + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-utf8': 4.0.0 tslib: 2.8.1 - '@smithy/util-body-length-browser@3.0.0': + '@smithy/util-body-length-browser@4.0.0': dependencies: tslib: 2.8.1 - '@smithy/util-body-length-node@3.0.0': + '@smithy/util-body-length-node@4.0.0': dependencies: tslib: 2.8.1 @@ -11251,66 +10938,66 @@ snapshots: '@smithy/is-array-buffer': 2.2.0 tslib: 2.8.1 - '@smithy/util-buffer-from@3.0.0': + '@smithy/util-buffer-from@4.0.0': dependencies: - '@smithy/is-array-buffer': 3.0.0 + '@smithy/is-array-buffer': 4.0.0 tslib: 2.8.1 - '@smithy/util-config-provider@3.0.0': + '@smithy/util-config-provider@4.0.0': dependencies: tslib: 2.8.1 - '@smithy/util-defaults-mode-browser@3.0.32': + '@smithy/util-defaults-mode-browser@4.0.8': dependencies: - '@smithy/property-provider': 3.1.11 - '@smithy/smithy-client': 3.5.2 - '@smithy/types': 3.7.2 + '@smithy/property-provider': 4.0.2 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 bowser: 2.11.0 tslib: 2.8.1 - '@smithy/util-defaults-mode-node@3.0.32': + '@smithy/util-defaults-mode-node@4.0.8': dependencies: - '@smithy/config-resolver': 3.0.13 - '@smithy/credential-provider-imds': 3.2.8 - '@smithy/node-config-provider': 3.1.12 - '@smithy/property-provider': 3.1.11 - '@smithy/smithy-client': 3.5.2 - '@smithy/types': 3.7.2 + '@smithy/config-resolver': 4.1.0 + '@smithy/credential-provider-imds': 4.0.2 + '@smithy/node-config-provider': 4.0.2 + '@smithy/property-provider': 4.0.2 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@smithy/util-endpoints@2.1.7': + '@smithy/util-endpoints@3.0.2': dependencies: - '@smithy/node-config-provider': 3.1.12 - '@smithy/types': 3.7.2 + '@smithy/node-config-provider': 4.0.2 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@smithy/util-hex-encoding@3.0.0': + '@smithy/util-hex-encoding@4.0.0': dependencies: tslib: 2.8.1 - '@smithy/util-middleware@3.0.11': + '@smithy/util-middleware@4.0.2': dependencies: - '@smithy/types': 3.7.2 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@smithy/util-retry@3.0.11': + '@smithy/util-retry@4.0.2': dependencies: - '@smithy/service-error-classification': 3.0.11 - '@smithy/types': 3.7.2 + '@smithy/service-error-classification': 4.0.2 + '@smithy/types': 4.2.0 tslib: 2.8.1 - '@smithy/util-stream@3.3.3': + '@smithy/util-stream@4.2.0': dependencies: - '@smithy/fetch-http-handler': 4.1.2 - '@smithy/node-http-handler': 3.3.3 - '@smithy/types': 3.7.2 - '@smithy/util-base64': 3.0.0 - '@smithy/util-buffer-from': 3.0.0 - '@smithy/util-hex-encoding': 3.0.0 - '@smithy/util-utf8': 3.0.0 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/node-http-handler': 4.0.4 + '@smithy/types': 4.2.0 + '@smithy/util-base64': 4.0.0 + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-hex-encoding': 4.0.0 + '@smithy/util-utf8': 4.0.0 tslib: 2.8.1 - '@smithy/util-uri-escape@3.0.0': + '@smithy/util-uri-escape@4.0.0': dependencies: tslib: 2.8.1 @@ -11319,15 +11006,15 @@ snapshots: '@smithy/util-buffer-from': 2.2.0 tslib: 2.8.1 - '@smithy/util-utf8@3.0.0': + '@smithy/util-utf8@4.0.0': dependencies: - '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-buffer-from': 4.0.0 tslib: 2.8.1 - '@stylistic/eslint-plugin-ts@2.11.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2)': + '@stylistic/eslint-plugin-ts@2.13.0(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2)': dependencies: - '@typescript-eslint/utils': 8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) - eslint: 9.16.0(jiti@1.21.6) + '@typescript-eslint/utils': 8.28.0(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2) + eslint: 9.23.0(jiti@1.21.7) eslint-visitor-keys: 4.2.0 espree: 10.3.0 transitivePeerDependencies: @@ -11342,18 +11029,18 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tanstack/react-virtual@3.13.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-virtual@3.13.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/virtual-core': 3.13.2 + '@tanstack/virtual-core': 3.13.5 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@tanstack/virtual-core@3.13.2': {} + '@tanstack/virtual-core@3.13.5': {} '@testing-library/dom@10.4.0': dependencies: '@babel/code-frame': 7.26.2 - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.27.0 '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 @@ -11371,57 +11058,57 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 - '@testing-library/react@16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@testing-library/react@16.2.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.5(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.27.0 '@testing-library/dom': 10.4.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.12 - '@types/react-dom': 18.3.1 + '@types/react': 18.3.20 + '@types/react-dom': 18.3.5(@types/react@18.3.20) '@tootallnate/once@2.0.0': {} '@types/acorn@4.0.6': dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 '@types/aria-query@5.0.4': {} '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.26.2 - '@babel/types': 7.26.0 + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.6 + '@types/babel__traverse': 7.20.7 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.26.0 + '@babel/types': 7.27.0 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.26.2 - '@babel/types': 7.26.0 + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 - '@types/babel__traverse@7.20.6': + '@types/babel__traverse@7.20.7': dependencies: - '@babel/types': 7.26.0 + '@babel/types': 7.27.0 '@types/cacheable-request@6.0.3': dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 22.10.1 + '@types/node': 20.17.28 '@types/responselike': 1.0.3 '@types/cookie@0.6.0': {} '@types/debug@4.1.12': dependencies: - '@types/ms': 0.7.34 + '@types/ms': 2.1.0 '@types/diff-match-patch@1.0.36': {} @@ -11431,27 +11118,21 @@ snapshots: '@types/electron@1.6.12': dependencies: - electron: 33.3.2 + electron: 33.4.8 transitivePeerDependencies: - supports-color - '@types/eslint@8.56.10': - dependencies: - '@types/estree': 1.0.6 - '@types/json-schema': 7.0.15 - optional: true - '@types/estree-jsx@1.0.5': dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 - '@types/estree@1.0.6': {} + '@types/estree@1.0.7': {} '@types/file-saver@2.0.7': {} '@types/fs-extra@9.0.13': dependencies: - '@types/node': 22.10.1 + '@types/node': 22.13.14 '@types/hast@2.3.10': dependencies: @@ -11463,7 +11144,7 @@ snapshots: '@types/hoist-non-react-statics@3.3.6': dependencies: - '@types/react': 18.3.12 + '@types/react': 18.3.20 hoist-non-react-statics: 3.3.2 '@types/http-cache-semantics@4.0.4': {} @@ -11474,7 +11155,7 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 22.10.1 + '@types/node': 20.17.28 '@types/mdast@3.0.15': dependencies: @@ -11486,13 +11167,13 @@ snapshots: '@types/mdx@2.0.13': {} - '@types/ms@0.7.34': {} + '@types/ms@2.1.0': {} - '@types/node@20.17.16': + '@types/node@20.17.28': dependencies: undici-types: 6.19.8 - '@types/node@22.10.1': + '@types/node@22.13.14': dependencies: undici-types: 6.20.0 @@ -11500,38 +11181,42 @@ snapshots: '@types/plist@3.0.5': dependencies: - '@types/node': 22.10.1 + '@types/node': 22.13.14 xmlbuilder: 15.1.1 optional: true - '@types/prop-types@15.7.13': {} + '@types/prop-types@15.7.14': {} '@types/raf@3.4.3': optional: true '@types/react-beautiful-dnd@13.1.8': dependencies: - '@types/react': 18.3.12 + '@types/react': 18.3.20 - '@types/react-dom@18.3.1': + '@types/react-dom@18.3.5(@types/react@18.3.20)': dependencies: - '@types/react': 18.3.12 + '@types/react': 18.3.20 '@types/react-redux@7.1.34': dependencies: '@types/hoist-non-react-statics': 3.3.6 - '@types/react': 18.3.12 + '@types/react': 18.3.20 hoist-non-react-statics: 3.3.2 redux: 4.2.1 - '@types/react@18.3.12': + '@types/react-window@1.8.8': dependencies: - '@types/prop-types': 15.7.13 + '@types/react': 18.3.20 + + '@types/react@18.3.20': + dependencies: + '@types/prop-types': 15.7.14 csstype: 3.1.3 '@types/responselike@1.0.3': dependencies: - '@types/node': 22.10.1 + '@types/node': 20.17.28 '@types/unist@2.0.11': {} @@ -11539,136 +11224,131 @@ snapshots: '@types/uuid@9.0.8': {} - '@types/verror@1.10.10': + '@types/verror@1.10.11': optional: true '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.10.1 + '@types/node': 20.17.28 optional: true - '@typescript-eslint/eslint-plugin@8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2))(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2)': + '@typescript-eslint/eslint-plugin@8.28.0(@typescript-eslint/parser@8.28.0(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2))(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) - '@typescript-eslint/scope-manager': 8.17.0 - '@typescript-eslint/type-utils': 8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) - '@typescript-eslint/utils': 8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) - '@typescript-eslint/visitor-keys': 8.17.0 - eslint: 9.16.0(jiti@1.21.6) + '@typescript-eslint/parser': 8.28.0(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2) + '@typescript-eslint/scope-manager': 8.28.0 + '@typescript-eslint/type-utils': 8.28.0(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2) + '@typescript-eslint/utils': 8.28.0(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.28.0 + eslint: 9.23.0(jiti@1.21.7) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.4.3(typescript@5.7.2) - optionalDependencies: - typescript: 5.7.2 + ts-api-utils: 2.1.0(typescript@5.8.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2)': + '@typescript-eslint/parser@8.28.0(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2)': dependencies: - '@typescript-eslint/scope-manager': 8.17.0 - '@typescript-eslint/types': 8.17.0 - '@typescript-eslint/typescript-estree': 8.17.0(typescript@5.7.2) - '@typescript-eslint/visitor-keys': 8.17.0 - debug: 4.3.7 - eslint: 9.16.0(jiti@1.21.6) - optionalDependencies: - typescript: 5.7.2 + '@typescript-eslint/scope-manager': 8.28.0 + '@typescript-eslint/types': 8.28.0 + '@typescript-eslint/typescript-estree': 8.28.0(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.28.0 + debug: 4.4.0 + eslint: 9.23.0(jiti@1.21.7) + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.17.0': + '@typescript-eslint/scope-manager@8.28.0': dependencies: - '@typescript-eslint/types': 8.17.0 - '@typescript-eslint/visitor-keys': 8.17.0 + '@typescript-eslint/types': 8.28.0 + '@typescript-eslint/visitor-keys': 8.28.0 - '@typescript-eslint/type-utils@8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2)': + '@typescript-eslint/type-utils@8.28.0(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2)': dependencies: - '@typescript-eslint/typescript-estree': 8.17.0(typescript@5.7.2) - '@typescript-eslint/utils': 8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) - debug: 4.3.7 - eslint: 9.16.0(jiti@1.21.6) - ts-api-utils: 1.4.3(typescript@5.7.2) - optionalDependencies: - typescript: 5.7.2 + '@typescript-eslint/typescript-estree': 8.28.0(typescript@5.8.2) + '@typescript-eslint/utils': 8.28.0(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2) + debug: 4.4.0 + eslint: 9.23.0(jiti@1.21.7) + ts-api-utils: 2.1.0(typescript@5.8.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.17.0': {} + '@typescript-eslint/types@8.28.0': {} - '@typescript-eslint/typescript-estree@8.17.0(typescript@5.7.2)': + '@typescript-eslint/typescript-estree@8.28.0(typescript@5.8.2)': dependencies: - '@typescript-eslint/types': 8.17.0 - '@typescript-eslint/visitor-keys': 8.17.0 - debug: 4.3.7 - fast-glob: 3.3.2 + '@typescript-eslint/types': 8.28.0 + '@typescript-eslint/visitor-keys': 8.28.0 + debug: 4.4.0 + fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.6.3 - ts-api-utils: 1.4.3(typescript@5.7.2) - optionalDependencies: - typescript: 5.7.2 + semver: 7.7.1 + ts-api-utils: 2.1.0(typescript@5.8.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2)': + '@typescript-eslint/utils@8.28.0(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@1.21.6)) - '@typescript-eslint/scope-manager': 8.17.0 - '@typescript-eslint/types': 8.17.0 - '@typescript-eslint/typescript-estree': 8.17.0(typescript@5.7.2) - eslint: 9.16.0(jiti@1.21.6) - optionalDependencies: - typescript: 5.7.2 + '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0(jiti@1.21.7)) + '@typescript-eslint/scope-manager': 8.28.0 + '@typescript-eslint/types': 8.28.0 + '@typescript-eslint/typescript-estree': 8.28.0(typescript@5.8.2) + eslint: 9.23.0(jiti@1.21.7) + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.17.0': + '@typescript-eslint/visitor-keys@8.28.0': dependencies: - '@typescript-eslint/types': 8.17.0 + '@typescript-eslint/types': 8.28.0 eslint-visitor-keys: 4.2.0 - '@uiw/codemirror-theme-vscode@4.23.6(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)': + '@uiw/codemirror-theme-vscode@4.23.10(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.5)': dependencies: - '@uiw/codemirror-themes': 4.23.6(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0) + '@uiw/codemirror-themes': 4.23.10(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.5) transitivePeerDependencies: - '@codemirror/language' - '@codemirror/state' - '@codemirror/view' - '@uiw/codemirror-themes@4.23.6(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)': + '@uiw/codemirror-themes@4.23.10(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.5)': dependencies: - '@codemirror/language': 6.10.6 - '@codemirror/state': 6.4.1 - '@codemirror/view': 6.35.0 + '@codemirror/language': 6.11.0 + '@codemirror/state': 6.5.2 + '@codemirror/view': 6.36.5 - '@ungap/structured-clone@1.2.0': {} + '@ungap/structured-clone@1.3.0': {} - '@unocss/astro@0.61.9(rollup@4.28.0)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0))': + '@unocss/astro@0.61.9(rollup@4.38.0)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0))': dependencies: '@unocss/core': 0.61.9 '@unocss/reset': 0.61.9 - '@unocss/vite': 0.61.9(rollup@4.28.0)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)) + '@unocss/vite': 0.61.9(rollup@4.38.0)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)) optionalDependencies: - vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) + vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) transitivePeerDependencies: - rollup - supports-color - '@unocss/cli@0.61.9(rollup@4.28.0)': + '@unocss/cli@0.61.9(rollup@4.38.0)': dependencies: '@ampproject/remapping': 2.3.0 - '@rollup/pluginutils': 5.1.3(rollup@4.28.0) + '@rollup/pluginutils': 5.1.4(rollup@4.38.0) '@unocss/config': 0.61.9 '@unocss/core': 0.61.9 '@unocss/preset-uno': 0.61.9 cac: 6.7.14 chokidar: 3.6.0 colorette: 2.0.20 - consola: 3.2.3 - fast-glob: 3.3.2 - magic-string: 0.30.14 + consola: 3.4.2 + fast-glob: 3.3.3 + magic-string: 0.30.17 pathe: 1.1.2 perfect-debounce: 1.0.0 transitivePeerDependencies: @@ -11695,15 +11375,15 @@ snapshots: gzip-size: 6.0.0 sirv: 2.0.4 - '@unocss/postcss@0.61.9(postcss@8.4.49)': + '@unocss/postcss@0.61.9(postcss@8.5.3)': dependencies: '@unocss/config': 0.61.9 '@unocss/core': 0.61.9 '@unocss/rule-utils': 0.61.9 css-tree: 2.3.1 - fast-glob: 3.3.2 - magic-string: 0.30.14 - postcss: 8.4.49 + fast-glob: 3.3.3 + magic-string: 0.30.17 + postcss: 8.5.3 transitivePeerDependencies: - supports-color @@ -11713,7 +11393,7 @@ snapshots: '@unocss/preset-icons@0.61.9': dependencies: - '@iconify/utils': 2.1.33 + '@iconify/utils': 2.3.0 '@unocss/core': 0.61.9 ofetch: 1.4.1 transitivePeerDependencies: @@ -11757,15 +11437,15 @@ snapshots: '@unocss/rule-utils@0.61.9': dependencies: '@unocss/core': 0.61.9 - magic-string: 0.30.14 + magic-string: 0.30.17 '@unocss/scope@0.61.9': {} '@unocss/transformer-attributify-jsx-babel@0.61.9': dependencies: - '@babel/core': 7.26.0 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) - '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) + '@babel/core': 7.26.10 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) + '@babel/preset-typescript': 7.27.0(@babel/core@7.26.10) '@unocss/core': 0.61.9 transitivePeerDependencies: - supports-color @@ -11788,30 +11468,30 @@ snapshots: dependencies: '@unocss/core': 0.61.9 - '@unocss/vite@0.61.9(rollup@4.28.0)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0))': + '@unocss/vite@0.61.9(rollup@4.38.0)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0))': dependencies: '@ampproject/remapping': 2.3.0 - '@rollup/pluginutils': 5.1.3(rollup@4.28.0) + '@rollup/pluginutils': 5.1.4(rollup@4.38.0) '@unocss/config': 0.61.9 '@unocss/core': 0.61.9 '@unocss/inspector': 0.61.9 '@unocss/scope': 0.61.9 '@unocss/transformer-directives': 0.61.9 chokidar: 3.6.0 - fast-glob: 3.3.2 - magic-string: 0.30.14 - vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) + fast-glob: 3.3.3 + magic-string: 0.30.17 + vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) transitivePeerDependencies: - rollup - supports-color - '@vanilla-extract/babel-plugin-debug-ids@1.1.0': + '@vanilla-extract/babel-plugin-debug-ids@1.2.0': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 transitivePeerDependencies: - supports-color - '@vanilla-extract/css@1.16.1': + '@vanilla-extract/css@1.17.1': dependencies: '@emotion/hash': 0.9.2 '@vanilla-extract/private': 1.0.6 @@ -11828,21 +11508,21 @@ snapshots: transitivePeerDependencies: - babel-plugin-macros - '@vanilla-extract/integration@6.5.0(@types/node@22.10.1)(sass-embedded@1.81.0)': + '@vanilla-extract/integration@6.5.0(@types/node@22.13.14)(sass-embedded@1.86.0)': dependencies: - '@babel/core': 7.26.0 - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) - '@vanilla-extract/babel-plugin-debug-ids': 1.1.0 - '@vanilla-extract/css': 1.16.1 - esbuild: 0.17.19 + '@babel/core': 7.26.10 + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10) + '@vanilla-extract/babel-plugin-debug-ids': 1.2.0 + '@vanilla-extract/css': 1.17.1 + esbuild: 0.17.6 eval: 0.1.8 find-up: 5.0.0 javascript-stringify: 2.1.0 lodash: 4.17.21 - mlly: 1.7.3 + mlly: 1.7.4 outdent: 0.8.0 - vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) - vite-node: 1.6.0(@types/node@22.10.1)(sass-embedded@1.81.0) + vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) + vite-node: 1.6.1(@types/node@22.13.14)(sass-embedded@1.86.0) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -11857,55 +11537,55 @@ snapshots: '@vanilla-extract/private@1.0.6': {} - '@vitejs/plugin-react@4.3.4(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0))': + '@vitejs/plugin-react@4.3.4(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0))': dependencies: - '@babel/core': 7.26.0 - '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) + '@babel/core': 7.26.10 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) + vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) transitivePeerDependencies: - supports-color - '@vitest/expect@2.1.8': + '@vitest/expect@2.1.9': dependencies: - '@vitest/spy': 2.1.8 - '@vitest/utils': 2.1.8 - chai: 5.1.2 + '@vitest/spy': 2.1.9 + '@vitest/utils': 2.1.9 + chai: 5.2.0 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.8(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0))': + '@vitest/mocker@2.1.9(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0))': dependencies: - '@vitest/spy': 2.1.8 + '@vitest/spy': 2.1.9 estree-walker: 3.0.3 - magic-string: 0.30.14 + magic-string: 0.30.17 optionalDependencies: - vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) + vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) - '@vitest/pretty-format@2.1.8': + '@vitest/pretty-format@2.1.9': dependencies: tinyrainbow: 1.2.0 - '@vitest/runner@2.1.8': + '@vitest/runner@2.1.9': dependencies: - '@vitest/utils': 2.1.8 + '@vitest/utils': 2.1.9 pathe: 1.1.2 - '@vitest/snapshot@2.1.8': + '@vitest/snapshot@2.1.9': dependencies: - '@vitest/pretty-format': 2.1.8 - magic-string: 0.30.14 + '@vitest/pretty-format': 2.1.9 + magic-string: 0.30.17 pathe: 1.1.2 - '@vitest/spy@2.1.8': + '@vitest/spy@2.1.9': dependencies: tinyspy: 3.0.2 - '@vitest/utils@2.1.8': + '@vitest/utils@2.1.9': dependencies: - '@vitest/pretty-format': 2.1.8 - loupe: 3.1.2 + '@vitest/pretty-format': 2.1.9 + loupe: 3.1.3 tinyrainbow: 1.2.0 '@web3-storage/multipart-parser@1.0.0': {} @@ -11938,14 +11618,16 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-jsx@5.3.2(acorn@8.14.0): + acorn-jsx@5.3.2(acorn@8.14.1): dependencies: - acorn: 8.14.0 + acorn: 8.14.1 acorn-walk@8.3.2: {} acorn@8.14.0: {} + acorn@8.14.1: {} + agent-base@6.0.2: dependencies: debug: 4.4.0 @@ -11963,17 +11645,17 @@ snapshots: clean-stack: 2.2.0 indent-string: 4.0.0 - ai@4.1.2(react@18.3.1)(zod@3.24.1): + ai@4.2.8(react@18.3.1)(zod@3.24.2): dependencies: - '@ai-sdk/provider': 1.0.6 - '@ai-sdk/provider-utils': 2.1.2(zod@3.24.1) - '@ai-sdk/react': 1.1.2(react@18.3.1)(zod@3.24.1) - '@ai-sdk/ui-utils': 1.1.2(zod@3.24.1) + '@ai-sdk/provider': 1.1.0 + '@ai-sdk/provider-utils': 2.2.1(zod@3.24.2) + '@ai-sdk/react': 1.2.3(react@18.3.1)(zod@3.24.2) + '@ai-sdk/ui-utils': 1.2.2(zod@3.24.2) '@opentelemetry/api': 1.9.0 jsondiffpatch: 0.6.0 + zod: 3.24.2 optionalDependencies: react: 18.3.1 - zod: 3.24.1 ajv-formats@3.0.1(ajv@8.17.1): optionalDependencies: @@ -12031,14 +11713,14 @@ snapshots: builder-util-runtime: 9.2.10 chromium-pickle-js: 0.2.0 config-file-ts: 0.2.8-rc1 - debug: 4.3.7 + debug: 4.4.0 dmg-builder: 25.1.8(electron-builder-squirrel-windows@25.1.8) dotenv: 16.4.7 dotenv-expand: 11.0.7 ejs: 3.1.10 electron-builder-squirrel-windows: 25.1.8(dmg-builder@25.1.8) electron-publish: 25.1.7 - form-data: 4.0.1 + form-data: 4.0.2 fs-extra: 10.1.0 hosted-git-info: 4.1.0 is-ci: 3.0.1 @@ -12049,7 +11731,7 @@ snapshots: minimatch: 10.0.1 resedit: 1.7.2 sanitize-filename: 1.6.3 - semver: 7.6.3 + semver: 7.7.1 tar: 6.2.1 temp-file: 3.4.0 transitivePeerDependencies: @@ -12130,10 +11812,10 @@ snapshots: assert@2.1.0: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 is-nan: 1.3.2 object-is: 1.1.6 - object.assign: 4.1.5 + object.assign: 4.1.7 util: 0.12.5 assertion-error@2.0.1: {} @@ -12162,7 +11844,7 @@ snapshots: available-typed-arrays@1.0.7: dependencies: - possible-typed-array-names: 1.0.0 + possible-typed-array-names: 1.1.0 bail@2.0.2: {} @@ -12242,7 +11924,7 @@ snapshots: browser-resolve@2.0.0: dependencies: - resolve: 1.22.8 + resolve: 1.22.10 browserify-aes@1.2.0: dependencies: @@ -12293,12 +11975,12 @@ snapshots: dependencies: pako: 1.0.11 - browserslist@4.24.2: + browserslist@4.24.4: dependencies: - caniuse-lite: 1.0.30001685 - electron-to-chromium: 1.5.68 - node-releases: 2.0.18 - update-browserslist-db: 1.1.1(browserslist@4.24.2) + caniuse-lite: 1.0.30001707 + electron-to-chromium: 1.5.128 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.24.4) btoa@1.2.1: {} @@ -12317,7 +11999,14 @@ snapshots: builder-util-runtime@9.2.10: dependencies: - debug: 4.3.7 + debug: 4.4.0 + sax: 1.4.1 + transitivePeerDependencies: + - supports-color + + builder-util-runtime@9.3.1: + dependencies: + debug: 4.4.0 sax: 1.4.1 transitivePeerDependencies: - supports-color @@ -12331,7 +12020,7 @@ snapshots: builder-util-runtime: 9.2.10 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.3.7 + debug: 4.4.0 fs-extra: 10.1.0 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 @@ -12345,7 +12034,7 @@ snapshots: builtin-status-codes@3.0.0: {} - bundle-require@5.0.0(esbuild@0.23.1): + bundle-require@5.1.0(esbuild@0.23.1): dependencies: esbuild: 0.23.1 load-tsconfig: 0.2.5 @@ -12404,21 +12093,30 @@ snapshots: normalize-url: 6.1.0 responselike: 2.0.1 - call-bind@1.0.7: + call-bind-apply-helpers@1.0.2: dependencies: - es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 set-function-length: 1.2.2 + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + callsites@3.1.0: {} - caniuse-lite@1.0.30001685: {} + caniuse-lite@1.0.30001707: {} - canvg@3.0.10: + canvg@3.0.11: dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.27.0 '@types/raf': 3.4.3 core-js: 3.41.0 raf: 3.4.1 @@ -12430,12 +12128,12 @@ snapshots: ccount@2.0.1: {} - chai@5.1.2: + chai@5.2.0: dependencies: assertion-error: 2.0.1 check-error: 2.1.1 deep-eql: 5.0.2 - loupe: 3.1.2 + loupe: 3.1.3 pathval: 2.0.0 chalk@3.0.0: @@ -12509,8 +12207,6 @@ snapshots: string-width: 4.2.3 optional: true - client-only@0.0.1: {} - cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -12570,7 +12266,7 @@ snapshots: compressible@2.0.18: dependencies: - mime-db: 1.52.0 + mime-db: 1.54.0 compression@1.8.0: dependencies: @@ -12591,7 +12287,7 @@ snapshots: chalk: 4.1.2 date-fns: 2.30.0 lodash: 4.17.21 - rxjs: 7.8.1 + rxjs: 7.8.2 shell-quote: 1.8.2 spawn-command: 0.0.2 supports-color: 8.1.1 @@ -12607,17 +12303,19 @@ snapshots: dot-prop: 9.0.0 env-paths: 3.0.0 json-schema-typed: 8.0.1 - semver: 7.6.3 + semver: 7.7.1 uint8array-extras: 1.4.0 confbox@0.1.8: {} + confbox@0.2.1: {} + config-file-ts@0.2.8-rc1: dependencies: glob: 10.4.5 - typescript: 5.7.2 + typescript: 5.8.2 - consola@3.2.3: {} + consola@3.4.2: {} console-browserify@1.2.0: {} @@ -12734,9 +12432,9 @@ snapshots: cssesc@3.0.0: {} - cssstyle@4.2.1: + cssstyle@4.3.0: dependencies: - '@asamuzakjp/css-color': 2.8.3 + '@asamuzakjp/css-color': 3.1.1 rrweb-cssom: 0.8.0 csstype@3.1.3: {} @@ -12750,11 +12448,11 @@ snapshots: data-urls@5.0.0: dependencies: whatwg-mimetype: 4.0.0 - whatwg-url: 14.1.1 + whatwg-url: 14.2.0 date-fns@2.30.0: dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.27.0 date-fns@3.6.0: {} @@ -12766,17 +12464,13 @@ snapshots: dependencies: ms: 2.0.0 - debug@4.3.7: - dependencies: - ms: 2.1.3 - debug@4.4.0: dependencies: ms: 2.1.3 decimal.js@10.5.0: {} - decode-named-character-reference@1.0.2: + decode-named-character-reference@1.1.0: dependencies: character-entities: 2.0.2 @@ -12802,9 +12496,9 @@ snapshots: define-data-property@1.1.4: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 - gopd: 1.1.0 + gopd: 1.2.0 define-properties@1.2.1: dependencies: @@ -12877,7 +12571,7 @@ snapshots: dmg-license@1.0.11: dependencies: '@types/plist': 3.0.5 - '@types/verror': 1.10.10 + '@types/verror': 1.10.11 ajv: 6.12.6 crc: 3.8.0 iconv-corefoundation: 1.1.7 @@ -12903,7 +12597,7 @@ snapshots: dot-prop@9.0.0: dependencies: - type-fest: 4.30.0 + type-fest: 4.38.0 dotenv-expand@11.0.7: dependencies: @@ -12911,6 +12605,12 @@ snapshots: dotenv@16.4.7: {} + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + duplexer@0.1.2: {} duplexify@3.7.1: @@ -12960,7 +12660,7 @@ snapshots: - electron-builder-squirrel-windows - supports-color - electron-log@5.3.0: {} + electron-log@5.3.3: {} electron-publish@25.1.7: dependencies: @@ -12977,27 +12677,27 @@ snapshots: electron-store@10.0.1: dependencies: conf: 13.1.0 - type-fest: 4.30.0 + type-fest: 4.38.0 - electron-to-chromium@1.5.68: {} + electron-to-chromium@1.5.128: {} - electron-updater@6.3.9: + electron-updater@6.6.2: dependencies: - builder-util-runtime: 9.2.10 + builder-util-runtime: 9.3.1 fs-extra: 10.1.0 js-yaml: 4.1.0 lazy-val: 1.0.5 lodash.escaperegexp: 4.1.2 lodash.isequal: 4.5.0 - semver: 7.6.3 + semver: 7.7.1 tiny-typed-emitter: 2.1.0 transitivePeerDependencies: - supports-color - electron@33.3.2: + electron@33.4.8: dependencies: '@electron/get': 2.0.3 - '@types/node': 20.17.16 + '@types/node': 20.17.28 extract-zip: 2.0.1 transitivePeerDependencies: - supports-color @@ -13039,49 +12739,33 @@ snapshots: err-code@2.0.3: {} - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 + es-define-property@1.0.1: {} es-errors@1.3.0: {} - es-module-lexer@1.5.4: {} + es-module-lexer@1.6.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 es6-error@4.1.1: optional: true - esbuild-plugins-node-modules-polyfill@1.6.8(esbuild@0.17.6): + esbuild-plugins-node-modules-polyfill@1.7.0(esbuild@0.17.6): dependencies: - '@jspm/core': 2.0.1 + '@jspm/core': 2.1.0 esbuild: 0.17.6 - local-pkg: 0.5.1 + local-pkg: 1.1.1 resolve.exports: 2.0.3 - esbuild@0.17.19: - optionalDependencies: - '@esbuild/android-arm': 0.17.19 - '@esbuild/android-arm64': 0.17.19 - '@esbuild/android-x64': 0.17.19 - '@esbuild/darwin-arm64': 0.17.19 - '@esbuild/darwin-x64': 0.17.19 - '@esbuild/freebsd-arm64': 0.17.19 - '@esbuild/freebsd-x64': 0.17.19 - '@esbuild/linux-arm': 0.17.19 - '@esbuild/linux-arm64': 0.17.19 - '@esbuild/linux-ia32': 0.17.19 - '@esbuild/linux-loong64': 0.17.19 - '@esbuild/linux-mips64el': 0.17.19 - '@esbuild/linux-ppc64': 0.17.19 - '@esbuild/linux-riscv64': 0.17.19 - '@esbuild/linux-s390x': 0.17.19 - '@esbuild/linux-x64': 0.17.19 - '@esbuild/netbsd-x64': 0.17.19 - '@esbuild/openbsd-x64': 0.17.19 - '@esbuild/sunos-x64': 0.17.19 - '@esbuild/win32-arm64': 0.17.19 - '@esbuild/win32-ia32': 0.17.19 - '@esbuild/win32-x64': 0.17.19 - esbuild@0.17.6: optionalDependencies: '@esbuild/android-arm': 0.17.6 @@ -13188,6 +12872,34 @@ snapshots: '@esbuild/win32-ia32': 0.24.2 '@esbuild/win32-x64': 0.24.2 + esbuild@0.25.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.1 + '@esbuild/android-arm': 0.25.1 + '@esbuild/android-arm64': 0.25.1 + '@esbuild/android-x64': 0.25.1 + '@esbuild/darwin-arm64': 0.25.1 + '@esbuild/darwin-x64': 0.25.1 + '@esbuild/freebsd-arm64': 0.25.1 + '@esbuild/freebsd-x64': 0.25.1 + '@esbuild/linux-arm': 0.25.1 + '@esbuild/linux-arm64': 0.25.1 + '@esbuild/linux-ia32': 0.25.1 + '@esbuild/linux-loong64': 0.25.1 + '@esbuild/linux-mips64el': 0.25.1 + '@esbuild/linux-ppc64': 0.25.1 + '@esbuild/linux-riscv64': 0.25.1 + '@esbuild/linux-s390x': 0.25.1 + '@esbuild/linux-x64': 0.25.1 + '@esbuild/netbsd-arm64': 0.25.1 + '@esbuild/netbsd-x64': 0.25.1 + '@esbuild/openbsd-arm64': 0.25.1 + '@esbuild/openbsd-x64': 0.25.1 + '@esbuild/sunos-x64': 0.25.1 + '@esbuild/win32-arm64': 0.25.1 + '@esbuild/win32-ia32': 0.25.1 + '@esbuild/win32-x64': 0.25.1 + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -13196,46 +12908,45 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-compat-utils@0.6.4(eslint@9.16.0(jiti@1.21.6)): + eslint-compat-utils@0.6.4(eslint@9.23.0(jiti@1.21.7)): dependencies: - eslint: 9.16.0(jiti@1.21.6) - semver: 7.6.3 + eslint: 9.23.0(jiti@1.21.7) + semver: 7.7.1 - eslint-config-prettier@9.1.0(eslint@9.16.0(jiti@1.21.6)): + eslint-config-prettier@9.1.0(eslint@9.23.0(jiti@1.21.7)): dependencies: - eslint: 9.16.0(jiti@1.21.6) + eslint: 9.23.0(jiti@1.21.7) - eslint-json-compat-utils@0.2.1(eslint@9.16.0(jiti@1.21.6))(jsonc-eslint-parser@2.4.0): + eslint-json-compat-utils@0.2.1(eslint@9.23.0(jiti@1.21.7))(jsonc-eslint-parser@2.4.0): dependencies: - eslint: 9.16.0(jiti@1.21.6) + eslint: 9.23.0(jiti@1.21.7) esquery: 1.6.0 jsonc-eslint-parser: 2.4.0 - eslint-plugin-jsonc@2.18.2(eslint@9.16.0(jiti@1.21.6)): + eslint-plugin-jsonc@2.20.0(eslint@9.23.0(jiti@1.21.7)): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@1.21.6)) - eslint: 9.16.0(jiti@1.21.6) - eslint-compat-utils: 0.6.4(eslint@9.16.0(jiti@1.21.6)) - eslint-json-compat-utils: 0.2.1(eslint@9.16.0(jiti@1.21.6))(jsonc-eslint-parser@2.4.0) - espree: 9.6.1 + '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0(jiti@1.21.7)) + eslint: 9.23.0(jiti@1.21.7) + eslint-compat-utils: 0.6.4(eslint@9.23.0(jiti@1.21.7)) + eslint-json-compat-utils: 0.2.1(eslint@9.23.0(jiti@1.21.7))(jsonc-eslint-parser@2.4.0) + espree: 10.3.0 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.0 natural-compare: 1.4.0 - synckit: 0.6.2 + synckit: 0.10.3 transitivePeerDependencies: - '@eslint/json' - eslint-plugin-prettier@5.2.1(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@9.16.0(jiti@1.21.6)))(eslint@9.16.0(jiti@1.21.6))(prettier@3.4.1): + eslint-plugin-prettier@5.2.5(eslint-config-prettier@9.1.0(eslint@9.23.0(jiti@1.21.7)))(eslint@9.23.0(jiti@1.21.7))(prettier@3.5.3): dependencies: - eslint: 9.16.0(jiti@1.21.6) - prettier: 3.4.1 + eslint: 9.23.0(jiti@1.21.7) + prettier: 3.5.3 prettier-linter-helpers: 1.0.0 - synckit: 0.9.2 + synckit: 0.10.3 optionalDependencies: - '@types/eslint': 8.56.10 - eslint-config-prettier: 9.1.0(eslint@9.16.0(jiti@1.21.6)) + eslint-config-prettier: 9.1.0(eslint@9.23.0(jiti@1.21.7)) - eslint-scope@8.2.0: + eslint-scope@8.3.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 @@ -13244,26 +12955,27 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.16.0(jiti@1.21.6): + eslint@9.23.0(jiti@1.21.7): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@1.21.6)) + '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0(jiti@1.21.7)) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.19.0 - '@eslint/core': 0.9.0 - '@eslint/eslintrc': 3.2.0 - '@eslint/js': 9.16.0 - '@eslint/plugin-kit': 0.2.3 + '@eslint/config-array': 0.19.2 + '@eslint/config-helpers': 0.2.0 + '@eslint/core': 0.12.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.23.0 + '@eslint/plugin-kit': 0.2.7 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.1 - '@types/estree': 1.0.6 + '@humanwhocodes/retry': 0.4.2 + '@types/estree': 1.0.7 '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.3.7 + debug: 4.4.0 escape-string-regexp: 4.0.0 - eslint-scope: 8.2.0 + eslint-scope: 8.3.0 eslint-visitor-keys: 4.2.0 espree: 10.3.0 esquery: 1.6.0 @@ -13281,20 +12993,20 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 1.21.6 + jiti: 1.21.7 transitivePeerDependencies: - supports-color espree@10.3.0: dependencies: - acorn: 8.14.0 - acorn-jsx: 5.3.2(acorn@8.14.0) + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) eslint-visitor-keys: 4.2.0 espree@9.6.1: dependencies: - acorn: 8.14.0 - acorn-jsx: 5.3.2(acorn@8.14.0) + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) eslint-visitor-keys: 3.4.3 esquery@1.6.0: @@ -13309,7 +13021,7 @@ snapshots: estree-util-attach-comments@2.1.1: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 estree-util-build-jsx@2.2.2: dependencies: @@ -13344,7 +13056,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 esutils@2.0.3: {} @@ -13352,7 +13064,7 @@ snapshots: eval@0.1.8: dependencies: - '@types/node': 22.10.1 + '@types/node': 22.13.14 require-like: 0.1.2 event-target-shim@5.0.1: {} @@ -13361,7 +13073,7 @@ snapshots: eventsource-parser@1.1.2: {} - eventsource-parser@3.0.0: {} + eventsource-parser@3.0.1: {} evp_bytestokey@1.0.3: dependencies: @@ -13382,11 +13094,11 @@ snapshots: exit-hook@2.2.1: {} - expect-type@1.1.0: {} + expect-type@1.2.0: {} - exponential-backoff@3.1.1: {} + exponential-backoff@3.1.2: {} - express@4.21.1: + express@4.21.2: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 @@ -13407,7 +13119,7 @@ snapshots: methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 - path-to-regexp: 0.1.10 + path-to-regexp: 0.1.12 proxy-addr: 2.0.7 qs: 6.13.0 range-parser: 1.2.1 @@ -13428,7 +13140,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.3.7 + debug: 4.4.0 get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -13439,11 +13151,13 @@ snapshots: extsprintf@1.4.1: optional: true + fast-content-type-parse@2.0.1: {} + fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} - fast-glob@3.3.2: + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 @@ -13459,11 +13173,11 @@ snapshots: fast-xml-parser@4.4.1: dependencies: - strnum: 1.0.5 + strnum: 1.1.2 - fastq@1.17.1: + fastq@1.19.1: dependencies: - reusify: 1.0.4 + reusify: 1.1.0 fault@2.0.1: dependencies: @@ -13513,24 +13227,25 @@ snapshots: flat-cache@4.0.1: dependencies: - flatted: 3.3.2 + flatted: 3.3.3 keyv: 4.5.4 - flatted@3.3.2: {} + flatted@3.3.3: {} - for-each@0.3.3: + for-each@0.3.5: dependencies: is-callable: 1.2.7 - foreground-child@3.3.0: + foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 signal-exit: 4.1.0 - form-data@4.0.1: + form-data@4.0.2: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 mime-types: 2.1.35 format@0.2.2: {} @@ -13541,8 +13256,10 @@ snapshots: forwarded@0.2.0: {} - framer-motion@11.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + framer-motion@11.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: + motion-dom: 11.18.1 + motion-utils: 11.18.1 tslib: 2.8.1 optionalDependencies: react: 18.3.1 @@ -13611,18 +13328,28 @@ snapshots: get-caller-file@2.0.5: {} - get-intrinsic@1.2.4: + get-intrinsic@1.3.0: dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 es-errors: 1.3.0 + es-object-atoms: 1.1.1 function-bind: 1.1.2 - has-proto: 1.1.0 + get-proto: 1.0.1 + gopd: 1.2.0 has-symbols: 1.1.0 hasown: 2.0.2 + math-intrinsics: 1.1.0 get-nonce@1.0.1: {} get-port@5.1.1: {} + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + get-source@2.0.12: dependencies: data-uri-to-buffer: 2.0.2 @@ -13634,7 +13361,7 @@ snapshots: get-stream@6.0.1: {} - get-tsconfig@4.8.1: + get-tsconfig@4.10.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -13650,7 +13377,7 @@ snapshots: glob@10.4.5: dependencies: - foreground-child: 3.3.0 + foreground-child: 3.3.1 jackspeak: 3.4.3 minimatch: 9.0.5 minipass: 7.1.2 @@ -13687,7 +13414,7 @@ snapshots: es6-error: 4.1.1 matcher: 3.0.0 roarr: 2.15.4 - semver: 7.6.3 + semver: 7.7.1 serialize-error: 7.0.1 optional: true @@ -13695,19 +13422,17 @@ snapshots: globals@14.0.0: {} - globals@15.13.0: {} + globals@15.15.0: {} globalthis@1.0.4: dependencies: define-properties: 1.2.1 - gopd: 1.1.0 + gopd: 1.2.0 optional: true globrex@0.1.2: {} - gopd@1.1.0: - dependencies: - get-intrinsic: 1.2.4 + gopd@1.2.0: {} got@11.8.6: dependencies: @@ -13744,11 +13469,7 @@ snapshots: has-property-descriptors@1.0.2: dependencies: - es-define-property: 1.0.0 - - has-proto@1.1.0: - dependencies: - call-bind: 1.0.7 + es-define-property: 1.0.1 has-symbols@1.1.0: {} @@ -13772,13 +13493,13 @@ snapshots: dependencies: function-bind: 1.1.2 - hast-util-from-parse5@8.0.2: + hast-util-from-parse5@8.0.3: dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 devlop: 1.1.0 - hastscript: 9.0.0 - property-information: 6.5.0 + hastscript: 9.0.1 + property-information: 7.0.0 vfile: 6.0.3 vfile-location: 5.0.3 web-namespaces: 2.0.1 @@ -13791,8 +13512,8 @@ snapshots: dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 - '@ungap/structured-clone': 1.2.0 - hast-util-from-parse5: 8.0.2 + '@ungap/structured-clone': 1.3.0 + hast-util-from-parse5: 8.0.3 hast-util-to-parse5: 8.0.0 html-void-elements: 3.0.0 mdast-util-to-hast: 13.2.0 @@ -13806,12 +13527,12 @@ snapshots: hast-util-sanitize@5.0.2: dependencies: '@types/hast': 3.0.4 - '@ungap/structured-clone': 1.2.0 + '@ungap/structured-clone': 1.3.0 unist-util-position: 5.0.0 hast-util-to-estree@2.3.3: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 '@types/estree-jsx': 1.0.5 '@types/hast': 2.3.10 '@types/unist': 2.0.11 @@ -13829,7 +13550,7 @@ snapshots: transitivePeerDependencies: - supports-color - hast-util-to-html@9.0.3: + hast-util-to-html@9.0.5: dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 @@ -13838,14 +13559,14 @@ snapshots: hast-util-whitespace: 3.0.0 html-void-elements: 3.0.0 mdast-util-to-hast: 13.2.0 - property-information: 6.5.0 + property-information: 7.0.0 space-separated-tokens: 2.0.2 stringify-entities: 4.0.4 zwitch: 2.0.4 - hast-util-to-jsx-runtime@2.3.2: + hast-util-to-jsx-runtime@2.3.6: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 '@types/hast': 3.0.4 '@types/unist': 3.0.3 comma-separated-tokens: 2.0.3 @@ -13853,11 +13574,11 @@ snapshots: estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.1.3 + mdast-util-mdx-jsx: 3.2.0 mdast-util-mdxjs-esm: 2.0.1 - property-information: 6.5.0 + property-information: 7.0.0 space-separated-tokens: 2.0.2 - style-to-object: 1.0.8 + style-to-js: 1.1.16 unist-util-position: 5.0.0 vfile-message: 4.0.2 transitivePeerDependencies: @@ -13879,12 +13600,12 @@ snapshots: dependencies: '@types/hast': 3.0.4 - hastscript@9.0.0: + hastscript@9.0.1: dependencies: '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 4.0.0 - property-information: 6.5.0 + property-information: 7.0.0 space-separated-tokens: 2.0.2 hmac-drbg@1.0.1: @@ -13940,7 +13661,7 @@ snapshots: http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.3 - debug: 4.3.7 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -13961,7 +13682,7 @@ snapshots: https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 - debug: 4.3.7 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -13987,9 +13708,9 @@ snapshots: dependencies: safer-buffer: 2.1.2 - icss-utils@5.1.0(postcss@8.4.49): + icss-utils@5.1.0(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 ieee754@1.2.1: {} @@ -13999,22 +13720,22 @@ snapshots: immediate@3.0.6: {} - immutable@5.0.3: {} + immutable@5.1.1: {} - import-fresh@3.3.0: + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 importx@0.4.4: dependencies: - bundle-require: 5.0.0(esbuild@0.23.1) + bundle-require: 5.1.0(esbuild@0.23.1) debug: 4.4.0 esbuild: 0.23.1 jiti: 2.0.0-beta.3 - jiti-v1: jiti@1.21.6 + jiti-v1: jiti@1.21.7 pathe: 1.1.2 - tsx: 4.19.2 + tsx: 4.19.3 transitivePeerDependencies: - supports-color @@ -14035,10 +13756,6 @@ snapshots: inline-style-parser@0.2.4: {} - invariant@2.2.4: - dependencies: - loose-envify: 1.4.0 - ip-address@9.0.5: dependencies: jsbn: 1.1.0 @@ -14053,9 +13770,9 @@ snapshots: is-alphabetical: 2.0.1 is-decimal: 2.0.1 - is-arguments@1.1.1: + is-arguments@1.2.0: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.4 has-tostringtag: 1.0.2 is-arrayish@0.3.2: @@ -14073,7 +13790,7 @@ snapshots: dependencies: ci-info: 3.9.0 - is-core-module@2.15.1: + is-core-module@2.16.1: dependencies: hasown: 2.0.2 @@ -14085,9 +13802,12 @@ snapshots: is-fullwidth-code-point@3.0.0: {} - is-generator-function@1.0.10: + is-generator-function@1.1.0: dependencies: + call-bound: 1.0.4 + get-proto: 1.0.1 has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 is-glob@4.0.3: dependencies: @@ -14103,7 +13823,7 @@ snapshots: is-nan@1.3.2: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 is-number@7.0.0: {} @@ -14116,13 +13836,20 @@ snapshots: is-reference@3.0.3: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 is-stream@2.0.1: {} - is-typed-array@1.1.13: + is-typed-array@1.1.15: dependencies: - which-typed-array: 1.1.16 + which-typed-array: 1.1.19 is-unicode-supported@0.1.0: {} @@ -14136,7 +13863,7 @@ snapshots: isexe@2.0.0: {} - isomorphic-git@1.27.2: + isomorphic-git@1.30.1: dependencies: async-lock: 1.4.1 clean-git-ref: 2.0.1 @@ -14174,11 +13901,11 @@ snapshots: javascript-stringify@2.1.0: {} - jiti@1.21.6: {} + jiti@1.21.7: {} jiti@2.0.0-beta.3: {} - jose@5.9.6: {} + jose@5.10.0: {} js-cookie@3.0.5: {} @@ -14192,15 +13919,15 @@ snapshots: jsdom@26.0.0: dependencies: - cssstyle: 4.2.1 + cssstyle: 4.3.0 data-urls: 5.0.0 decimal.js: 10.5.0 - form-data: 4.0.1 + form-data: 4.0.2 html-encoding-sniffer: 4.0.0 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.18 + nwsapi: 2.2.20 parse5: 7.2.1 rrweb-cssom: 0.8.0 saxes: 6.0.0 @@ -14210,8 +13937,8 @@ snapshots: webidl-conversions: 7.0.0 whatwg-encoding: 3.1.1 whatwg-mimetype: 4.0.0 - whatwg-url: 14.1.1 - ws: 8.18.0 + whatwg-url: 14.2.0 + ws: 8.18.1 xml-name-validator: 5.0.0 transitivePeerDependencies: - bufferutil @@ -14241,10 +13968,10 @@ snapshots: jsonc-eslint-parser@2.4.0: dependencies: - acorn: 8.14.0 + acorn: 8.14.1 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - semver: 7.6.3 + semver: 7.7.1 jsondiffpatch@0.6.0: dependencies: @@ -14264,12 +13991,12 @@ snapshots: jspdf@2.5.2: dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.27.0 atob: 2.1.2 btoa: 1.2.1 fflate: 0.8.2 optionalDependencies: - canvg: 3.0.10 + canvg: 3.0.11 core-js: 3.41.0 dompurify: 2.5.8 html2canvas: 1.4.1 @@ -14304,16 +14031,17 @@ snapshots: dependencies: immediate: 3.0.6 - lilconfig@3.1.2: {} + lilconfig@3.1.3: {} load-tsconfig@0.2.5: {} loader-utils@3.3.1: {} - local-pkg@0.5.1: + local-pkg@1.1.1: dependencies: - mlly: 1.7.3 - pkg-types: 1.2.1 + mlly: 1.7.4 + pkg-types: 2.1.0 + quansync: 0.2.10 locate-path@6.0.0: dependencies: @@ -14352,7 +14080,7 @@ snapshots: dependencies: js-tokens: 4.0.0 - loupe@3.1.2: {} + loupe@3.1.3: {} lowercase-keys@2.0.0: {} @@ -14368,13 +14096,17 @@ snapshots: lru-cache@7.18.3: {} + lucide-react@0.485.0(react@18.3.1): + dependencies: + react: 18.3.1 + lz-string@1.5.0: {} magic-string@0.25.9: dependencies: sourcemap-codec: 1.4.8 - magic-string@0.30.14: + magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -14409,6 +14141,8 @@ snapshots: escape-string-regexp: 4.0.0 optional: true + math-intrinsics@1.1.0: {} + md5.js@1.3.5: dependencies: hash-base: 3.0.5 @@ -14421,7 +14155,7 @@ snapshots: '@types/unist': 2.0.11 unist-util-visit: 4.1.2 - mdast-util-find-and-replace@3.0.1: + mdast-util-find-and-replace@3.0.2: dependencies: '@types/mdast': 4.0.4 escape-string-regexp: 5.0.0 @@ -14432,7 +14166,7 @@ snapshots: dependencies: '@types/mdast': 3.0.15 '@types/unist': 2.0.11 - decode-named-character-reference: 1.0.2 + decode-named-character-reference: 1.1.0 mdast-util-to-string: 3.2.0 micromark: 3.2.0 micromark-util-decode-numeric-character-reference: 1.1.0 @@ -14449,15 +14183,15 @@ snapshots: dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 - decode-named-character-reference: 1.0.2 + decode-named-character-reference: 1.1.0 devlop: 1.1.0 mdast-util-to-string: 4.0.0 - micromark: 4.0.1 + micromark: 4.0.2 micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-decode-string: 2.0.1 micromark-util-normalize-identifier: 2.0.1 micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.2 unist-util-stringify-position: 4.0.0 transitivePeerDependencies: - supports-color @@ -14473,10 +14207,10 @@ snapshots: '@types/mdast': 4.0.4 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-find-and-replace: 3.0.1 + mdast-util-find-and-replace: 3.0.2 micromark-util-character: 2.1.1 - mdast-util-gfm-footnote@2.0.0: + mdast-util-gfm-footnote@2.1.0: dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 @@ -14513,11 +14247,11 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-gfm@3.0.0: + mdast-util-gfm@3.1.0: dependencies: mdast-util-from-markdown: 2.0.2 mdast-util-gfm-autolink-literal: 2.0.1 - mdast-util-gfm-footnote: 2.0.0 + mdast-util-gfm-footnote: 2.1.0 mdast-util-gfm-strikethrough: 2.0.0 mdast-util-gfm-table: 2.0.0 mdast-util-gfm-task-list-item: 2.0.0 @@ -14555,7 +14289,7 @@ snapshots: ccount: 2.0.1 mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 - parse-entities: 4.0.1 + parse-entities: 4.0.2 stringify-entities: 4.0.4 unist-util-remove-position: 4.0.2 unist-util-stringify-position: 3.0.3 @@ -14563,7 +14297,7 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-mdx-jsx@3.1.3: + mdast-util-mdx-jsx@3.2.0: dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 @@ -14573,7 +14307,7 @@ snapshots: devlop: 1.1.0 mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.2 - parse-entities: 4.0.1 + parse-entities: 4.0.2 stringify-entities: 4.0.4 unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 @@ -14636,7 +14370,7 @@ snapshots: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.2.0 + '@ungap/structured-clone': 1.3.0 devlop: 1.1.0 micromark-util-sanitize-uri: 2.0.1 trim-lines: 3.0.1 @@ -14679,7 +14413,7 @@ snapshots: media-query-parser@2.0.2: dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.27.0 media-typer@0.3.0: {} @@ -14695,7 +14429,7 @@ snapshots: micromark-core-commonmark@1.1.0: dependencies: - decode-named-character-reference: 1.0.2 + decode-named-character-reference: 1.1.0 micromark-factory-destination: 1.1.0 micromark-factory-label: 1.1.0 micromark-factory-space: 1.1.0 @@ -14712,9 +14446,9 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 - micromark-core-commonmark@2.0.2: + micromark-core-commonmark@2.0.3: dependencies: - decode-named-character-reference: 1.0.2 + decode-named-character-reference: 1.1.0 devlop: 1.1.0 micromark-factory-destination: 2.0.1 micromark-factory-label: 2.0.1 @@ -14727,9 +14461,9 @@ snapshots: micromark-util-html-tag-name: 2.0.1 micromark-util-normalize-identifier: 2.0.1 micromark-util-resolve-all: 2.0.1 - micromark-util-subtokenize: 2.0.3 + micromark-util-subtokenize: 2.1.0 micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.2 micromark-extension-frontmatter@1.1.1: dependencies: @@ -14743,18 +14477,18 @@ snapshots: micromark-util-character: 2.1.1 micromark-util-sanitize-uri: 2.0.1 micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.2 micromark-extension-gfm-footnote@2.1.0: dependencies: devlop: 1.1.0 - micromark-core-commonmark: 2.0.2 + micromark-core-commonmark: 2.0.3 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 micromark-util-normalize-identifier: 2.0.1 micromark-util-sanitize-uri: 2.0.1 micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.2 micromark-extension-gfm-strikethrough@2.1.0: dependencies: @@ -14763,19 +14497,19 @@ snapshots: micromark-util-classify-character: 2.0.1 micromark-util-resolve-all: 2.0.1 micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.2 - micromark-extension-gfm-table@2.1.0: + micromark-extension-gfm-table@2.1.1: dependencies: devlop: 1.1.0 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.2 micromark-extension-gfm-tagfilter@2.0.0: dependencies: - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.2 micromark-extension-gfm-task-list-item@2.1.0: dependencies: @@ -14783,22 +14517,22 @@ snapshots: micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.2 micromark-extension-gfm@3.0.0: dependencies: micromark-extension-gfm-autolink-literal: 2.1.0 micromark-extension-gfm-footnote: 2.1.0 micromark-extension-gfm-strikethrough: 2.1.0 - micromark-extension-gfm-table: 2.1.0 + micromark-extension-gfm-table: 2.1.1 micromark-extension-gfm-tagfilter: 2.0.0 micromark-extension-gfm-task-list-item: 2.1.0 micromark-util-combine-extensions: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.2 micromark-extension-mdx-expression@1.0.8: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 micromark-factory-mdx-expression: 1.0.9 micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 @@ -14810,7 +14544,7 @@ snapshots: micromark-extension-mdx-jsx@1.0.5: dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 estree-util-is-identifier-name: 2.1.0 micromark-factory-mdx-expression: 1.0.9 micromark-factory-space: 1.1.0 @@ -14826,7 +14560,7 @@ snapshots: micromark-extension-mdxjs-esm@1.0.5: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 micromark-core-commonmark: 1.1.0 micromark-util-character: 1.2.0 micromark-util-events-to-acorn: 1.2.3 @@ -14838,8 +14572,8 @@ snapshots: micromark-extension-mdxjs@1.0.1: dependencies: - acorn: 8.14.0 - acorn-jsx: 5.3.2(acorn@8.14.0) + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) micromark-extension-mdx-expression: 1.0.8 micromark-extension-mdx-jsx: 1.0.5 micromark-extension-mdx-md: 1.0.1 @@ -14857,7 +14591,7 @@ snapshots: dependencies: micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.2 micromark-factory-label@1.1.0: dependencies: @@ -14871,11 +14605,11 @@ snapshots: devlop: 1.1.0 micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.2 micromark-factory-mdx-expression@1.0.9: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 micromark-util-character: 1.2.0 micromark-util-events-to-acorn: 1.2.3 micromark-util-symbol: 1.1.0 @@ -14892,7 +14626,7 @@ snapshots: micromark-factory-space@2.0.1: dependencies: micromark-util-character: 2.1.1 - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.2 micromark-factory-title@1.1.0: dependencies: @@ -14906,7 +14640,7 @@ snapshots: micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.2 micromark-factory-whitespace@1.1.0: dependencies: @@ -14920,7 +14654,7 @@ snapshots: micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.2 micromark-util-character@1.2.0: dependencies: @@ -14930,7 +14664,7 @@ snapshots: micromark-util-character@2.1.1: dependencies: micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.2 micromark-util-chunked@1.1.0: dependencies: @@ -14950,7 +14684,7 @@ snapshots: dependencies: micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.2 micromark-util-combine-extensions@1.1.0: dependencies: @@ -14960,7 +14694,7 @@ snapshots: micromark-util-combine-extensions@2.0.1: dependencies: micromark-util-chunked: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.2 micromark-util-decode-numeric-character-reference@1.1.0: dependencies: @@ -14972,14 +14706,14 @@ snapshots: micromark-util-decode-string@1.1.0: dependencies: - decode-named-character-reference: 1.0.2 + decode-named-character-reference: 1.1.0 micromark-util-character: 1.2.0 micromark-util-decode-numeric-character-reference: 1.1.0 micromark-util-symbol: 1.1.0 micromark-util-decode-string@2.0.1: dependencies: - decode-named-character-reference: 1.0.2 + decode-named-character-reference: 1.1.0 micromark-util-character: 2.1.1 micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-symbol: 2.0.1 @@ -14991,7 +14725,7 @@ snapshots: micromark-util-events-to-acorn@1.2.3: dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 '@types/unist': 2.0.11 estree-util-visit: 1.2.1 micromark-util-symbol: 1.1.0 @@ -15017,7 +14751,7 @@ snapshots: micromark-util-resolve-all@2.0.1: dependencies: - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.2 micromark-util-sanitize-uri@1.2.0: dependencies: @@ -15038,12 +14772,12 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 - micromark-util-subtokenize@2.0.3: + micromark-util-subtokenize@2.1.0: dependencies: devlop: 1.1.0 micromark-util-chunked: 2.0.1 micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.2 micromark-util-symbol@1.1.0: {} @@ -15051,13 +14785,13 @@ snapshots: micromark-util-types@1.1.0: {} - micromark-util-types@2.0.1: {} + micromark-util-types@2.0.2: {} micromark@3.2.0: dependencies: '@types/debug': 4.1.12 debug: 4.4.0 - decode-named-character-reference: 1.0.2 + decode-named-character-reference: 1.1.0 micromark-core-commonmark: 1.1.0 micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 @@ -15075,13 +14809,13 @@ snapshots: transitivePeerDependencies: - supports-color - micromark@4.0.1: + micromark@4.0.2: dependencies: '@types/debug': 4.1.12 debug: 4.4.0 - decode-named-character-reference: 1.0.2 + decode-named-character-reference: 1.1.0 devlop: 1.1.0 - micromark-core-commonmark: 2.0.2 + micromark-core-commonmark: 2.0.3 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 micromark-util-chunked: 2.0.1 @@ -15091,9 +14825,9 @@ snapshots: micromark-util-normalize-identifier: 2.0.1 micromark-util-resolve-all: 2.0.1 micromark-util-sanitize-uri: 2.0.1 - micromark-util-subtokenize: 2.0.3 + micromark-util-subtokenize: 2.1.0 micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.2 transitivePeerDependencies: - supports-color @@ -15109,6 +14843,8 @@ snapshots: mime-db@1.52.0: {} + mime-db@1.54.0: {} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 @@ -15221,11 +14957,11 @@ snapshots: mkdirp@1.0.4: {} - mlly@1.7.3: + mlly@1.7.4: dependencies: - acorn: 8.14.0 - pathe: 1.1.2 - pkg-types: 1.2.1 + acorn: 8.14.1 + pathe: 2.0.3 + pkg-types: 1.3.1 ufo: 1.5.4 modern-ahocorasick@1.1.0: {} @@ -15240,11 +14976,17 @@ snapshots: transitivePeerDependencies: - supports-color + motion-dom@11.18.1: + dependencies: + motion-utils: 11.18.1 + + motion-utils@11.18.1: {} + mri@1.2.0: {} mrmime@1.0.1: {} - mrmime@2.0.0: {} + mrmime@2.0.1: {} ms@2.0.0: {} @@ -15252,9 +14994,9 @@ snapshots: mustache@4.2.0: {} - nanoid@3.3.6: {} + nanoid@3.3.11: {} - nanoid@3.3.8: {} + nanoid@3.3.6: {} nanostores@0.10.3: {} @@ -15266,18 +15008,18 @@ snapshots: node-abi@3.74.0: dependencies: - semver: 7.6.3 + semver: 7.7.1 node-addon-api@1.7.2: optional: true - node-api-version@0.2.0: + node-api-version@0.2.1: dependencies: - semver: 7.6.3 + semver: 7.7.1 node-domexception@1.0.0: {} - node-fetch-native@1.6.4: {} + node-fetch-native@1.6.6: {} node-fetch@3.3.2: dependencies: @@ -15288,23 +15030,23 @@ snapshots: node-gyp@9.4.1: dependencies: env-paths: 2.2.1 - exponential-backoff: 3.1.1 + exponential-backoff: 3.1.2 glob: 7.2.3 graceful-fs: 4.2.11 make-fetch-happen: 10.2.1 nopt: 6.0.0 npmlog: 6.0.2 rimraf: 3.0.2 - semver: 7.6.3 + semver: 7.7.1 tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: - bluebird - supports-color - node-releases@2.0.18: {} + node-releases@2.0.19: {} - node-stdlib-browser@1.3.0: + node-stdlib-browser@1.3.1: dependencies: assert: 2.1.0 browser-resolve: 2.0.0 @@ -15341,8 +15083,8 @@ snapshots: normalize-package-data@5.0.0: dependencies: hosted-git-info: 6.1.3 - is-core-module: 2.15.1 - semver: 7.6.3 + is-core-module: 2.16.1 + semver: 7.7.1 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} @@ -15351,7 +15093,7 @@ snapshots: npm-install-checks@6.3.0: dependencies: - semver: 7.6.3 + semver: 7.7.1 npm-normalize-package-bin@3.0.1: {} @@ -15359,7 +15101,7 @@ snapshots: dependencies: hosted-git-info: 6.1.3 proc-log: 3.0.0 - semver: 7.6.3 + semver: 7.7.1 validate-npm-package-name: 5.0.1 npm-pick-manifest@8.0.2: @@ -15367,7 +15109,7 @@ snapshots: npm-install-checks: 6.3.0 npm-normalize-package-bin: 3.0.1 npm-package-arg: 10.1.0 - semver: 7.6.3 + semver: 7.7.1 npm-run-path@4.0.1: dependencies: @@ -15380,41 +15122,43 @@ snapshots: gauge: 4.0.4 set-blocking: 2.0.0 - nwsapi@2.2.18: {} + nwsapi@2.2.20: {} object-assign@4.1.1: {} - object-inspect@1.13.3: {} + object-inspect@1.13.4: {} object-is@1.1.6: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 object-keys@1.1.1: {} - object.assign@4.1.5: + object.assign@4.1.7: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 define-properties: 1.2.1 + es-object-atoms: 1.1.1 has-symbols: 1.1.0 object-keys: 1.1.1 ofetch@1.4.1: dependencies: destr: 2.0.3 - node-fetch-native: 1.6.4 + node-fetch-native: 1.6.6 ufo: 1.5.4 ohash@2.0.11: {} - ollama-ai-provider@0.15.2(zod@3.24.1): + ollama-ai-provider@0.15.2(zod@3.24.2): dependencies: '@ai-sdk/provider': 0.0.24 - '@ai-sdk/provider-utils': 1.0.20(zod@3.24.1) + '@ai-sdk/provider-utils': 1.0.20(zod@3.24.2) partial-json: 0.1.7 optionalDependencies: - zod: 3.24.1 + zod: 3.24.2 on-finished@2.3.0: dependencies: @@ -15434,11 +15178,11 @@ snapshots: dependencies: mimic-fn: 2.1.0 - oniguruma-to-es@0.7.0: + oniguruma-to-es@2.3.0: dependencies: emoji-regex-xs: 1.0.0 - regex: 5.0.2 - regex-recursion: 4.3.0 + regex: 5.1.1 + regex-recursion: 5.1.1 optionator@0.9.4: dependencies: @@ -15481,7 +15225,9 @@ snapshots: package-json-from-dist@1.0.1: {} - package-manager-detector@0.2.6: {} + package-manager-detector@0.2.11: + dependencies: + quansync: 0.2.10 pako@0.2.9: {} @@ -15500,13 +15246,12 @@ snapshots: pbkdf2: 3.1.2 safe-buffer: 5.2.1 - parse-entities@4.0.1: + parse-entities@4.0.2: dependencies: '@types/unist': 2.0.11 - character-entities: 2.0.2 character-entities-legacy: 3.0.0 character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.0.2 + decode-named-character-reference: 1.1.0 is-alphanumerical: 2.0.1 is-decimal: 2.0.1 is-hexadecimal: 2.0.1 @@ -15536,7 +15281,7 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - path-to-regexp@0.1.10: {} + path-to-regexp@0.1.12: {} path-to-regexp@6.3.0: {} @@ -15571,7 +15316,7 @@ snapshots: periscopic@3.1.0: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 estree-walker: 3.0.3 is-reference: 3.0.3 @@ -15589,11 +15334,17 @@ snapshots: dependencies: find-up: 5.0.0 - pkg-types@1.2.1: + pkg-types@1.3.1: dependencies: confbox: 0.1.8 - mlly: 1.7.3 - pathe: 1.1.2 + mlly: 1.7.4 + pathe: 2.0.3 + + pkg-types@2.1.0: + dependencies: + confbox: 0.2.1 + exsolve: 1.0.4 + pathe: 2.0.3 plist@3.1.0: dependencies: @@ -15601,64 +15352,64 @@ snapshots: base64-js: 1.5.1 xmlbuilder: 15.1.1 - pnpm@9.14.4: {} + pnpm@9.15.9: {} - possible-typed-array-names@1.0.0: {} + possible-typed-array-names@1.1.0: {} - postcss-discard-duplicates@5.1.0(postcss@8.4.49): + postcss-discard-duplicates@5.1.0(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 - postcss-load-config@4.0.2(postcss@8.4.49): + postcss-load-config@4.0.2(postcss@8.5.3): dependencies: - lilconfig: 3.1.2 - yaml: 2.6.1 + lilconfig: 3.1.3 + yaml: 2.7.0 optionalDependencies: - postcss: 8.4.49 + postcss: 8.5.3 - postcss-modules-extract-imports@3.1.0(postcss@8.4.49): + postcss-modules-extract-imports@3.1.0(postcss@8.5.3): dependencies: - postcss: 8.4.49 + postcss: 8.5.3 - postcss-modules-local-by-default@4.1.0(postcss@8.4.49): + postcss-modules-local-by-default@4.2.0(postcss@8.5.3): dependencies: - icss-utils: 5.1.0(postcss@8.4.49) - postcss: 8.4.49 - postcss-selector-parser: 7.0.0 + icss-utils: 5.1.0(postcss@8.5.3) + postcss: 8.5.3 + postcss-selector-parser: 7.1.0 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.1(postcss@8.4.49): + postcss-modules-scope@3.2.1(postcss@8.5.3): dependencies: - postcss: 8.4.49 - postcss-selector-parser: 7.0.0 + postcss: 8.5.3 + postcss-selector-parser: 7.1.0 - postcss-modules-values@4.0.0(postcss@8.4.49): + postcss-modules-values@4.0.0(postcss@8.5.3): dependencies: - icss-utils: 5.1.0(postcss@8.4.49) - postcss: 8.4.49 + icss-utils: 5.1.0(postcss@8.5.3) + postcss: 8.5.3 - postcss-modules@6.0.1(postcss@8.4.49): + postcss-modules@6.0.1(postcss@8.5.3): dependencies: generic-names: 4.0.0 - icss-utils: 5.1.0(postcss@8.4.49) + icss-utils: 5.1.0(postcss@8.5.3) lodash.camelcase: 4.3.0 - postcss: 8.4.49 - postcss-modules-extract-imports: 3.1.0(postcss@8.4.49) - postcss-modules-local-by-default: 4.1.0(postcss@8.4.49) - postcss-modules-scope: 3.2.1(postcss@8.4.49) - postcss-modules-values: 4.0.0(postcss@8.4.49) + postcss: 8.5.3 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.3) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.3) + postcss-modules-scope: 3.2.1(postcss@8.5.3) + postcss-modules-values: 4.0.0(postcss@8.5.3) string-hash: 1.1.3 - postcss-selector-parser@7.0.0: + postcss-selector-parser@7.1.0: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 postcss-value-parser@4.2.0: {} - postcss@8.4.49: + postcss@8.5.3: dependencies: - nanoid: 3.3.8 + nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -15670,7 +15421,7 @@ snapshots: prettier@2.8.8: {} - prettier@3.4.1: {} + prettier@3.5.3: {} pretty-format@27.5.1: dependencies: @@ -15707,6 +15458,8 @@ snapshots: property-information@6.5.0: {} + property-information@7.0.0: {} + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -15743,11 +15496,13 @@ snapshots: qs@6.13.0: dependencies: - side-channel: 1.0.6 + side-channel: 1.1.0 - qs@6.13.1: + qs@6.14.0: dependencies: - side-channel: 1.0.6 + side-channel: 1.1.0 + + quansync@0.2.10: {} querystring-es3@0.2.1: {} @@ -15782,7 +15537,7 @@ snapshots: react-beautiful-dnd@13.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.27.0 css-box-model: 1.2.1 memoize-one: 5.2.1 raf-schd: 4.0.3 @@ -15803,7 +15558,7 @@ snapshots: dependencies: dnd-core: 16.0.1 - react-dnd@16.0.1(@types/hoist-non-react-statics@3.3.6)(@types/node@22.10.1)(@types/react@18.3.12)(react@18.3.1): + react-dnd@16.0.1(@types/hoist-non-react-statics@3.3.6)(@types/node@22.13.14)(@types/react@18.3.20)(react@18.3.1): dependencies: '@react-dnd/invariant': 4.0.2 '@react-dnd/shallowequal': 4.0.2 @@ -15813,8 +15568,8 @@ snapshots: react: 18.3.1 optionalDependencies: '@types/hoist-non-react-statics': 3.3.6 - '@types/node': 22.10.1 - '@types/react': 18.3.12 + '@types/node': 22.13.14 + '@types/react': 18.3.20 react-dom@18.3.1(react@18.3.1): dependencies: @@ -15835,12 +15590,13 @@ snapshots: react-is@17.0.2: {} - react-markdown@9.0.1(@types/react@18.3.12)(react@18.3.1): + react-markdown@9.1.0(@types/react@18.3.20)(react@18.3.1): dependencies: '@types/hast': 3.0.4 - '@types/react': 18.3.12 + '@types/mdast': 4.0.4 + '@types/react': 18.3.20 devlop: 1.1.0 - hast-util-to-jsx-runtime: 2.3.2 + hast-util-to-jsx-runtime: 2.3.6 html-url-attributes: 3.0.1 mdast-util-to-hast: 13.2.0 react: 18.3.1 @@ -15854,7 +15610,7 @@ snapshots: react-redux@7.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.27.0 '@types/react-redux': 7.1.34 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 @@ -15866,43 +15622,24 @@ snapshots: react-refresh@0.14.2: {} - react-remove-scroll-bar@2.3.6(@types/react@18.3.12)(react@18.3.1): + react-remove-scroll-bar@2.3.8(@types/react@18.3.20)(react@18.3.1): dependencies: react: 18.3.1 - react-style-singleton: 2.2.1(@types/react@18.3.12)(react@18.3.1) + react-style-singleton: 2.2.3(@types/react@18.3.20)(react@18.3.1) tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.12 + '@types/react': 18.3.20 - react-remove-scroll-bar@2.3.8(@types/react@18.3.12)(react@18.3.1): + react-remove-scroll@2.6.3(@types/react@18.3.20)(react@18.3.1): dependencies: react: 18.3.1 - react-style-singleton: 2.2.3(@types/react@18.3.12)(react@18.3.1) + react-remove-scroll-bar: 2.3.8(@types/react@18.3.20)(react@18.3.1) + react-style-singleton: 2.2.3(@types/react@18.3.20)(react@18.3.1) tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@18.3.20)(react@18.3.1) + use-sidecar: 1.1.3(@types/react@18.3.20)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.12 - - react-remove-scroll@2.6.0(@types/react@18.3.12)(react@18.3.1): - dependencies: - react: 18.3.1 - react-remove-scroll-bar: 2.3.6(@types/react@18.3.12)(react@18.3.1) - react-style-singleton: 2.2.1(@types/react@18.3.12)(react@18.3.1) - tslib: 2.8.1 - use-callback-ref: 1.3.2(@types/react@18.3.12)(react@18.3.1) - use-sidecar: 1.1.2(@types/react@18.3.12)(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.12 - - react-remove-scroll@2.6.3(@types/react@18.3.12)(react@18.3.1): - dependencies: - react: 18.3.1 - react-remove-scroll-bar: 2.3.8(@types/react@18.3.12)(react@18.3.1) - react-style-singleton: 2.2.3(@types/react@18.3.12)(react@18.3.1) - tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@18.3.12)(react@18.3.1) - use-sidecar: 1.1.3(@types/react@18.3.12)(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.12 + '@types/react': 18.3.20 react-resizable-panels@2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: @@ -15921,22 +15658,13 @@ snapshots: '@remix-run/router': 1.23.0 react: 18.3.1 - react-style-singleton@2.2.1(@types/react@18.3.12)(react@18.3.1): - dependencies: - get-nonce: 1.0.1 - invariant: 2.2.4 - react: 18.3.1 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 18.3.12 - - react-style-singleton@2.2.3(@types/react@18.3.12)(react@18.3.1): + react-style-singleton@2.2.3(@types/react@18.3.20)(react@18.3.1): dependencies: get-nonce: 1.0.1 react: 18.3.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.12 + '@types/react': 18.3.20 react-toastify@10.0.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: @@ -15944,13 +15672,20 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + react-window@1.8.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.27.0 + memoize-one: 5.2.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react@18.3.1: dependencies: loose-envify: 1.4.0 read-binary-file-arch@1.0.6: dependencies: - debug: 4.3.7 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -15985,20 +15720,21 @@ snapshots: redux@4.2.1: dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.27.0 regenerator-runtime@0.13.11: optional: true regenerator-runtime@0.14.1: {} - regex-recursion@4.3.0: + regex-recursion@5.1.1: dependencies: + regex: 5.1.1 regex-utilities: 2.3.0 regex-utilities@2.3.0: {} - regex@5.0.2: + regex@5.1.1: dependencies: regex-utilities: 2.3.0 @@ -16020,10 +15756,10 @@ snapshots: micromark-extension-frontmatter: 1.1.1 unified: 10.1.2 - remark-gfm@4.0.0: + remark-gfm@4.0.1: dependencies: '@types/mdast': 4.0.4 - mdast-util-gfm: 3.0.0 + mdast-util-gfm: 3.1.0 micromark-extension-gfm: 3.0.0 remark-parse: 11.0.0 remark-stringify: 11.0.0 @@ -16057,7 +15793,7 @@ snapshots: dependencies: '@types/mdast': 4.0.4 mdast-util-from-markdown: 2.0.2 - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.2 unified: 11.0.5 transitivePeerDependencies: - supports-color @@ -16083,23 +15819,23 @@ snapshots: mdast-util-to-markdown: 2.1.2 unified: 11.0.5 - remix-island@0.2.0(@remix-run/react@2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2))(@remix-run/server-runtime@2.16.0(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + remix-island@0.2.0(@remix-run/react@2.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.2))(@remix-run/server-runtime@2.16.3(typescript@5.8.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@remix-run/react': 2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2) - '@remix-run/server-runtime': 2.16.0(typescript@5.7.2) + '@remix-run/react': 2.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.2) + '@remix-run/server-runtime': 2.16.3(typescript@5.8.2) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - remix-utils@7.7.0(@remix-run/cloudflare@2.16.0(@cloudflare/workers-types@4.20241127.0)(typescript@5.7.2))(@remix-run/node@2.15.3(typescript@5.7.2))(@remix-run/react@2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2))(@remix-run/router@1.23.0)(react@18.3.1)(zod@3.24.1): + remix-utils@7.7.0(@remix-run/cloudflare@2.16.3(@cloudflare/workers-types@4.20250327.0)(typescript@5.8.2))(@remix-run/node@2.16.3(typescript@5.8.2))(@remix-run/react@2.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.2))(@remix-run/router@1.23.0)(react@18.3.1)(zod@3.24.2): dependencies: - type-fest: 4.30.0 + type-fest: 4.38.0 optionalDependencies: - '@remix-run/cloudflare': 2.16.0(@cloudflare/workers-types@4.20241127.0)(typescript@5.7.2) - '@remix-run/node': 2.15.3(typescript@5.7.2) - '@remix-run/react': 2.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2) + '@remix-run/cloudflare': 2.16.3(@cloudflare/workers-types@4.20250327.0)(typescript@5.8.2) + '@remix-run/node': 2.16.3(typescript@5.8.2) + '@remix-run/react': 2.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.2) '@remix-run/router': 1.23.0 react: 18.3.1 - zod: 3.24.1 + zod: 3.24.2 require-directory@2.1.1: {} @@ -16119,9 +15855,9 @@ snapshots: resolve.exports@2.0.3: {} - resolve@1.22.8: + resolve@1.22.10: dependencies: - is-core-module: 2.15.1 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -16136,7 +15872,7 @@ snapshots: retry@0.12.0: {} - reusify@1.0.4: {} + reusify@1.1.0: {} rgbcolor@1.0.1: optional: true @@ -16178,28 +15914,30 @@ snapshots: dependencies: estree-walker: 0.6.1 - rollup@4.28.0: + rollup@4.38.0: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.28.0 - '@rollup/rollup-android-arm64': 4.28.0 - '@rollup/rollup-darwin-arm64': 4.28.0 - '@rollup/rollup-darwin-x64': 4.28.0 - '@rollup/rollup-freebsd-arm64': 4.28.0 - '@rollup/rollup-freebsd-x64': 4.28.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.28.0 - '@rollup/rollup-linux-arm-musleabihf': 4.28.0 - '@rollup/rollup-linux-arm64-gnu': 4.28.0 - '@rollup/rollup-linux-arm64-musl': 4.28.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.28.0 - '@rollup/rollup-linux-riscv64-gnu': 4.28.0 - '@rollup/rollup-linux-s390x-gnu': 4.28.0 - '@rollup/rollup-linux-x64-gnu': 4.28.0 - '@rollup/rollup-linux-x64-musl': 4.28.0 - '@rollup/rollup-win32-arm64-msvc': 4.28.0 - '@rollup/rollup-win32-ia32-msvc': 4.28.0 - '@rollup/rollup-win32-x64-msvc': 4.28.0 + '@rollup/rollup-android-arm-eabi': 4.38.0 + '@rollup/rollup-android-arm64': 4.38.0 + '@rollup/rollup-darwin-arm64': 4.38.0 + '@rollup/rollup-darwin-x64': 4.38.0 + '@rollup/rollup-freebsd-arm64': 4.38.0 + '@rollup/rollup-freebsd-x64': 4.38.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.38.0 + '@rollup/rollup-linux-arm-musleabihf': 4.38.0 + '@rollup/rollup-linux-arm64-gnu': 4.38.0 + '@rollup/rollup-linux-arm64-musl': 4.38.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.38.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.38.0 + '@rollup/rollup-linux-riscv64-gnu': 4.38.0 + '@rollup/rollup-linux-riscv64-musl': 4.38.0 + '@rollup/rollup-linux-s390x-gnu': 4.38.0 + '@rollup/rollup-linux-x64-gnu': 4.38.0 + '@rollup/rollup-linux-x64-musl': 4.38.0 + '@rollup/rollup-win32-arm64-msvc': 4.38.0 + '@rollup/rollup-win32-ia32-msvc': 4.38.0 + '@rollup/rollup-win32-x64-msvc': 4.38.0 fsevents: 2.3.3 rrweb-cssom@0.8.0: {} @@ -16208,7 +15946,7 @@ snapshots: dependencies: queue-microtask: 1.2.3 - rxjs@7.8.1: + rxjs@7.8.2: dependencies: tslib: 2.8.1 @@ -16220,103 +15958,109 @@ snapshots: safe-buffer@5.2.1: {} + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + safer-buffer@2.1.2: {} sanitize-filename@1.6.3: dependencies: truncate-utf8-bytes: 1.0.2 - sass-embedded-android-arm64@1.81.0: + sass-embedded-android-arm64@1.86.0: optional: true - sass-embedded-android-arm@1.81.0: + sass-embedded-android-arm@1.86.0: optional: true - sass-embedded-android-ia32@1.81.0: + sass-embedded-android-ia32@1.86.0: optional: true - sass-embedded-android-riscv64@1.81.0: + sass-embedded-android-riscv64@1.86.0: optional: true - sass-embedded-android-x64@1.81.0: + sass-embedded-android-x64@1.86.0: optional: true - sass-embedded-darwin-arm64@1.81.0: + sass-embedded-darwin-arm64@1.86.0: optional: true - sass-embedded-darwin-x64@1.81.0: + sass-embedded-darwin-x64@1.86.0: optional: true - sass-embedded-linux-arm64@1.81.0: + sass-embedded-linux-arm64@1.86.0: optional: true - sass-embedded-linux-arm@1.81.0: + sass-embedded-linux-arm@1.86.0: optional: true - sass-embedded-linux-ia32@1.81.0: + sass-embedded-linux-ia32@1.86.0: optional: true - sass-embedded-linux-musl-arm64@1.81.0: + sass-embedded-linux-musl-arm64@1.86.0: optional: true - sass-embedded-linux-musl-arm@1.81.0: + sass-embedded-linux-musl-arm@1.86.0: optional: true - sass-embedded-linux-musl-ia32@1.81.0: + sass-embedded-linux-musl-ia32@1.86.0: optional: true - sass-embedded-linux-musl-riscv64@1.81.0: + sass-embedded-linux-musl-riscv64@1.86.0: optional: true - sass-embedded-linux-musl-x64@1.81.0: + sass-embedded-linux-musl-x64@1.86.0: optional: true - sass-embedded-linux-riscv64@1.81.0: + sass-embedded-linux-riscv64@1.86.0: optional: true - sass-embedded-linux-x64@1.81.0: + sass-embedded-linux-x64@1.86.0: optional: true - sass-embedded-win32-arm64@1.81.0: + sass-embedded-win32-arm64@1.86.0: optional: true - sass-embedded-win32-ia32@1.81.0: + sass-embedded-win32-ia32@1.86.0: optional: true - sass-embedded-win32-x64@1.81.0: + sass-embedded-win32-x64@1.86.0: optional: true - sass-embedded@1.81.0: + sass-embedded@1.86.0: dependencies: - '@bufbuild/protobuf': 2.2.2 + '@bufbuild/protobuf': 2.2.5 buffer-builder: 0.2.0 colorjs.io: 0.5.2 - immutable: 5.0.3 - rxjs: 7.8.1 + immutable: 5.1.1 + rxjs: 7.8.2 supports-color: 8.1.1 sync-child-process: 1.0.2 varint: 6.0.0 optionalDependencies: - sass-embedded-android-arm: 1.81.0 - sass-embedded-android-arm64: 1.81.0 - sass-embedded-android-ia32: 1.81.0 - sass-embedded-android-riscv64: 1.81.0 - sass-embedded-android-x64: 1.81.0 - sass-embedded-darwin-arm64: 1.81.0 - sass-embedded-darwin-x64: 1.81.0 - sass-embedded-linux-arm: 1.81.0 - sass-embedded-linux-arm64: 1.81.0 - sass-embedded-linux-ia32: 1.81.0 - sass-embedded-linux-musl-arm: 1.81.0 - sass-embedded-linux-musl-arm64: 1.81.0 - sass-embedded-linux-musl-ia32: 1.81.0 - sass-embedded-linux-musl-riscv64: 1.81.0 - sass-embedded-linux-musl-x64: 1.81.0 - sass-embedded-linux-riscv64: 1.81.0 - sass-embedded-linux-x64: 1.81.0 - sass-embedded-win32-arm64: 1.81.0 - sass-embedded-win32-ia32: 1.81.0 - sass-embedded-win32-x64: 1.81.0 + sass-embedded-android-arm: 1.86.0 + sass-embedded-android-arm64: 1.86.0 + sass-embedded-android-ia32: 1.86.0 + sass-embedded-android-riscv64: 1.86.0 + sass-embedded-android-x64: 1.86.0 + sass-embedded-darwin-arm64: 1.86.0 + sass-embedded-darwin-x64: 1.86.0 + sass-embedded-linux-arm: 1.86.0 + sass-embedded-linux-arm64: 1.86.0 + sass-embedded-linux-ia32: 1.86.0 + sass-embedded-linux-musl-arm: 1.86.0 + sass-embedded-linux-musl-arm64: 1.86.0 + sass-embedded-linux-musl-ia32: 1.86.0 + sass-embedded-linux-musl-riscv64: 1.86.0 + sass-embedded-linux-musl-x64: 1.86.0 + sass-embedded-linux-riscv64: 1.86.0 + sass-embedded-linux-x64: 1.86.0 + sass-embedded-win32-arm64: 1.86.0 + sass-embedded-win32-ia32: 1.86.0 + sass-embedded-win32-x64: 1.86.0 sax@1.4.1: {} @@ -16335,7 +16079,7 @@ snapshots: semver@6.3.1: {} - semver@7.6.3: {} + semver@7.7.1: {} send@0.19.0: dependencies: @@ -16378,8 +16122,8 @@ snapshots: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.1.0 + get-intrinsic: 1.3.0 + gopd: 1.2.0 has-property-descriptors: 1.0.2 setimmediate@1.0.5: {} @@ -16395,7 +16139,7 @@ snapshots: dependencies: color: 4.2.3 detect-libc: 2.0.3 - semver: 7.6.3 + semver: 7.7.1 optionalDependencies: '@img/sharp-darwin-arm64': 0.33.5 '@img/sharp-darwin-x64': 0.33.5 @@ -16426,21 +16170,44 @@ snapshots: shell-quote@1.8.2: {} - shiki@1.24.0: + shiki@1.29.2: dependencies: - '@shikijs/core': 1.24.0 - '@shikijs/engine-javascript': 1.24.0 - '@shikijs/engine-oniguruma': 1.24.0 - '@shikijs/types': 1.24.0 - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/core': 1.29.2 + '@shikijs/engine-javascript': 1.29.2 + '@shikijs/engine-oniguruma': 1.29.2 + '@shikijs/langs': 1.29.2 + '@shikijs/themes': 1.29.2 + '@shikijs/types': 1.29.2 + '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - side-channel@1.0.6: + side-channel-list@1.0.0: dependencies: - call-bind: 1.0.7 es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.3 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 siginfo@2.0.0: {} @@ -16463,12 +16230,12 @@ snapshots: simple-update-notifier@2.0.0: dependencies: - semver: 7.6.3 + semver: 7.7.1 sirv@2.0.4: dependencies: '@polka/url': 1.0.0-next.28 - mrmime: 2.0.0 + mrmime: 2.0.1 totalist: 3.0.1 slice-ansi@3.0.0: @@ -16484,11 +16251,11 @@ snapshots: dependencies: agent-base: 6.0.2 debug: 4.4.0 - socks: 2.8.3 + socks: 2.8.4 transitivePeerDependencies: - supports-color - socks@2.8.3: + socks@2.8.4: dependencies: ip-address: 9.0.5 smart-buffer: 4.2.0 @@ -16513,16 +16280,16 @@ snapshots: spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.20 + spdx-license-ids: 3.0.21 spdx-exceptions@2.5.0: {} spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.20 + spdx-license-ids: 3.0.21 - spdx-license-ids@3.0.20: {} + spdx-license-ids@3.0.21: {} sprintf-js@1.1.3: {} @@ -16548,7 +16315,7 @@ snapshots: statuses@2.0.1: {} - std-env@3.8.0: {} + std-env@3.8.1: {} stoppable@1.1.0: {} @@ -16613,12 +16380,16 @@ snapshots: strip-json-comments@3.1.1: {} - strnum@1.0.5: {} + strnum@1.1.2: {} stubborn-fs@1.2.5: {} style-mod@4.1.2: {} + style-to-js@1.1.16: + dependencies: + style-to-object: 1.0.8 + style-to-object@0.4.4: dependencies: inline-style-parser: 0.1.1 @@ -16629,7 +16400,7 @@ snapshots: sumchecker@3.0.1: dependencies: - debug: 4.3.7 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -16646,11 +16417,11 @@ snapshots: svg-pathdata@6.0.3: optional: true - swr@2.2.5(react@18.3.1): + swr@2.3.3(react@18.3.1): dependencies: - client-only: 0.0.1 + dequal: 2.0.3 react: 18.3.1 - use-sync-external-store: 1.2.2(react@18.3.1) + use-sync-external-store: 1.5.0(react@18.3.1) symbol-tree@3.2.4: {} @@ -16660,20 +16431,16 @@ snapshots: sync-message-port@1.1.3: {} - synckit@0.6.2: + synckit@0.10.3: dependencies: - tslib: 2.8.1 - - synckit@0.9.2: - dependencies: - '@pkgr/core': 0.1.1 + '@pkgr/core': 0.2.0 tslib: 2.8.1 tabbable@6.2.0: {} tailwind-merge@2.6.0: {} - tar-fs@2.1.1: + tar-fs@2.1.2: dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 @@ -16728,7 +16495,7 @@ snapshots: tinybench@2.9.0: {} - tinyexec@0.3.1: {} + tinyexec@0.3.2: {} tinypool@1.0.2: {} @@ -16736,11 +16503,11 @@ snapshots: tinyspy@3.0.2: {} - tldts-core@6.1.83: {} + tldts-core@6.1.85: {} - tldts@6.1.83: + tldts@6.1.85: dependencies: - tldts-core: 6.1.83 + tldts-core: 6.1.85 tmp-promise@3.0.3: dependencies: @@ -16760,9 +16527,9 @@ snapshots: tough-cookie@5.1.2: dependencies: - tldts: 6.1.83 + tldts: 6.1.85 - tr46@5.0.0: + tr46@5.1.0: dependencies: punycode: 2.3.1 @@ -16776,13 +16543,13 @@ snapshots: dependencies: utf8-byte-length: 1.0.5 - ts-api-utils@1.4.3(typescript@5.7.2): + ts-api-utils@2.1.0(typescript@5.8.2): dependencies: - typescript: 5.7.2 + typescript: 5.8.2 - tsconfck@3.1.4(typescript@5.7.2): + tsconfck@3.1.5(typescript@5.8.2): optionalDependencies: - typescript: 5.7.2 + typescript: 5.8.2 tsconfig-paths@4.2.0: dependencies: @@ -16792,10 +16559,10 @@ snapshots: tslib@2.8.1: {} - tsx@4.19.2: + tsx@4.19.3: dependencies: - esbuild: 0.23.1 - get-tsconfig: 4.8.1 + esbuild: 0.25.1 + get-tsconfig: 4.10.0 optionalDependencies: fsevents: 2.3.3 @@ -16810,25 +16577,24 @@ snapshots: type-fest@0.13.1: optional: true - type-fest@4.30.0: {} + type-fest@4.38.0: {} type-is@1.6.18: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 - typescript-eslint@8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2): + typescript-eslint@8.28.0(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2))(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) - '@typescript-eslint/parser': 8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) - '@typescript-eslint/utils': 8.17.0(eslint@9.16.0(jiti@1.21.6))(typescript@5.7.2) - eslint: 9.16.0(jiti@1.21.6) - optionalDependencies: - typescript: 5.7.2 + '@typescript-eslint/eslint-plugin': 8.28.0(@typescript-eslint/parser@8.28.0(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2))(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2) + '@typescript-eslint/parser': 8.28.0(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2) + '@typescript-eslint/utils': 8.28.0(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2) + eslint: 9.23.0(jiti@1.21.7) + typescript: 5.8.2 transitivePeerDependencies: - supports-color - typescript@5.7.2: {} + typescript@5.8.2: {} ufo@1.5.4: {} @@ -16850,7 +16616,7 @@ snapshots: dependencies: '@fastify/busboy': 2.1.1 - undici@6.21.0: {} + undici@6.21.2: {} unenv@2.0.0-rc.15: dependencies: @@ -16959,13 +16725,13 @@ snapshots: universalify@2.0.1: {} - unocss@0.61.9(postcss@8.4.49)(rollup@4.28.0)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)): + unocss@0.61.9(postcss@8.5.3)(rollup@4.38.0)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)): dependencies: - '@unocss/astro': 0.61.9(rollup@4.28.0)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)) - '@unocss/cli': 0.61.9(rollup@4.28.0) + '@unocss/astro': 0.61.9(rollup@4.38.0)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)) + '@unocss/cli': 0.61.9(rollup@4.38.0) '@unocss/core': 0.61.9 '@unocss/extractor-arbitrary-variants': 0.61.9 - '@unocss/postcss': 0.61.9(postcss@8.4.49) + '@unocss/postcss': 0.61.9(postcss@8.5.3) '@unocss/preset-attributify': 0.61.9 '@unocss/preset-icons': 0.61.9 '@unocss/preset-mini': 0.61.9 @@ -16980,9 +16746,9 @@ snapshots: '@unocss/transformer-compile-class': 0.61.9 '@unocss/transformer-directives': 0.61.9 '@unocss/transformer-variant-group': 0.61.9 - '@unocss/vite': 0.61.9(rollup@4.28.0)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)) + '@unocss/vite': 0.61.9(rollup@4.38.0)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)) optionalDependencies: - vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) + vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) transitivePeerDependencies: - postcss - rollup @@ -16990,9 +16756,9 @@ snapshots: unpipe@1.0.0: {} - update-browserslist-db@1.1.1(browserslist@4.24.2): + update-browserslist-db@1.1.3(browserslist@4.24.4): dependencies: - browserslist: 4.24.2 + browserslist: 4.24.4 escalade: 3.2.0 picocolors: 1.1.1 @@ -17003,43 +16769,28 @@ snapshots: url@0.11.4: dependencies: punycode: 1.4.1 - qs: 6.13.1 + qs: 6.14.0 - use-callback-ref@1.3.2(@types/react@18.3.12)(react@18.3.1): + use-callback-ref@1.3.3(@types/react@18.3.20)(react@18.3.1): dependencies: react: 18.3.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.12 - - use-callback-ref@1.3.3(@types/react@18.3.12)(react@18.3.1): - dependencies: - react: 18.3.1 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 18.3.12 + '@types/react': 18.3.20 use-memo-one@1.1.3(react@18.3.1): dependencies: react: 18.3.1 - use-sidecar@1.1.2(@types/react@18.3.12)(react@18.3.1): + use-sidecar@1.1.3(@types/react@18.3.20)(react@18.3.1): dependencies: detect-node-es: 1.1.0 react: 18.3.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.12 + '@types/react': 18.3.20 - use-sidecar@1.1.3(@types/react@18.3.12)(react@18.3.1): - dependencies: - detect-node-es: 1.1.0 - react: 18.3.1 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 18.3.12 - - use-sync-external-store@1.2.2(react@18.3.1): + use-sync-external-store@1.5.0(react@18.3.1): dependencies: react: 18.3.1 @@ -17050,10 +16801,10 @@ snapshots: util@0.12.5: dependencies: inherits: 2.0.4 - is-arguments: 1.1.1 - is-generator-function: 1.0.10 - is-typed-array: 1.1.13 - which-typed-array: 1.1.16 + is-arguments: 1.2.0 + is-generator-function: 1.1.0 + is-typed-array: 1.1.15 + which-typed-array: 1.1.19 utils-merge@1.0.1: {} @@ -17071,9 +16822,9 @@ snapshots: kleur: 4.1.5 sade: 1.8.1 - valibot@0.41.0(typescript@5.7.2): + valibot@0.41.0(typescript@5.8.2): optionalDependencies: - typescript: 5.7.2 + typescript: 5.8.2 validate-npm-package-license@3.0.4: dependencies: @@ -17122,49 +16873,49 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@1.6.0(@types/node@22.10.1)(sass-embedded@1.81.0): - dependencies: - cac: 6.7.14 - debug: 4.3.7 - pathe: 1.1.2 - picocolors: 1.1.1 - vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - vite-node@2.1.8(@types/node@22.10.1)(sass-embedded@1.81.0): - dependencies: - cac: 6.7.14 - debug: 4.3.7 - es-module-lexer: 1.5.4 - pathe: 1.1.2 - vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - vite-node@3.0.0-beta.2(@types/node@22.10.1)(sass-embedded@1.81.0): + vite-node@1.6.1(@types/node@22.13.14)(sass-embedded@1.86.0): dependencies: cac: 6.7.14 debug: 4.4.0 - es-module-lexer: 1.5.4 pathe: 1.1.2 - vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) + picocolors: 1.1.1 + vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + vite-node@2.1.9(@types/node@22.13.14)(sass-embedded@1.86.0): + dependencies: + cac: 6.7.14 + debug: 4.4.0 + es-module-lexer: 1.6.0 + pathe: 1.1.2 + vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + vite-node@3.0.0-beta.2(@types/node@22.13.14)(sass-embedded@1.86.0): + dependencies: + cac: 6.7.14 + debug: 4.4.0 + es-module-lexer: 1.6.0 + pathe: 1.1.2 + vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) transitivePeerDependencies: - '@types/node' - less @@ -17178,65 +16929,65 @@ snapshots: vite-plugin-copy@0.1.6: dependencies: - fast-glob: 3.3.2 + fast-glob: 3.3.3 - vite-plugin-node-polyfills@0.22.0(rollup@4.28.0)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)): + vite-plugin-node-polyfills@0.22.0(rollup@4.38.0)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)): dependencies: - '@rollup/plugin-inject': 5.0.5(rollup@4.28.0) - node-stdlib-browser: 1.3.0 - vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) + '@rollup/plugin-inject': 5.0.5(rollup@4.38.0) + node-stdlib-browser: 1.3.1 + vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) transitivePeerDependencies: - rollup - vite-plugin-optimize-css-modules@1.1.0(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)): + vite-plugin-optimize-css-modules@1.2.0(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)): dependencies: - vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) + vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) - vite-tsconfig-paths@4.3.2(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)): + vite-tsconfig-paths@4.3.2(typescript@5.8.2)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)): dependencies: - debug: 4.3.7 + debug: 4.4.0 globrex: 0.1.2 - tsconfck: 3.1.4(typescript@5.7.2) + tsconfck: 3.1.5(typescript@5.8.2) optionalDependencies: - vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) + vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) transitivePeerDependencies: - supports-color - typescript - vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0): + vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0): dependencies: esbuild: 0.21.5 - postcss: 8.4.49 - rollup: 4.28.0 + postcss: 8.5.3 + rollup: 4.38.0 optionalDependencies: - '@types/node': 22.10.1 + '@types/node': 22.13.14 fsevents: 2.3.3 - sass-embedded: 1.81.0 + sass-embedded: 1.86.0 - vitest@2.1.8(@types/node@22.10.1)(jsdom@26.0.0)(sass-embedded@1.81.0): + vitest@2.1.9(@types/node@22.13.14)(jsdom@26.0.0)(sass-embedded@1.86.0): dependencies: - '@vitest/expect': 2.1.8 - '@vitest/mocker': 2.1.8(vite@5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0)) - '@vitest/pretty-format': 2.1.8 - '@vitest/runner': 2.1.8 - '@vitest/snapshot': 2.1.8 - '@vitest/spy': 2.1.8 - '@vitest/utils': 2.1.8 - chai: 5.1.2 - debug: 4.3.7 - expect-type: 1.1.0 - magic-string: 0.30.14 + '@vitest/expect': 2.1.9 + '@vitest/mocker': 2.1.9(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)) + '@vitest/pretty-format': 2.1.9 + '@vitest/runner': 2.1.9 + '@vitest/snapshot': 2.1.9 + '@vitest/spy': 2.1.9 + '@vitest/utils': 2.1.9 + chai: 5.2.0 + debug: 4.4.0 + expect-type: 1.2.0 + magic-string: 0.30.17 pathe: 1.1.2 - std-env: 3.8.0 + std-env: 3.8.1 tinybench: 2.9.0 - tinyexec: 0.3.1 + tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 1.2.0 - vite: 5.4.11(@types/node@22.10.1)(sass-embedded@1.81.0) - vite-node: 2.1.8(@types/node@22.10.1)(sass-embedded@1.81.0) + vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) + vite-node: 2.1.9(@types/node@22.13.14)(sass-embedded@1.86.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.10.1 + '@types/node': 22.13.14 jsdom: 26.0.0 transitivePeerDependencies: - less @@ -17279,19 +17030,21 @@ snapshots: whatwg-mimetype@4.0.0: {} - whatwg-url@14.1.1: + whatwg-url@14.2.0: dependencies: - tr46: 5.0.0 + tr46: 5.1.0 webidl-conversions: 7.0.0 when-exit@2.1.4: {} - which-typed-array@1.1.16: + which-typed-array@1.1.19: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.1.0 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 has-tostringtag: 1.0.2 which@2.0.2: @@ -17321,7 +17074,7 @@ snapshots: '@cloudflare/workerd-linux-arm64': 1.20250321.0 '@cloudflare/workerd-windows-64': 1.20250321.0 - wrangler@4.5.1(@cloudflare/workers-types@4.20241127.0): + wrangler@4.6.0(@cloudflare/workers-types@4.20250327.0): dependencies: '@cloudflare/kv-asset-handler': 0.4.0 '@cloudflare/unenv-preset': 2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250321.0) @@ -17332,7 +17085,7 @@ snapshots: unenv: 2.0.0-rc.15 workerd: 1.20250321.0 optionalDependencies: - '@cloudflare/workers-types': 4.20241127.0 + '@cloudflare/workers-types': 4.20250327.0 fsevents: 2.3.3 sharp: 0.33.5 transitivePeerDependencies: @@ -17357,6 +17110,8 @@ snapshots: ws@8.18.0: {} + ws@8.18.1: {} + xml-name-validator@5.0.0: {} xmlbuilder@15.1.1: {} @@ -17371,7 +17126,7 @@ snapshots: yallist@4.0.0: {} - yaml@2.6.1: {} + yaml@2.7.0: {} yargs-parser@21.1.1: {} @@ -17404,18 +17159,18 @@ snapshots: compress-commons: 4.1.2 readable-stream: 3.6.2 - zod-to-json-schema@3.24.1(zod@3.24.1): + zod-to-json-schema@3.24.5(zod@3.24.2): dependencies: - zod: 3.24.1 + zod: 3.24.2 zod@3.22.3: {} - zod@3.24.1: {} + zod@3.24.2: {} - zustand@5.0.3(@types/react@18.3.12)(react@18.3.1)(use-sync-external-store@1.2.2(react@18.3.1)): + zustand@5.0.3(@types/react@18.3.20)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)): optionalDependencies: - '@types/react': 18.3.12 + '@types/react': 18.3.20 react: 18.3.1 - use-sync-external-store: 1.2.2(react@18.3.1) + use-sync-external-store: 1.5.0(react@18.3.1) zwitch@2.0.4: {} From 1c561a06152e1f3785a47417d38f699563c8b925 Mon Sep 17 00:00:00 2001 From: Stijnus <72551117+Stijnus@users.noreply.github.com> Date: Sat, 29 Mar 2025 20:57:41 +0100 Subject: [PATCH 043/115] feat: bolt dyi preview final (#1569) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * V1 ## [Unreleased] - 2025-03-28 ### βœ… Fixed - Fixed deployment errors on Cloudflare Pages caused by: - Missing or outdated `compatibility_date` and `compatibility_flags` in `wrangler.toml` - Use of Node.js built-ins (`crypto`, `stream`) in functions without proper polyfilling - Invalid Wrangler CLI options (`--log-level`) used during deployment - Type error when importing the Remix server build ### πŸ›  Changed - `wrangler.toml` updated: ```toml name = "bolt" compatibility_date = "2025-03-28" compatibility_flags = ["nodejs_compat"] pages_build_output_dir = "./build/client" send_metrics = false ``` - `functions/[[path]].ts` updated: ```ts import type { ServerBuild } from '@remix-run/cloudflare'; import { createPagesFunctionHandler } from '@remix-run/cloudflare-pages'; import * as serverBuild from '../build/server'; export const onRequest = createPagesFunctionHandler({ build: serverBuild as unknown as ServerBuild, }); ``` ### πŸš€ Deployment - Successful deployment to: - Preview: https://979e2ca9.bolt-55b.pages.dev - Production: https://main.bolt-55b.pages.dev * V1 ## [Unreleased] - 2025-03-28 ### βœ… Fixed - Fixed deployment errors on Cloudflare Pages caused by: - Missing or outdated `compatibility_date` and `compatibility_flags` in `wrangler.toml` - Use of Node.js built-ins (`crypto`, `stream`) in functions without proper polyfilling - Invalid Wrangler CLI options (`--log-level`) used during deployment - Type error when importing the Remix server build ### πŸ›  Changed - `wrangler.toml` updated: ```toml name = "bolt" compatibility_date = "2025-03-28" compatibility_flags = ["nodejs_compat"] pages_build_output_dir = "./build/client" send_metrics = false ``` - `functions/[[path]].ts` updated: ```ts import type { ServerBuild } from '@remix-run/cloudflare'; import { createPagesFunctionHandler } from '@remix-run/cloudflare-pages'; import * as serverBuild from '../build/server'; export const onRequest = createPagesFunctionHandler({ build: serverBuild as unknown as ServerBuild, }); ``` ### πŸš€ Deployment - Successful deployment to: - Preview: https://979e2ca9.bolt-55b.pages.dev - Production: https://main.bolt-55b.pages.dev * feat: small bugfix * Update Preview.tsx --- app/components/workbench/Preview.tsx | 739 +++++++++++++++++++++++---- 1 file changed, 631 insertions(+), 108 deletions(-) diff --git a/app/components/workbench/Preview.tsx b/app/components/workbench/Preview.tsx index 93a0b85c..aba8a24c 100644 --- a/app/components/workbench/Preview.tsx +++ b/app/components/workbench/Preview.tsx @@ -12,13 +12,37 @@ interface WindowSize { width: number; height: number; icon: string; + hasFrame?: boolean; + frameType?: 'mobile' | 'tablet' | 'laptop' | 'desktop'; } const WINDOW_SIZES: WindowSize[] = [ - { name: 'Mobile', width: 375, height: 667, icon: 'i-ph:device-mobile' }, - { name: 'Tablet', width: 768, height: 1024, icon: 'i-ph:device-tablet' }, - { name: 'Laptop', width: 1366, height: 768, icon: 'i-ph:laptop' }, - { name: 'Desktop', width: 1920, height: 1080, icon: 'i-ph:monitor' }, + { name: 'iPhone SE', width: 375, height: 667, icon: 'i-ph:device-mobile', hasFrame: true, frameType: 'mobile' }, + { name: 'iPhone 12/13', width: 390, height: 844, icon: 'i-ph:device-mobile', hasFrame: true, frameType: 'mobile' }, + { + name: 'iPhone 12/13 Pro Max', + width: 428, + height: 926, + icon: 'i-ph:device-mobile', + hasFrame: true, + frameType: 'mobile', + }, + { name: 'iPad Mini', width: 768, height: 1024, icon: 'i-ph:device-tablet', hasFrame: true, frameType: 'tablet' }, + { name: 'iPad Air', width: 820, height: 1180, icon: 'i-ph:device-tablet', hasFrame: true, frameType: 'tablet' }, + { name: 'iPad Pro 11"', width: 834, height: 1194, icon: 'i-ph:device-tablet', hasFrame: true, frameType: 'tablet' }, + { + name: 'iPad Pro 12.9"', + width: 1024, + height: 1366, + icon: 'i-ph:device-tablet', + hasFrame: true, + frameType: 'tablet', + }, + { name: 'Small Laptop', width: 1280, height: 800, icon: 'i-ph:laptop', hasFrame: true, frameType: 'laptop' }, + { name: 'Laptop', width: 1366, height: 768, icon: 'i-ph:laptop', hasFrame: true, frameType: 'laptop' }, + { name: 'Large Laptop', width: 1440, height: 900, icon: 'i-ph:laptop', hasFrame: true, frameType: 'laptop' }, + { name: 'Desktop', width: 1920, height: 1080, icon: 'i-ph:monitor', hasFrame: true, frameType: 'desktop' }, + { name: '4K Display', width: 3840, height: 2160, icon: 'i-ph:monitor', hasFrame: true, frameType: 'desktop' }, ]; export const Preview = memo(() => { @@ -43,6 +67,7 @@ export const Preview = memo(() => { // Use percentage for width const [widthPercent, setWidthPercent] = useState(37.5); + const [currentWidth, setCurrentWidth] = useState(0); const resizingState = useRef({ isResizing: false, @@ -50,12 +75,17 @@ export const Preview = memo(() => { startX: 0, startWidthPercent: 37.5, windowWidth: window.innerWidth, + pointerId: null as number | null, }); - const SCALING_FACTOR = 2; + // Reduce scaling factor to make resizing less sensitive + const SCALING_FACTOR = 1; const [isWindowSizeDropdownOpen, setIsWindowSizeDropdownOpen] = useState(false); const [selectedWindowSize, setSelectedWindowSize] = useState(WINDOW_SIZES[0]); + const [isLandscape, setIsLandscape] = useState(false); + const [showDeviceFrame, setShowDeviceFrame] = useState(true); + const [showDeviceFrameInPreview, setShowDeviceFrameInPreview] = useState(false); useEffect(() => { if (!activePreview) { @@ -133,68 +163,209 @@ export const Preview = memo(() => { setIsDeviceModeOn((prev) => !prev); }; - const startResizing = (e: React.MouseEvent, side: ResizeSide) => { + const startResizing = (e: React.PointerEvent, side: ResizeSide) => { if (!isDeviceModeOn) { return; } + const target = e.currentTarget as HTMLElement; + target.setPointerCapture(e.pointerId); + document.body.style.userSelect = 'none'; + document.body.style.cursor = 'ew-resize'; - resizingState.current.isResizing = true; - resizingState.current.side = side; - resizingState.current.startX = e.clientX; - resizingState.current.startWidthPercent = widthPercent; - resizingState.current.windowWidth = window.innerWidth; - - document.addEventListener('mousemove', onMouseMove); - document.addEventListener('mouseup', onMouseUp); - - e.preventDefault(); + resizingState.current = { + isResizing: true, + side, + startX: e.clientX, + startWidthPercent: widthPercent, + windowWidth: window.innerWidth, + pointerId: e.pointerId, + }; }; - const onMouseMove = (e: MouseEvent) => { - if (!resizingState.current.isResizing) { - return; + const ResizeHandle = ({ side }: { side: ResizeSide }) => { + if (!side) { + return null; } - const dx = e.clientX - resizingState.current.startX; - const windowWidth = resizingState.current.windowWidth; - - const dxPercent = (dx / windowWidth) * 100 * SCALING_FACTOR; - - let newWidthPercent = resizingState.current.startWidthPercent; - - if (resizingState.current.side === 'right') { - newWidthPercent = resizingState.current.startWidthPercent + dxPercent; - } else if (resizingState.current.side === 'left') { - newWidthPercent = resizingState.current.startWidthPercent - dxPercent; - } - - newWidthPercent = Math.max(10, Math.min(newWidthPercent, 90)); - - setWidthPercent(newWidthPercent); - }; - - const onMouseUp = () => { - resizingState.current.isResizing = false; - resizingState.current.side = null; - document.removeEventListener('mousemove', onMouseMove); - document.removeEventListener('mouseup', onMouseUp); - - document.body.style.userSelect = ''; + return ( +
startResizing(e, side)} + style={{ + position: 'absolute', + top: 0, + ...(side === 'left' ? { left: 0, marginLeft: '-7px' } : { right: 0, marginRight: '-7px' }), + width: '15px', + height: '100%', + cursor: 'ew-resize', + background: 'var(--bolt-elements-background-depth-4, rgba(0,0,0,.3))', + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + transition: 'background 0.2s', + userSelect: 'none', + touchAction: 'none', + zIndex: 10, + }} + onMouseOver={(e) => + (e.currentTarget.style.background = 'var(--bolt-elements-background-depth-4, rgba(0,0,0,.3))') + } + onMouseOut={(e) => + (e.currentTarget.style.background = 'var(--bolt-elements-background-depth-3, rgba(0,0,0,.15))') + } + title="Drag to resize width" + > + +
+ ); }; + useEffect(() => { + // Skip if not in device mode + if (!isDeviceModeOn) { + return; + } + + const handlePointerMove = (e: PointerEvent) => { + const state = resizingState.current; + + if (!state.isResizing || e.pointerId !== state.pointerId) { + return; + } + + const dx = e.clientX - state.startX; + const dxPercent = (dx / state.windowWidth) * 100 * SCALING_FACTOR; + + let newWidthPercent = state.startWidthPercent; + + if (state.side === 'right') { + newWidthPercent = state.startWidthPercent + dxPercent; + } else if (state.side === 'left') { + newWidthPercent = state.startWidthPercent - dxPercent; + } + + // Limit width percentage between 10% and 90% + newWidthPercent = Math.max(10, Math.min(newWidthPercent, 90)); + + // Force a synchronous update to ensure the UI reflects the change immediately + setWidthPercent(newWidthPercent); + + // Calculate and update the actual pixel width + if (containerRef.current) { + const containerWidth = containerRef.current.clientWidth; + const newWidth = Math.round((containerWidth * newWidthPercent) / 100); + setCurrentWidth(newWidth); + + // Apply the width directly to the container for immediate feedback + const previewContainer = containerRef.current.querySelector('div[style*="width"]'); + + if (previewContainer) { + (previewContainer as HTMLElement).style.width = `${newWidthPercent}%`; + } + } + }; + + const handlePointerUp = (e: PointerEvent) => { + const state = resizingState.current; + + if (!state.isResizing || e.pointerId !== state.pointerId) { + return; + } + + // Find all resize handles + const handles = document.querySelectorAll('.resize-handle-left, .resize-handle-right'); + + // Release pointer capture from any handle that has it + handles.forEach((handle) => { + if ((handle as HTMLElement).hasPointerCapture?.(e.pointerId)) { + (handle as HTMLElement).releasePointerCapture(e.pointerId); + } + }); + + // Reset state + resizingState.current = { + ...resizingState.current, + isResizing: false, + side: null, + pointerId: null, + }; + + document.body.style.userSelect = ''; + document.body.style.cursor = ''; + }; + + // Add event listeners + document.addEventListener('pointermove', handlePointerMove, { passive: false }); + document.addEventListener('pointerup', handlePointerUp); + document.addEventListener('pointercancel', handlePointerUp); + + // Define cleanup function + function cleanupResizeListeners() { + document.removeEventListener('pointermove', handlePointerMove); + document.removeEventListener('pointerup', handlePointerUp); + document.removeEventListener('pointercancel', handlePointerUp); + + // Release any lingering pointer captures + if (resizingState.current.pointerId !== null) { + const handles = document.querySelectorAll('.resize-handle-left, .resize-handle-right'); + handles.forEach((handle) => { + if ((handle as HTMLElement).hasPointerCapture?.(resizingState.current.pointerId!)) { + (handle as HTMLElement).releasePointerCapture(resizingState.current.pointerId!); + } + }); + + // Reset state + resizingState.current = { + ...resizingState.current, + isResizing: false, + side: null, + pointerId: null, + }; + + document.body.style.userSelect = ''; + document.body.style.cursor = ''; + } + } + + // Return the cleanup function + // eslint-disable-next-line consistent-return + return cleanupResizeListeners; + }, [isDeviceModeOn, SCALING_FACTOR]); + useEffect(() => { const handleWindowResize = () => { - // Optional: Adjust widthPercent if necessary + // Update the window width in the resizing state + resizingState.current.windowWidth = window.innerWidth; + + // Update the current width in pixels + if (containerRef.current && isDeviceModeOn) { + const containerWidth = containerRef.current.clientWidth; + setCurrentWidth(Math.round((containerWidth * widthPercent) / 100)); + } }; window.addEventListener('resize', handleWindowResize); + // Initial calculation of current width + if (containerRef.current && isDeviceModeOn) { + const containerWidth = containerRef.current.clientWidth; + setCurrentWidth(Math.round((containerWidth * widthPercent) / 100)); + } + return () => { window.removeEventListener('resize', handleWindowResize); }; - }, []); + }, [isDeviceModeOn, widthPercent]); + + // Update current width when device mode is toggled + useEffect(() => { + if (containerRef.current && isDeviceModeOn) { + const containerWidth = containerRef.current.clientWidth; + setCurrentWidth(Math.round((containerWidth * widthPercent) / 100)); + } + }, [isDeviceModeOn]); const GripIcon = () => (
{ >
{ if (match) { const previewId = match[1]; const previewUrl = `/webcontainer/preview/${previewId}`; - const newWindow = window.open( - previewUrl, - '_blank', - `noopener,noreferrer,width=${size.width},height=${size.height},menubar=no,toolbar=no,location=no,status=no`, - ); - if (newWindow) { - newWindow.focus(); + // Adjust dimensions for landscape mode if applicable + let width = size.width; + let height = size.height; + + if (isLandscape && (size.frameType === 'mobile' || size.frameType === 'tablet')) { + // Swap width and height for landscape mode + width = size.height; + height = size.width; + } + + // Create a window with device frame if enabled + if (showDeviceFrame && size.hasFrame) { + // Calculate frame dimensions + const frameWidth = size.frameType === 'mobile' ? (isLandscape ? 120 : 40) : 60; // Width padding on each side + const frameHeight = size.frameType === 'mobile' ? (isLandscape ? 80 : 80) : isLandscape ? 60 : 100; // Height padding on top and bottom + + // Create a window with the correct dimensions first + const newWindow = window.open( + '', + '_blank', + `width=${width + frameWidth},height=${height + frameHeight + 40},menubar=no,toolbar=no,location=no,status=no`, + ); + + if (!newWindow) { + console.error('Failed to open new window'); + return; + } + + // Create the HTML content for the frame + const frameColor = getFrameColor(); + const frameRadius = size.frameType === 'mobile' ? '36px' : '20px'; + const framePadding = + size.frameType === 'mobile' + ? isLandscape + ? '40px 60px' + : '40px 20px' + : isLandscape + ? '30px 50px' + : '50px 30px'; + + // Position notch and home button based on orientation + const notchTop = isLandscape ? '50%' : '20px'; + const notchLeft = isLandscape ? '30px' : '50%'; + const notchTransform = isLandscape ? 'translateY(-50%)' : 'translateX(-50%)'; + const notchWidth = isLandscape ? '8px' : size.frameType === 'mobile' ? '60px' : '80px'; + const notchHeight = isLandscape ? (size.frameType === 'mobile' ? '60px' : '80px') : '8px'; + + const homeBottom = isLandscape ? '50%' : '15px'; + const homeRight = isLandscape ? '30px' : '50%'; + const homeTransform = isLandscape ? 'translateY(50%)' : 'translateX(50%)'; + const homeWidth = isLandscape ? '4px' : '40px'; + const homeHeight = isLandscape ? '40px' : '4px'; + + // Create HTML content for the wrapper page + const htmlContent = ` + + + + + ${size.name} Preview + + + +
+
${size.name} ${isLandscape ? '(Landscape)' : '(Portrait)'}
+
+ +
+
+ + + `; + + // Write the HTML content to the new window + newWindow.document.open(); + newWindow.document.write(htmlContent); + newWindow.document.close(); + } else { + // Standard window without frame + const newWindow = window.open( + previewUrl, + '_blank', + `width=${width},height=${height},menubar=no,toolbar=no,location=no,status=no`, + ); + + if (newWindow) { + newWindow.focus(); + } } } else { console.warn('[Preview] Invalid WebContainer URL:', activePreview.baseUrl); @@ -242,6 +565,67 @@ export const Preview = memo(() => { } }; + // Function to get the correct frame padding based on orientation + const getFramePadding = useCallback(() => { + if (!selectedWindowSize) { + return '40px 20px'; + } + + const isMobile = selectedWindowSize.frameType === 'mobile'; + + if (isLandscape) { + // Increase horizontal padding in landscape mode to ensure full device frame is visible + return isMobile ? '40px 60px' : '30px 50px'; + } + + return isMobile ? '40px 20px' : '50px 30px'; + }, [isLandscape, selectedWindowSize]); + + // Function to get the scale factor for the device frame + const getDeviceScale = useCallback(() => { + // Always return 1 to ensure the device frame is shown at its exact size + return 1; + }, [isLandscape, selectedWindowSize, widthPercent]); + + // Update the device scale when needed + useEffect(() => { + /* + * Intentionally disabled - we want to maintain scale of 1 + * No dynamic scaling to ensure device frame matches external window exactly + */ + return () => {}; + }, [isDeviceModeOn, showDeviceFrameInPreview, getDeviceScale, isLandscape, selectedWindowSize]); + + // Function to get the frame color based on dark mode + const getFrameColor = useCallback(() => { + // Check if the document has a dark class or data-theme="dark" + const isDarkMode = + document.documentElement.classList.contains('dark') || + document.documentElement.getAttribute('data-theme') === 'dark' || + window.matchMedia('(prefers-color-scheme: dark)').matches; + + // Return a darker color for light mode, lighter color for dark mode + return isDarkMode ? '#555' : '#111'; + }, []); + + // Effect to handle color scheme changes + useEffect(() => { + const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)'); + + const handleColorSchemeChange = () => { + // Force a re-render when color scheme changes + if (showDeviceFrameInPreview) { + setShowDeviceFrameInPreview(true); + } + }; + + darkModeMediaQuery.addEventListener('change', handleColorSchemeChange); + + return () => { + darkModeMediaQuery.removeEventListener('change', handleColorSchemeChange); + }; + }, [showDeviceFrameInPreview]); + return (
{ title={isDeviceModeOn ? 'Switch to Responsive Mode' : 'Switch to Device Mode'} /> + {isDeviceModeOn && ( + <> + setIsLandscape(!isLandscape)} + title={isLandscape ? 'Switch to Portrait' : 'Switch to Landscape'} + /> + setShowDeviceFrameInPreview(!showDeviceFrameInPreview)} + title={showDeviceFrameInPreview ? 'Hide Device Frame' : 'Show Device Frame'} + /> + + )} + setIsPreviewOnly(!isPreviewOnly)} @@ -328,7 +727,50 @@ export const Preview = memo(() => { {isWindowSizeDropdownOpen && ( <>
setIsWindowSizeDropdownOpen(false)} /> -
+
+
+
+ Device Options +
+
+
+ Show Device Frame + +
+
+ Landscape Mode + +
+
+
{WINDOW_SIZES.map((size) => ( ))}
@@ -362,24 +824,110 @@ export const Preview = memo(() => {
{activePreview ? ( <> -