diff --git a/apps/desktop/package.json b/apps/desktop/package.json index e7be91e..69f2e3b 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -31,15 +31,15 @@ "@tauri-apps/plugin-process": "^2.3.1", "@tauri-apps/plugin-shell": "^2.0.0", "@tauri-apps/plugin-updater": "^2.0.0", - "react": "^18.3.0", - "react-dom": "^18.3.0" + "react": "^19.2.8", + "react-dom": "^19.2.8" }, "devDependencies": { "@playwright/test": "^1.62.1", "@tauri-apps/cli": "^2.0.0", "@types/node": "^22.10.0", - "@types/react": "^18.3.0", - "@types/react-dom": "^18.3.0", + "@types/react": "^19.2.17", + "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^4.3.0", "typescript": "^5.7.0", "vite": "^5.4.0", diff --git a/apps/desktop/src/App.tsx b/apps/desktop/src/App.tsx index 8cea3ea..d217e7d 100644 --- a/apps/desktop/src/App.tsx +++ b/apps/desktop/src/App.tsx @@ -2,7 +2,7 @@ // Spec: docs/VISUAL_DESIGN.html // Milestone: 0.1.2 — adds project-folder flow + inspector wiring + session refresh. -import { useCallback, useEffect, useState } from 'react'; +import { useCallback, useEffect, useState, type JSX } from 'react'; import { contextWindowFor } from '@deepcode/core/dist/providers/model-metadata.js'; import { FilePanel } from './components/FilePanel.js'; import { InspectorPanel } from './components/InspectorPanel.js'; diff --git a/apps/desktop/src/components/Badge.tsx b/apps/desktop/src/components/Badge.tsx index 2c984df..693834c 100644 --- a/apps/desktop/src/components/Badge.tsx +++ b/apps/desktop/src/components/Badge.tsx @@ -1,7 +1,7 @@ // Status badge — three flavors per the design spec (#3 / #6). // .badge-ok / .badge-warn / .badge-err / .badge-info live in index.css. -import type { ReactNode } from 'react'; +import type { ReactNode, JSX } from 'react'; export type BadgeKind = 'ok' | 'warn' | 'err' | 'info'; diff --git a/apps/desktop/src/components/BrandMark.tsx b/apps/desktop/src/components/BrandMark.tsx index 87fc611..a6a9595 100644 --- a/apps/desktop/src/components/BrandMark.tsx +++ b/apps/desktop/src/components/BrandMark.tsx @@ -2,6 +2,8 @@ // Wraps the SVG path in the gradient .mark / .mark-lg container so the // shell can drop it in anywhere without per-instance styling. +import type { JSX } from 'react'; + interface BrandMarkProps { /** 'sm' = 26 px (default, sidebar / pill); 'lg' = 64 px (onboarding hero). */ size?: 'sm' | 'lg'; diff --git a/apps/desktop/src/components/Dropdown.tsx b/apps/desktop/src/components/Dropdown.tsx index 0ecc72e..625323c 100644 --- a/apps/desktop/src/components/Dropdown.tsx +++ b/apps/desktop/src/components/Dropdown.tsx @@ -6,7 +6,7 @@ // positioned absolute below the trigger. Good enough for composer // dropdowns that don't need to escape clipping. -import { useEffect, useRef, useState, type ReactNode } from 'react'; +import { useEffect, useRef, useState, type ReactNode, type JSX } from 'react'; export interface DropdownOption { value: T; diff --git a/apps/desktop/src/components/FilePanel.tsx b/apps/desktop/src/components/FilePanel.tsx index a28d067..7fb47a2 100644 --- a/apps/desktop/src/components/FilePanel.tsx +++ b/apps/desktop/src/components/FilePanel.tsx @@ -4,6 +4,7 @@ // fetching (file reads + session snapshots via Tauri). Every interaction is a // callback so the component is unit-testable + previewable without a backend. +import type { JSX } from 'react'; import type { DiffLine, DiffMode, FileTab, FileView } from '../types/file-panel.js'; interface FilePanelProps { diff --git a/apps/desktop/src/components/InspectorPanel.tsx b/apps/desktop/src/components/InspectorPanel.tsx index 90c875c..42cc23f 100644 --- a/apps/desktop/src/components/InspectorPanel.tsx +++ b/apps/desktop/src/components/InspectorPanel.tsx @@ -10,7 +10,7 @@ // component is purely presentational. Sections with no data show an honest // empty state rather than a placeholder — per HANDOFF: no fake sections. -import { useEffect, useRef } from 'react'; +import { useEffect, useRef, type JSX } from 'react'; import { contextWindowFor } from '@deepcode/core/dist/providers/model-metadata.js'; import { projectName } from '../lib/project.js'; import type { InspectorData, InspectorSection } from '../types/inspector.js'; diff --git a/apps/desktop/src/components/InspectorRail.tsx b/apps/desktop/src/components/InspectorRail.tsx index cbf50e9..3fc939a 100644 --- a/apps/desktop/src/components/InspectorRail.tsx +++ b/apps/desktop/src/components/InspectorRail.tsx @@ -7,6 +7,8 @@ // • ⚙ Settings — the Settings shell (a main-area screen, not a right panel) // The active panel's icon is highlighted; clicking it again closes the panel. +import type { JSX } from 'react'; + interface InspectorRailProps { /** Inspector panel is the visible right panel. */ inspectorActive: boolean; diff --git a/apps/desktop/src/components/Pill.tsx b/apps/desktop/src/components/Pill.tsx index b0fd89c..6e24ae6 100644 --- a/apps/desktop/src/components/Pill.tsx +++ b/apps/desktop/src/components/Pill.tsx @@ -1,7 +1,7 @@ // Pill — small rounded chip for the chat header (connected · model · approval). // Optional leading dot for status indication (e.g. live connection). -import type { ReactNode } from 'react'; +import type { ReactNode, JSX } from 'react'; interface PillProps { /** Show a leading mint dot. */ diff --git a/apps/desktop/src/components/PlusMenu.tsx b/apps/desktop/src/components/PlusMenu.tsx index f7bc96f..e243f19 100644 --- a/apps/desktop/src/components/PlusMenu.tsx +++ b/apps/desktop/src/components/PlusMenu.tsx @@ -3,7 +3,7 @@ // Sits absolute-positioned above the composer toolbar (opens upward so // it doesn't get clipped by the chat-stream above the composer). -import { useEffect, useRef, useState } from 'react'; +import { useEffect, useRef, useState, type JSX } from 'react'; export interface PlusMenuItem { icon: string; // emoji or single-char icon diff --git a/apps/desktop/src/components/ProjectPickerOverlay.tsx b/apps/desktop/src/components/ProjectPickerOverlay.tsx index 1b6b8a1..73919e3 100644 --- a/apps/desktop/src/components/ProjectPickerOverlay.tsx +++ b/apps/desktop/src/components/ProjectPickerOverlay.tsx @@ -3,7 +3,7 @@ // path is persisted to settings.json#projectPath and threaded into // every agent.start as `cwd`. -import { useState } from 'react'; +import { useState, type JSX } from 'react'; import { BrandMark } from './BrandMark.js'; import { pickFolder } from '../lib/tauri-api.js'; diff --git a/apps/desktop/src/components/Screen.tsx b/apps/desktop/src/components/Screen.tsx index f794d45..b9cd3d4 100644 --- a/apps/desktop/src/components/Screen.tsx +++ b/apps/desktop/src/components/Screen.tsx @@ -6,7 +6,7 @@ // Matches the design language: chat-main column, padded body, header // pinned at top. No 3-column shell — that's the App-level grid. -import type { ReactNode } from 'react'; +import type { ReactNode, JSX } from 'react'; interface ScreenProps { title: string; diff --git a/apps/desktop/src/components/SettingsLayout.tsx b/apps/desktop/src/components/SettingsLayout.tsx index f82bbe3..296f705 100644 --- a/apps/desktop/src/components/SettingsLayout.tsx +++ b/apps/desktop/src/components/SettingsLayout.tsx @@ -9,7 +9,7 @@ // Only screens that actually exist are listed — no dead links. (The spec's // Models / Hooks / Memory / Statusline items land with their screens later.) -import type { ReactNode } from 'react'; +import type { ReactNode, JSX } from 'react'; import type { ScreenName } from '../types/screens.js'; /** The screens that live inside the Settings shell, in nav order. */ diff --git a/apps/desktop/src/components/Sidebar.tsx b/apps/desktop/src/components/Sidebar.tsx index 6377842..0955756 100644 --- a/apps/desktop/src/components/Sidebar.tsx +++ b/apps/desktop/src/components/Sidebar.tsx @@ -4,7 +4,7 @@ // folder + a small switch-folder button. Below: sessions bucketed by // Today/Yesterday/Earlier per the spec note ①. -import { useCallback, useEffect, useState } from 'react'; +import { useCallback, useEffect, useState, type JSX } from 'react'; import { projectName } from '../lib/project.js'; import { listSessions, diff --git a/apps/desktop/src/components/ToolCard.tsx b/apps/desktop/src/components/ToolCard.tsx index 52286cc..3aa1f2f 100644 --- a/apps/desktop/src/components/ToolCard.tsx +++ b/apps/desktop/src/components/ToolCard.tsx @@ -8,7 +8,7 @@ // │ │ ← tc-body // └──────────────────────────────────────────────┘ -import type { ReactNode } from 'react'; +import type { ReactNode, JSX } from 'react'; import { Badge, type BadgeKind } from './Badge.js'; interface ToolCardProps { diff --git a/apps/desktop/src/components/UpdateBanner.tsx b/apps/desktop/src/components/UpdateBanner.tsx index b29acb5..ef0475e 100644 --- a/apps/desktop/src/components/UpdateBanner.tsx +++ b/apps/desktop/src/components/UpdateBanner.tsx @@ -2,7 +2,7 @@ // downloaded a new release. Clicking Relaunch calls tauri-plugin-process.relaunch(). // Spec: docs/VISUAL_DESIGN.html screen #11 -import { useState } from 'react'; +import { useState, type JSX } from 'react'; import { relaunchNow } from '../lib/updater.js'; import type { UpdateInfo } from '../types/global.js'; diff --git a/apps/desktop/src/preview-filepanel.tsx b/apps/desktop/src/preview-filepanel.tsx index 387cf7a..eecb090 100644 --- a/apps/desktop/src/preview-filepanel.tsx +++ b/apps/desktop/src/preview-filepanel.tsx @@ -5,7 +5,7 @@ // Mounts FilePanel with mock fixtures + a working resize drag so the panel's // appearance can be screenshotted without the Tauri backend. -import { useState } from 'react'; +import { useState, type JSX } from 'react'; import { createRoot } from 'react-dom/client'; import { FilePanel } from './components/FilePanel.js'; import { diff --git a/apps/desktop/src/screens/About.tsx b/apps/desktop/src/screens/About.tsx index da43975..719f6cd 100644 --- a/apps/desktop/src/screens/About.tsx +++ b/apps/desktop/src/screens/About.tsx @@ -1,7 +1,7 @@ // About screen — design-aligned per docs/VISUAL_DESIGN.html. // Brand mark + version + diagnostics + docs links. -import { useEffect, useState } from 'react'; +import { useEffect, useState, type JSX } from 'react'; import type { ConfigDiagnosticsResult } from '@deepcode/protocol'; import { BrandMark } from '../components/BrandMark.js'; import { Card, Row, Screen, SectionTitle } from '../components/Screen.js'; diff --git a/apps/desktop/src/screens/MCPManager.tsx b/apps/desktop/src/screens/MCPManager.tsx index 01386cd..1e9fefd 100644 --- a/apps/desktop/src/screens/MCPManager.tsx +++ b/apps/desktop/src/screens/MCPManager.tsx @@ -1,7 +1,7 @@ // MCP server manager — design-aligned per spec screen #15. // List / show status of MCP servers wired in settings.json#mcpServers. -import { useEffect, useState } from 'react'; +import { useEffect, useState, type JSX } from 'react'; import { Badge, type BadgeKind } from '../components/Badge.js'; import { Card, Screen, SectionTitle } from '../components/Screen.js'; diff --git a/apps/desktop/src/screens/Onboarding.tsx b/apps/desktop/src/screens/Onboarding.tsx index 1ea69f8..6bafb30 100644 --- a/apps/desktop/src/screens/Onboarding.tsx +++ b/apps/desktop/src/screens/Onboarding.tsx @@ -1,7 +1,7 @@ // Onboarding screen — first-run flow capturing the DeepSeek API key. // Design spec: docs/VISUAL_DESIGN.html screen #2 (hero gradient + big mark). -import { useState } from 'react'; +import { useState, type JSX } from 'react'; import { BrandMark } from '../components/BrandMark.js'; import { openUrl } from '../lib/tauri-api.js'; diff --git a/apps/desktop/src/screens/Permissions.tsx b/apps/desktop/src/screens/Permissions.tsx index 9815eaa..41215ab 100644 --- a/apps/desktop/src/screens/Permissions.tsx +++ b/apps/desktop/src/screens/Permissions.tsx @@ -2,7 +2,7 @@ // View + edit settings.permissions rules. Save now actually persists // to ~/.deepcode/settings.json via saveSettingsFile. -import { useEffect, useState } from 'react'; +import { useEffect, useState, type JSX } from 'react'; import { Badge, type BadgeKind } from '../components/Badge.js'; import { Card, Row, Screen, SectionTitle } from '../components/Screen.js'; import { loadSettingsFile, saveSettingsFile } from '../lib/tauri-api.js'; diff --git a/apps/desktop/src/screens/Plugins.tsx b/apps/desktop/src/screens/Plugins.tsx index 2c70a7c..6150e8d 100644 --- a/apps/desktop/src/screens/Plugins.tsx +++ b/apps/desktop/src/screens/Plugins.tsx @@ -3,7 +3,7 @@ // enable/disable, install new ones. Install IPC still stubbed (P3 // will wire installFromSpec). -import { useEffect, useState } from 'react'; +import { useEffect, useState, type JSX } from 'react'; import { Badge, type BadgeKind } from '../components/Badge.js'; import { Card, Screen } from '../components/Screen.js'; import { loadSettingsFile, saveSettingsFile } from '../lib/tauri-api.js'; diff --git a/apps/desktop/src/screens/Repl.tsx b/apps/desktop/src/screens/Repl.tsx index 6015d50..5b52ec9 100644 --- a/apps/desktop/src/screens/Repl.tsx +++ b/apps/desktop/src/screens/Repl.tsx @@ -17,7 +17,7 @@ // CSS class names (which now match the design tokens) and the addition // of richer tool-card rendering. -import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import { useCallback, useEffect, useMemo, useRef, useState, type JSX } from 'react'; import { DEFAULT_KEYBINDINGS, VimState, diff --git a/apps/desktop/src/screens/Sessions.tsx b/apps/desktop/src/screens/Sessions.tsx index 2379243..cc49cf2 100644 --- a/apps/desktop/src/screens/Sessions.tsx +++ b/apps/desktop/src/screens/Sessions.tsx @@ -1,7 +1,7 @@ // Sessions list — design-aligned. Browse + filter + resume past // conversations. Per spec screen #5. -import { useEffect, useState } from 'react'; +import { useEffect, useState, type JSX } from 'react'; import { Card, Screen } from '../components/Screen.js'; import { listSessions, type SessionMeta } from '../lib/tauri-api.js'; diff --git a/apps/desktop/src/screens/Settings.tsx b/apps/desktop/src/screens/Settings.tsx index eadb2a9..0bda8be 100644 --- a/apps/desktop/src/screens/Settings.tsx +++ b/apps/desktop/src/screens/Settings.tsx @@ -2,7 +2,7 @@ // Top: JSON view (Monaco-lite). Bottom: flat key/value table. Both // reflect the live settings file. Save button writes back. -import { useEffect, useMemo, useRef, useState } from 'react'; +import { useEffect, useMemo, useRef, useState, type JSX } from 'react'; import { Card, Row, Screen, SectionTitle } from '../components/Screen.js'; import { loadProjectPath } from '../lib/project.js'; import { getSettingsPath, loadSettingsFile, saveSettingsFile } from '../lib/tauri-api.js'; diff --git a/apps/desktop/src/screens/Skills.tsx b/apps/desktop/src/screens/Skills.tsx index 50f623b..6a3d6c4 100644 --- a/apps/desktop/src/screens/Skills.tsx +++ b/apps/desktop/src/screens/Skills.tsx @@ -2,7 +2,7 @@ // List available skills (built-in + user + project + plugin) + show the // SKILL.md body for inspection. Per spec screen #11. -import { useEffect, useState } from 'react'; +import { useEffect, useState, type JSX } from 'react'; import { Badge, type BadgeKind } from '../components/Badge.js'; import { Card, Screen } from '../components/Screen.js'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 85d1b30..087ab10 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -85,11 +85,11 @@ importers: specifier: ^2.0.0 version: 2.10.1 react: - specifier: ^18.3.0 - version: 18.3.1 + specifier: ^19.2.8 + version: 19.2.8 react-dom: - specifier: ^18.3.0 - version: 18.3.1(react@18.3.1) + specifier: ^19.2.8 + version: 19.2.8(react@19.2.8) devDependencies: '@playwright/test': specifier: ^1.62.1 @@ -101,11 +101,11 @@ importers: specifier: ^22.10.0 version: 22.19.19 '@types/react': - specifier: ^18.3.0 - version: 18.3.29 + specifier: ^19.2.17 + version: 19.2.18 '@types/react-dom': - specifier: ^18.3.0 - version: 18.3.7(@types/react@18.3.29) + specifier: ^19.2.3 + version: 19.2.4(@types/react@19.2.18) '@vitejs/plugin-react': specifier: ^4.3.0 version: 4.7.0(vite@5.4.21(@types/node@22.19.19)) @@ -913,16 +913,13 @@ packages: '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - '@types/prop-types@15.7.15': - resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} - - '@types/react-dom@18.3.7': - resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==} + '@types/react-dom@19.2.4': + resolution: {integrity: sha512-Bsc+QHgp+P/F02XDzNCY9jnZNCUuLki36KT7VKrTXXLdHf+vHMNZnW1rVu5DNW/rCK+fya3DATySbLM4yhtKUw==} peerDependencies: - '@types/react': ^18.0.0 + '@types/react': ^19.2.0 - '@types/react@18.3.29': - resolution: {integrity: sha512-ch0qJdr2JY0r04NXSprbK6TXOgnaJ1Tz23fm5W+z0/CBah6BSBc3n96h7K9GOtwh0HrilNWHIBzE1Ko4Dcw/Wg==} + '@types/react@19.2.18': + resolution: {integrity: sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==} '@types/sarif@2.1.7': resolution: {integrity: sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==} @@ -1880,10 +1877,6 @@ packages: lodash@4.18.1: resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - loupe@3.2.1: resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} @@ -2197,17 +2190,17 @@ packages: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true - react-dom@18.3.1: - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + react-dom@19.2.8: + resolution: {integrity: sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==} peerDependencies: - react: ^18.3.1 + react: ^19.2.8 react-refresh@0.17.0: resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} engines: {node: '>=0.10.0'} - react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + react@19.2.8: + resolution: {integrity: sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==} engines: {node: '>=0.10.0'} read-pkg@9.0.1: @@ -2256,8 +2249,8 @@ packages: resolution: {integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==} engines: {node: '>=11.0.0'} - scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} secretlint@10.2.2: resolution: {integrity: sha512-xVpkeHV/aoWe4vP4TansF622nBEImzCY73y/0042DuJ29iKIaqgoJ8fGxre3rVSHHbxar4FdJobmTnLp9AU0eg==} @@ -3328,15 +3321,12 @@ snapshots: '@types/normalize-package-data@2.4.4': {} - '@types/prop-types@15.7.15': {} - - '@types/react-dom@18.3.7(@types/react@18.3.29)': + '@types/react-dom@19.2.4(@types/react@19.2.18)': dependencies: - '@types/react': 18.3.29 + '@types/react': 19.2.18 - '@types/react@18.3.29': + '@types/react@19.2.18': dependencies: - '@types/prop-types': 15.7.15 csstype: 3.2.3 '@types/sarif@2.1.7': {} @@ -4408,10 +4398,6 @@ snapshots: lodash@4.18.1: {} - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - loupe@3.2.1: {} lru-cache@10.4.3: {} @@ -4700,17 +4686,14 @@ snapshots: strip-json-comments: 2.0.1 optional: true - react-dom@18.3.1(react@18.3.1): + react-dom@19.2.8(react@19.2.8): dependencies: - loose-envify: 1.4.0 - react: 18.3.1 - scheduler: 0.23.2 + react: 19.2.8 + scheduler: 0.27.0 react-refresh@0.17.0: {} - react@18.3.1: - dependencies: - loose-envify: 1.4.0 + react@19.2.8: {} read-pkg@9.0.1: dependencies: @@ -4788,9 +4771,7 @@ snapshots: sax@1.6.1: {} - scheduler@0.23.2: - dependencies: - loose-envify: 1.4.0 + scheduler@0.27.0: {} secretlint@10.2.2: dependencies: