mirror of
https://github.com/lone-cloud/gerbil
synced 2026-06-03 09:33:10 -07:00
better modals, new button to allow deleting configs, CPU/GPU temp metrics on hover
This commit is contained in:
parent
02ce36b8ec
commit
4cc4358eb0
26 changed files with 627 additions and 426 deletions
|
|
@ -170,6 +170,8 @@ const config = [
|
||||||
|
|
||||||
'sonarjs/cognitive-complexity': ['warn', 25],
|
'sonarjs/cognitive-complexity': ['warn', 25],
|
||||||
|
|
||||||
|
'no-empty': ['error', { allowEmptyCatch: true }],
|
||||||
|
|
||||||
'promise/prefer-await-to-then': 'error',
|
'promise/prefer-await-to-then': 'error',
|
||||||
'promise/prefer-await-to-callbacks': 'off',
|
'promise/prefer-await-to-callbacks': 'off',
|
||||||
'promise/no-nesting': 'error',
|
'promise/no-nesting': 'error',
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "gerbil",
|
"name": "gerbil",
|
||||||
"productName": "Gerbil",
|
"productName": "Gerbil",
|
||||||
"version": "1.4.0",
|
"version": "1.4.1",
|
||||||
"description": "Run Large Language Models locally",
|
"description": "Run Large Language Models locally",
|
||||||
"main": "out/main/index.js",
|
"main": "out/main/index.js",
|
||||||
"homepage": "./",
|
"homepage": "./",
|
||||||
|
|
@ -38,7 +38,7 @@
|
||||||
},
|
},
|
||||||
"license": "AGPL-3.0-or-later",
|
"license": "AGPL-3.0-or-later",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/js": "^9.35.0",
|
"@eslint/js": "^9.36.0",
|
||||||
"@types/node": "^24.5.2",
|
"@types/node": "^24.5.2",
|
||||||
"@types/react": "^19.1.13",
|
"@types/react": "^19.1.13",
|
||||||
"@types/react-dom": "^19.1.9",
|
"@types/react-dom": "^19.1.9",
|
||||||
|
|
@ -49,7 +49,7 @@
|
||||||
"electron": "^38.1.2",
|
"electron": "^38.1.2",
|
||||||
"electron-builder": "^26.0.12",
|
"electron-builder": "^26.0.12",
|
||||||
"electron-vite": "^4.0.0",
|
"electron-vite": "^4.0.0",
|
||||||
"eslint": "^9.35.0",
|
"eslint": "^9.36.0",
|
||||||
"eslint-plugin-import": "^2.32.0",
|
"eslint-plugin-import": "^2.32.0",
|
||||||
"eslint-plugin-no-comments": "^1.1.10",
|
"eslint-plugin-no-comments": "^1.1.10",
|
||||||
"eslint-plugin-promise": "^7.2.1",
|
"eslint-plugin-promise": "^7.2.1",
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { Modal, Text, Group, Button, Checkbox, Stack } from '@mantine/core';
|
import { Text, Group, Button, Checkbox, Stack } from '@mantine/core';
|
||||||
import { MODAL_STYLES_WITH_TITLEBAR } from '@/constants';
|
import { Modal } from '@/components/Modal';
|
||||||
|
|
||||||
interface EjectConfirmModalProps {
|
interface EjectConfirmModalProps {
|
||||||
opened: boolean;
|
opened: boolean;
|
||||||
|
|
@ -30,10 +30,6 @@ export const EjectConfirmModal = ({
|
||||||
opened={opened}
|
opened={opened}
|
||||||
onClose={handleClose}
|
onClose={handleClose}
|
||||||
title="Are you sure you want to eject?"
|
title="Are you sure you want to eject?"
|
||||||
centered
|
|
||||||
closeOnClickOutside={false}
|
|
||||||
closeOnEscape={false}
|
|
||||||
styles={MODAL_STYLES_WITH_TITLEBAR}
|
|
||||||
>
|
>
|
||||||
<Stack gap="md">
|
<Stack gap="md">
|
||||||
<Text size="sm" c="dimmed">
|
<Text size="sm" c="dimmed">
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
import { Badge, Tooltip } from '@mantine/core';
|
import { Button, Tooltip } from '@mantine/core';
|
||||||
import { useState } from 'react';
|
|
||||||
|
|
||||||
interface PerformanceBadgeProps {
|
interface PerformanceBadgeProps {
|
||||||
label: string;
|
label: string;
|
||||||
|
|
@ -12,8 +11,6 @@ export const PerformanceBadge = ({
|
||||||
value,
|
value,
|
||||||
tooltipLabel,
|
tooltipLabel,
|
||||||
}: PerformanceBadgeProps) => {
|
}: PerformanceBadgeProps) => {
|
||||||
const [isHovered, setIsHovered] = useState(false);
|
|
||||||
|
|
||||||
const handlePerformanceClick = async () => {
|
const handlePerformanceClick = async () => {
|
||||||
const result = await window.electronAPI.app.openPerformanceManager();
|
const result = await window.electronAPI.app.openPerformanceManager();
|
||||||
|
|
||||||
|
|
@ -26,22 +23,23 @@ export const PerformanceBadge = ({
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Tooltip label={tooltipLabel} position="top">
|
<Tooltip label={tooltipLabel} position="top">
|
||||||
<Badge
|
<Button
|
||||||
size="sm"
|
size="xs"
|
||||||
variant="light"
|
variant="light"
|
||||||
style={{
|
style={{
|
||||||
minWidth: '5rem',
|
minWidth: '5rem',
|
||||||
textAlign: 'center',
|
textAlign: 'center',
|
||||||
cursor: 'pointer',
|
height: 'auto',
|
||||||
transition: 'background-color 0.2s ease',
|
padding: '0.25rem 0.5rem',
|
||||||
backgroundColor: isHovered ? 'rgba(34, 139, 230, 0.2)' : undefined,
|
margin: '0.125rem 0',
|
||||||
|
borderRadius: '0.75rem',
|
||||||
|
fontSize: '0.7em',
|
||||||
|
fontWeight: 500,
|
||||||
}}
|
}}
|
||||||
onMouseEnter={() => setIsHovered(true)}
|
|
||||||
onMouseLeave={() => setIsHovered(false)}
|
|
||||||
onClick={handlePerformanceClick}
|
onClick={handlePerformanceClick}
|
||||||
>
|
>
|
||||||
{label}: {value}
|
{label}: {value}
|
||||||
</Badge>
|
</Button>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@ export const StatusBar = ({ maxDataPoints = 60 }: StatusBarProps) => {
|
||||||
<PerformanceBadge
|
<PerformanceBadge
|
||||||
label="CPU"
|
label="CPU"
|
||||||
value={`${cpuMetrics.usage}%`}
|
value={`${cpuMetrics.usage}%`}
|
||||||
tooltipLabel={`${cpuMetrics.usage}%`}
|
tooltipLabel={`${cpuMetrics.usage}%${cpuMetrics.temperature ? ` • ${cpuMetrics.temperature}°C` : ''}`}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<PerformanceBadge
|
<PerformanceBadge
|
||||||
|
|
@ -89,7 +89,7 @@ export const StatusBar = ({ maxDataPoints = 60 }: StatusBarProps) => {
|
||||||
<PerformanceBadge
|
<PerformanceBadge
|
||||||
label={`GPU${gpuMetrics.gpus.length > 1 ? ` ${index + 1}` : ''}`}
|
label={`GPU${gpuMetrics.gpus.length > 1 ? ` ${index + 1}` : ''}`}
|
||||||
value={`${gpu.usage}%`}
|
value={`${gpu.usage}%`}
|
||||||
tooltipLabel={`${gpu.usage}%`}
|
tooltipLabel={`${gpu.usage}%${gpu.temperature ? ` • ${gpu.temperature}°C` : ''}`}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<PerformanceBadge
|
<PerformanceBadge
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
import {
|
import {
|
||||||
Modal,
|
|
||||||
Stack,
|
Stack,
|
||||||
Text,
|
Text,
|
||||||
Group,
|
Group,
|
||||||
|
|
@ -15,8 +14,9 @@ import type { DownloadItem } from '@/types/electron';
|
||||||
import type { BinaryUpdateInfo } from '@/hooks/useUpdateChecker';
|
import type { BinaryUpdateInfo } from '@/hooks/useUpdateChecker';
|
||||||
import { useKoboldVersions } from '@/hooks/useKoboldVersions';
|
import { useKoboldVersions } from '@/hooks/useKoboldVersions';
|
||||||
import { getDisplayNameFromPath } from '@/utils/version';
|
import { getDisplayNameFromPath } from '@/utils/version';
|
||||||
import { GITHUB_API, MODAL_STYLES_WITH_TITLEBAR } from '@/constants';
|
import { GITHUB_API } from '@/constants';
|
||||||
import { safeExecute } from '@/utils/logger';
|
import { safeExecute } from '@/utils/logger';
|
||||||
|
import { Modal } from '@/components/Modal';
|
||||||
|
|
||||||
interface UpdateAvailableModalProps {
|
interface UpdateAvailableModalProps {
|
||||||
opened: boolean;
|
opened: boolean;
|
||||||
|
|
@ -59,10 +59,7 @@ export const UpdateAvailableModal = ({
|
||||||
onClose={onClose}
|
onClose={onClose}
|
||||||
size="sm"
|
size="sm"
|
||||||
title="A newer version is available"
|
title="A newer version is available"
|
||||||
centered
|
|
||||||
closeOnClickOutside={false}
|
|
||||||
closeOnEscape={!isDownloading && !isUpdating}
|
closeOnEscape={!isDownloading && !isUpdating}
|
||||||
styles={MODAL_STYLES_WITH_TITLEBAR}
|
|
||||||
>
|
>
|
||||||
<Stack gap="md">
|
<Stack gap="md">
|
||||||
<Card withBorder radius="md" p="md" bd="2px solid orange">
|
<Card withBorder radius="md" p="md" bd="2px solid orange">
|
||||||
|
|
|
||||||
64
src/components/Modal.tsx
Normal file
64
src/components/Modal.tsx
Normal file
|
|
@ -0,0 +1,64 @@
|
||||||
|
import { Modal as MantineModal, Button, Box } from '@mantine/core';
|
||||||
|
import { ReactNode } from 'react';
|
||||||
|
|
||||||
|
const TITLEBAR_HEIGHT = '2.5rem';
|
||||||
|
|
||||||
|
const MODAL_STYLES_WITH_TITLEBAR = {
|
||||||
|
overlay: {
|
||||||
|
top: TITLEBAR_HEIGHT,
|
||||||
|
},
|
||||||
|
content: {
|
||||||
|
marginTop: TITLEBAR_HEIGHT,
|
||||||
|
},
|
||||||
|
} as const;
|
||||||
|
|
||||||
|
export interface ModalProps {
|
||||||
|
opened: boolean;
|
||||||
|
onClose: () => void;
|
||||||
|
title: ReactNode;
|
||||||
|
children: ReactNode;
|
||||||
|
size?: string | number;
|
||||||
|
closeOnClickOutside?: boolean;
|
||||||
|
closeOnEscape?: boolean;
|
||||||
|
showCloseButton?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const Modal = ({
|
||||||
|
opened,
|
||||||
|
onClose,
|
||||||
|
title,
|
||||||
|
children,
|
||||||
|
size,
|
||||||
|
closeOnClickOutside = false,
|
||||||
|
closeOnEscape = true,
|
||||||
|
showCloseButton = false,
|
||||||
|
...props
|
||||||
|
}: ModalProps) => (
|
||||||
|
<MantineModal
|
||||||
|
opened={opened}
|
||||||
|
onClose={onClose}
|
||||||
|
title={title}
|
||||||
|
size={size}
|
||||||
|
centered
|
||||||
|
closeOnClickOutside={closeOnClickOutside}
|
||||||
|
closeOnEscape={closeOnEscape}
|
||||||
|
styles={MODAL_STYLES_WITH_TITLEBAR}
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
{showCloseButton && (
|
||||||
|
<Box
|
||||||
|
style={{
|
||||||
|
padding: '0.5rem 1.5rem 1.5rem',
|
||||||
|
display: 'flex',
|
||||||
|
justifyContent: 'flex-end',
|
||||||
|
flexShrink: 0,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Button onClick={onClose} variant="filled">
|
||||||
|
Close
|
||||||
|
</Button>
|
||||||
|
</Box>
|
||||||
|
)}
|
||||||
|
</MantineModal>
|
||||||
|
);
|
||||||
|
|
@ -1,6 +1,4 @@
|
||||||
import { MODAL_STYLES_WITH_TITLEBAR } from '@/constants';
|
|
||||||
import {
|
import {
|
||||||
Modal,
|
|
||||||
Text,
|
Text,
|
||||||
Stack,
|
Stack,
|
||||||
Group,
|
Group,
|
||||||
|
|
@ -9,9 +7,9 @@ import {
|
||||||
Code,
|
Code,
|
||||||
TextInput,
|
TextInput,
|
||||||
Button,
|
Button,
|
||||||
Box,
|
|
||||||
} from '@mantine/core';
|
} from '@mantine/core';
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
|
import { Modal } from '@/components/Modal';
|
||||||
|
|
||||||
interface CommandLineArgumentsModalProps {
|
interface CommandLineArgumentsModalProps {
|
||||||
opened: boolean;
|
opened: boolean;
|
||||||
|
|
@ -555,8 +553,7 @@ export const CommandLineArgumentsModal = ({
|
||||||
onClose={onClose}
|
onClose={onClose}
|
||||||
title="Available Command Line Arguments"
|
title="Available Command Line Arguments"
|
||||||
size="xl"
|
size="xl"
|
||||||
centered
|
showCloseButton
|
||||||
styles={MODAL_STYLES_WITH_TITLEBAR}
|
|
||||||
>
|
>
|
||||||
<Stack gap="md">
|
<Stack gap="md">
|
||||||
<Text size="sm" c="dimmed">
|
<Text size="sm" c="dimmed">
|
||||||
|
|
@ -659,20 +656,6 @@ export const CommandLineArgumentsModal = ({
|
||||||
</Accordion.Item>
|
</Accordion.Item>
|
||||||
))}
|
))}
|
||||||
</Accordion>
|
</Accordion>
|
||||||
|
|
||||||
<Box
|
|
||||||
style={{
|
|
||||||
backgroundColor: 'var(--mantine-color-body)',
|
|
||||||
padding: '0.5rem 1.5rem 0',
|
|
||||||
display: 'flex',
|
|
||||||
justifyContent: 'flex-end',
|
|
||||||
flexShrink: 0,
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<Button onClick={onClose} variant="filled">
|
|
||||||
Close
|
|
||||||
</Button>
|
|
||||||
</Box>
|
|
||||||
</Stack>
|
</Stack>
|
||||||
</Modal>
|
</Modal>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
import { Stack, Text, Group, Button, Select } from '@mantine/core';
|
import { Stack, Text, Group, Button, Select, Tooltip } from '@mantine/core';
|
||||||
import { useState, useCallback } from 'react';
|
import { useState, useCallback } from 'react';
|
||||||
import { Save, File, Plus, Check } from 'lucide-react';
|
import { Save, File, Plus, Check, Trash2 } from 'lucide-react';
|
||||||
import type { ConfigFile } from '@/types';
|
import type { ConfigFile } from '@/types';
|
||||||
import { CreateConfigModal } from './CreateConfigModal';
|
import { CreateConfigModal } from './CreateConfigModal';
|
||||||
|
import { DeleteConfigModal } from './DeleteConfigModal';
|
||||||
|
|
||||||
interface ConfigFileManagerProps {
|
interface ConfigFileManagerProps {
|
||||||
configFiles: ConfigFile[];
|
configFiles: ConfigFile[];
|
||||||
|
|
@ -10,6 +11,7 @@ interface ConfigFileManagerProps {
|
||||||
onFileSelection: (fileName: string) => Promise<void>;
|
onFileSelection: (fileName: string) => Promise<void>;
|
||||||
onCreateNewConfig: (configName: string) => Promise<void>;
|
onCreateNewConfig: (configName: string) => Promise<void>;
|
||||||
onSaveConfig: () => Promise<boolean>;
|
onSaveConfig: () => Promise<boolean>;
|
||||||
|
onDeleteConfig: (fileName: string) => Promise<boolean>;
|
||||||
onLoadConfigFiles: () => Promise<void>;
|
onLoadConfigFiles: () => Promise<void>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -19,9 +21,12 @@ export const ConfigFileManager = ({
|
||||||
onFileSelection,
|
onFileSelection,
|
||||||
onCreateNewConfig,
|
onCreateNewConfig,
|
||||||
onSaveConfig,
|
onSaveConfig,
|
||||||
|
onDeleteConfig,
|
||||||
}: ConfigFileManagerProps) => {
|
}: ConfigFileManagerProps) => {
|
||||||
const [configModalOpened, setConfigModalOpened] = useState(false);
|
const [configModalOpened, setConfigModalOpened] = useState(false);
|
||||||
const [saveSuccess, setSaveSuccess] = useState(false);
|
const [saveSuccess, setSaveSuccess] = useState(false);
|
||||||
|
const [deleteModalOpened, setDeleteModalOpened] = useState(false);
|
||||||
|
const [configToDelete, setConfigToDelete] = useState<string | null>(null);
|
||||||
|
|
||||||
const existingConfigNames = configFiles.map((file) => {
|
const existingConfigNames = configFiles.map((file) => {
|
||||||
const extension = file.name.split('.').pop() || '';
|
const extension = file.name.split('.').pop() || '';
|
||||||
|
|
@ -36,6 +41,28 @@ export const ConfigFileManager = ({
|
||||||
setConfigModalOpened(false);
|
setConfigModalOpened(false);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
const handleDeleteClick = () => {
|
||||||
|
if (selectedFile) {
|
||||||
|
setConfigToDelete(selectedFile);
|
||||||
|
setDeleteModalOpened(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleDeleteConfirm = async () => {
|
||||||
|
if (configToDelete) {
|
||||||
|
const success = await onDeleteConfig(configToDelete);
|
||||||
|
if (success) {
|
||||||
|
setConfigToDelete(null);
|
||||||
|
setDeleteModalOpened(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleDeleteCancel = () => {
|
||||||
|
setConfigToDelete(null);
|
||||||
|
setDeleteModalOpened(false);
|
||||||
|
};
|
||||||
|
|
||||||
const handleSaveClick = async () => {
|
const handleSaveClick = async () => {
|
||||||
if (selectedFile) {
|
if (selectedFile) {
|
||||||
const success = await onSaveConfig();
|
const success = await onSaveConfig();
|
||||||
|
|
@ -103,6 +130,19 @@ export const ConfigFileManager = ({
|
||||||
>
|
>
|
||||||
{saveSuccess ? 'Saved!' : 'Save'}
|
{saveSuccess ? 'Saved!' : 'Save'}
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
|
<Tooltip label="Delete Configuration">
|
||||||
|
<Button
|
||||||
|
variant="outline"
|
||||||
|
size="sm"
|
||||||
|
onClick={handleDeleteClick}
|
||||||
|
disabled={!selectedFile}
|
||||||
|
color="red"
|
||||||
|
style={{ width: '2.5rem', padding: '0 0.5rem' }}
|
||||||
|
>
|
||||||
|
<Trash2 size={16} />
|
||||||
|
</Button>
|
||||||
|
</Tooltip>
|
||||||
</Group>
|
</Group>
|
||||||
</Stack>
|
</Stack>
|
||||||
|
|
||||||
|
|
@ -112,6 +152,13 @@ export const ConfigFileManager = ({
|
||||||
onCreateConfig={onCreateNewConfig}
|
onCreateConfig={onCreateNewConfig}
|
||||||
existingConfigNames={existingConfigNames}
|
existingConfigNames={existingConfigNames}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<DeleteConfigModal
|
||||||
|
opened={deleteModalOpened}
|
||||||
|
onClose={handleDeleteCancel}
|
||||||
|
onConfirm={handleDeleteConfirm}
|
||||||
|
configName={configToDelete}
|
||||||
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { MODAL_STYLES_WITH_TITLEBAR } from '@/constants';
|
import { TextInput, Group, Button, Stack } from '@mantine/core';
|
||||||
import { Modal, TextInput, Group, Button, Stack } from '@mantine/core';
|
import { Modal } from '@/components/Modal';
|
||||||
import { useState, useEffect } from 'react';
|
import { useState, useEffect } from 'react';
|
||||||
|
|
||||||
interface CreateConfigModalProps {
|
interface CreateConfigModalProps {
|
||||||
|
|
@ -46,7 +46,6 @@ export const CreateConfigModal = ({
|
||||||
onClose={handleClose}
|
onClose={handleClose}
|
||||||
title="Create New Configuration"
|
title="Create New Configuration"
|
||||||
size="sm"
|
size="sm"
|
||||||
styles={MODAL_STYLES_WITH_TITLEBAR}
|
|
||||||
>
|
>
|
||||||
<Stack gap="md">
|
<Stack gap="md">
|
||||||
<TextInput
|
<TextInput
|
||||||
|
|
|
||||||
38
src/components/screens/Launch/DeleteConfigModal.tsx
Normal file
38
src/components/screens/Launch/DeleteConfigModal.tsx
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
import { Text, Group, Button, Stack } from '@mantine/core';
|
||||||
|
import { Modal } from '@/components/Modal';
|
||||||
|
|
||||||
|
interface DeleteConfigModalProps {
|
||||||
|
opened: boolean;
|
||||||
|
onClose: () => void;
|
||||||
|
onConfirm: () => Promise<void>;
|
||||||
|
configName: string | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const DeleteConfigModal = ({
|
||||||
|
opened,
|
||||||
|
onClose,
|
||||||
|
onConfirm,
|
||||||
|
configName,
|
||||||
|
}: DeleteConfigModalProps) => {
|
||||||
|
const displayName = configName?.replace(/\.[^/.]+$/, '') || '';
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Modal opened={opened} onClose={onClose} title="Delete Configuration">
|
||||||
|
<Stack gap="md">
|
||||||
|
<Text size="sm" c="dimmed">
|
||||||
|
Are you sure you want to delete “{displayName}”? This
|
||||||
|
action cannot be undone.
|
||||||
|
</Text>
|
||||||
|
|
||||||
|
<Group justify="flex-end" gap="sm">
|
||||||
|
<Button variant="subtle" onClick={onClose}>
|
||||||
|
Cancel
|
||||||
|
</Button>
|
||||||
|
<Button color="red" onClick={onConfirm}>
|
||||||
|
Delete
|
||||||
|
</Button>
|
||||||
|
</Group>
|
||||||
|
</Stack>
|
||||||
|
</Modal>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
@ -223,6 +223,32 @@ export const LaunchScreen = ({ onLaunch }: LaunchScreenProps) => {
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleDeleteConfig = async (fileName: string) => {
|
||||||
|
const deleteSuccess =
|
||||||
|
await window.electronAPI.kobold.deleteConfigFile(fileName);
|
||||||
|
|
||||||
|
if (deleteSuccess) {
|
||||||
|
await loadConfigFiles();
|
||||||
|
|
||||||
|
const updatedFiles = await window.electronAPI.kobold.getConfigFiles();
|
||||||
|
if (updatedFiles.length > 0) {
|
||||||
|
const firstConfig = updatedFiles[0].name;
|
||||||
|
setSelectedFile(firstConfig);
|
||||||
|
await window.electronAPI.kobold.setSelectedConfig(firstConfig);
|
||||||
|
|
||||||
|
const selectedConfig = updatedFiles.find((f) => f.name === firstConfig);
|
||||||
|
if (selectedConfig) {
|
||||||
|
await parseAndApplyConfigFile(selectedConfig.path);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
setSelectedFile(null);
|
||||||
|
await window.electronAPI.kobold.setSelectedConfig('');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return deleteSuccess;
|
||||||
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
void loadConfigFiles();
|
void loadConfigFiles();
|
||||||
|
|
||||||
|
|
@ -290,6 +316,7 @@ export const LaunchScreen = ({ onLaunch }: LaunchScreenProps) => {
|
||||||
onFileSelection={handleFileSelection}
|
onFileSelection={handleFileSelection}
|
||||||
onCreateNewConfig={handleCreateNewConfig}
|
onCreateNewConfig={handleCreateNewConfig}
|
||||||
onSaveConfig={handleSaveConfig}
|
onSaveConfig={handleSaveConfig}
|
||||||
|
onDeleteConfig={handleDeleteConfig}
|
||||||
onLoadConfigFiles={loadConfigFiles}
|
onLoadConfigFiles={loadConfigFiles}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { useState, useEffect } from 'react';
|
import { useState, useEffect } from 'react';
|
||||||
import { Modal, Tabs, Text, Group, rem, Button, Box } from '@mantine/core';
|
import { Tabs, Text, Group, rem } from '@mantine/core';
|
||||||
import {
|
import {
|
||||||
Settings,
|
Settings,
|
||||||
Palette,
|
Palette,
|
||||||
|
|
@ -12,7 +12,7 @@ import { VersionsTab } from '@/components/settings/VersionsTab';
|
||||||
import { AppearanceTab } from '@/components/settings/AppearanceTab';
|
import { AppearanceTab } from '@/components/settings/AppearanceTab';
|
||||||
import { AboutTab } from '@/components/settings/AboutTab';
|
import { AboutTab } from '@/components/settings/AboutTab';
|
||||||
import type { Screen } from '@/types';
|
import type { Screen } from '@/types';
|
||||||
import { MODAL_STYLES_WITH_TITLEBAR } from '@/constants';
|
import { Modal } from '@/components/Modal';
|
||||||
|
|
||||||
interface SettingsModalProps {
|
interface SettingsModalProps {
|
||||||
opened: boolean;
|
opened: boolean;
|
||||||
|
|
@ -67,111 +67,95 @@ export const SettingsModal = ({
|
||||||
</Group>
|
</Group>
|
||||||
}
|
}
|
||||||
size="xl"
|
size="xl"
|
||||||
centered
|
showCloseButton
|
||||||
lockScroll={false}
|
>
|
||||||
styles={{
|
<div
|
||||||
...MODAL_STYLES_WITH_TITLEBAR,
|
style={{
|
||||||
content: {
|
|
||||||
paddingBottom: 0,
|
|
||||||
},
|
|
||||||
body: {
|
|
||||||
height: '70vh',
|
height: '70vh',
|
||||||
padding: 0,
|
padding: 0,
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
flexDirection: 'column',
|
flexDirection: 'column',
|
||||||
position: 'relative',
|
position: 'relative',
|
||||||
},
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<Tabs
|
|
||||||
value={activeTab}
|
|
||||||
onChange={(value) => value && setActiveTab(value)}
|
|
||||||
orientation="vertical"
|
|
||||||
variant="pills"
|
|
||||||
styles={{
|
|
||||||
root: {
|
|
||||||
flex: 1,
|
|
||||||
minHeight: 0,
|
|
||||||
},
|
|
||||||
panel: {
|
|
||||||
height: '100%',
|
|
||||||
overflow: 'auto',
|
|
||||||
paddingLeft: '1.5rem',
|
|
||||||
paddingRight: '1.5rem',
|
|
||||||
},
|
|
||||||
tabLabel: {
|
|
||||||
textAlign: 'left',
|
|
||||||
justifyContent: 'flex-start',
|
|
||||||
},
|
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Tabs.List>
|
<Tabs
|
||||||
<Tabs.Tab
|
value={activeTab}
|
||||||
value="general"
|
onChange={(value) => value && setActiveTab(value)}
|
||||||
leftSection={
|
orientation="vertical"
|
||||||
<SlidersHorizontal style={{ width: rem(16), height: rem(16) }} />
|
variant="pills"
|
||||||
}
|
styles={{
|
||||||
>
|
root: {
|
||||||
General
|
flex: 1,
|
||||||
</Tabs.Tab>
|
minHeight: 0,
|
||||||
{showVersionsTab && (
|
},
|
||||||
|
panel: {
|
||||||
|
height: '100%',
|
||||||
|
overflow: 'auto',
|
||||||
|
paddingLeft: '1.5rem',
|
||||||
|
paddingRight: '1.5rem',
|
||||||
|
},
|
||||||
|
tabLabel: {
|
||||||
|
textAlign: 'left',
|
||||||
|
justifyContent: 'flex-start',
|
||||||
|
},
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Tabs.List>
|
||||||
<Tabs.Tab
|
<Tabs.Tab
|
||||||
value="versions"
|
value="general"
|
||||||
leftSection={
|
leftSection={
|
||||||
<GitBranch style={{ width: rem(16), height: rem(16) }} />
|
<SlidersHorizontal
|
||||||
|
style={{ width: rem(16), height: rem(16) }}
|
||||||
|
/>
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
Versions
|
General
|
||||||
</Tabs.Tab>
|
</Tabs.Tab>
|
||||||
)}
|
{showVersionsTab && (
|
||||||
<Tabs.Tab
|
<Tabs.Tab
|
||||||
value="appearance"
|
value="versions"
|
||||||
leftSection={
|
leftSection={
|
||||||
<Palette style={{ width: rem(16), height: rem(16) }} />
|
<GitBranch style={{ width: rem(16), height: rem(16) }} />
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
Appearance
|
Versions
|
||||||
</Tabs.Tab>
|
</Tabs.Tab>
|
||||||
<Tabs.Tab
|
)}
|
||||||
value="about"
|
<Tabs.Tab
|
||||||
leftSection={<Info style={{ width: rem(16), height: rem(16) }} />}
|
value="appearance"
|
||||||
>
|
leftSection={
|
||||||
About
|
<Palette style={{ width: rem(16), height: rem(16) }} />
|
||||||
</Tabs.Tab>
|
}
|
||||||
</Tabs.List>
|
>
|
||||||
|
Appearance
|
||||||
|
</Tabs.Tab>
|
||||||
|
<Tabs.Tab
|
||||||
|
value="about"
|
||||||
|
leftSection={<Info style={{ width: rem(16), height: rem(16) }} />}
|
||||||
|
>
|
||||||
|
About
|
||||||
|
</Tabs.Tab>
|
||||||
|
</Tabs.List>
|
||||||
|
|
||||||
<Tabs.Panel value="general">
|
<Tabs.Panel value="general">
|
||||||
<GeneralTab isOnInterfaceScreen={isOnInterfaceScreen} />
|
<GeneralTab isOnInterfaceScreen={isOnInterfaceScreen} />
|
||||||
</Tabs.Panel>
|
|
||||||
|
|
||||||
{showVersionsTab && (
|
|
||||||
<Tabs.Panel value="versions">
|
|
||||||
<VersionsTab />
|
|
||||||
</Tabs.Panel>
|
</Tabs.Panel>
|
||||||
)}
|
|
||||||
|
|
||||||
<Tabs.Panel value="appearance">
|
{showVersionsTab && (
|
||||||
<AppearanceTab />
|
<Tabs.Panel value="versions">
|
||||||
</Tabs.Panel>
|
<VersionsTab />
|
||||||
|
</Tabs.Panel>
|
||||||
|
)}
|
||||||
|
|
||||||
<Tabs.Panel value="about">
|
<Tabs.Panel value="appearance">
|
||||||
<AboutTab />
|
<AppearanceTab />
|
||||||
</Tabs.Panel>
|
</Tabs.Panel>
|
||||||
</Tabs>
|
|
||||||
|
|
||||||
<Box
|
<Tabs.Panel value="about">
|
||||||
style={{
|
<AboutTab />
|
||||||
backgroundColor: 'var(--mantine-color-body)',
|
</Tabs.Panel>
|
||||||
padding: '0.5rem 1.5rem 1.5rem',
|
</Tabs>
|
||||||
display: 'flex',
|
</div>
|
||||||
justifyContent: 'flex-end',
|
|
||||||
flexShrink: 0,
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<Button onClick={onClose} variant="filled">
|
|
||||||
Close
|
|
||||||
</Button>
|
|
||||||
</Box>
|
|
||||||
</Modal>
|
</Modal>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -6,15 +6,6 @@ export const TITLEBAR_HEIGHT = '2.5rem';
|
||||||
|
|
||||||
export const STATUSBAR_HEIGHT = '1.5rem';
|
export const STATUSBAR_HEIGHT = '1.5rem';
|
||||||
|
|
||||||
export const MODAL_STYLES_WITH_TITLEBAR = {
|
|
||||||
overlay: {
|
|
||||||
top: TITLEBAR_HEIGHT,
|
|
||||||
},
|
|
||||||
content: {
|
|
||||||
marginTop: TITLEBAR_HEIGHT,
|
|
||||||
},
|
|
||||||
} as const;
|
|
||||||
|
|
||||||
export const SERVER_READY_SIGNALS = {
|
export const SERVER_READY_SIGNALS = {
|
||||||
KOBOLDCPP: 'Please connect to custom endpoint at',
|
KOBOLDCPP: 'Please connect to custom endpoint at',
|
||||||
SILLYTAVERN: 'SillyTavern is listening on',
|
SILLYTAVERN: 'SillyTavern is listening on',
|
||||||
|
|
|
||||||
|
|
@ -47,9 +47,7 @@ const saveToCache = (releases: DownloadItem[]) => {
|
||||||
timestamp: Date.now(),
|
timestamp: Date.now(),
|
||||||
};
|
};
|
||||||
localStorage.setItem(CACHE_KEY, JSON.stringify(data));
|
localStorage.setItem(CACHE_KEY, JSON.stringify(data));
|
||||||
} catch {
|
} catch {}
|
||||||
void 0;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const transformReleaseToDownloadItems = (
|
const transformReleaseToDownloadItems = (
|
||||||
|
|
|
||||||
|
|
@ -29,9 +29,7 @@ export const useLogoClickSounds = () => {
|
||||||
setIsMouseSqueaking(false);
|
setIsMouseSqueaking(false);
|
||||||
}, 300);
|
}, 300);
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {}
|
||||||
void 0;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const getLogoStyles = () => ({
|
const getLogoStyles = () => ({
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ import {
|
||||||
getCurrentVersion,
|
getCurrentVersion,
|
||||||
getConfigFiles,
|
getConfigFiles,
|
||||||
saveConfigFile,
|
saveConfigFile,
|
||||||
|
deleteConfigFile,
|
||||||
setCurrentVersion,
|
setCurrentVersion,
|
||||||
selectInstallDirectory,
|
selectInstallDirectory,
|
||||||
stopKoboldCpp,
|
stopKoboldCpp,
|
||||||
|
|
@ -107,6 +108,10 @@ export function setupIPCHandlers() {
|
||||||
saveConfigFile(configName, configData)
|
saveConfigFile(configName, configData)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
ipcMain.handle('kobold:deleteConfigFile', async (_, configName) =>
|
||||||
|
deleteConfigFile(configName)
|
||||||
|
);
|
||||||
|
|
||||||
ipcMain.handle('kobold:getSelectedConfig', () => getSelectedConfig());
|
ipcMain.handle('kobold:getSelectedConfig', () => getSelectedConfig());
|
||||||
|
|
||||||
ipcMain.handle('kobold:setSelectedConfig', (_, configName) =>
|
ipcMain.handle('kobold:setSelectedConfig', (_, configName) =>
|
||||||
|
|
|
||||||
|
|
@ -62,9 +62,7 @@ export async function getUvEnvironment() {
|
||||||
try {
|
try {
|
||||||
await access(path);
|
await access(path);
|
||||||
existingPaths.push(path);
|
existingPaths.push(path);
|
||||||
} catch {
|
} catch {}
|
||||||
void 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (existingPaths.length > 0) {
|
if (existingPaths.length > 0) {
|
||||||
|
|
|
||||||
|
|
@ -428,6 +428,18 @@ export async function saveConfigFile(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function deleteConfigFile(configFileName: string) {
|
||||||
|
try {
|
||||||
|
const installDir = getInstallDir();
|
||||||
|
const configPath = join(installDir, configFileName);
|
||||||
|
await unlink(configPath);
|
||||||
|
return true;
|
||||||
|
} catch (error) {
|
||||||
|
logError('Error deleting config file:', error as Error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export async function selectModelFile(title = 'Select Model File') {
|
export async function selectModelFile(title = 'Select Model File') {
|
||||||
try {
|
try {
|
||||||
const mainWindow = getMainWindow();
|
const mainWindow = getMainWindow();
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import { tryExecute } from '@/utils/node/logger';
|
||||||
|
|
||||||
export interface CpuMetrics {
|
export interface CpuMetrics {
|
||||||
usage: number;
|
usage: number;
|
||||||
|
temperature?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface MemoryMetrics {
|
export interface MemoryMetrics {
|
||||||
|
|
@ -21,6 +22,7 @@ export interface GpuMetrics {
|
||||||
memoryUsed: number;
|
memoryUsed: number;
|
||||||
memoryTotal: number;
|
memoryTotal: number;
|
||||||
memoryUsage: number;
|
memoryUsage: number;
|
||||||
|
temperature?: number;
|
||||||
}[];
|
}[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -96,6 +98,16 @@ async function collectAndSendCpuMetrics() {
|
||||||
usage: Math.round(cpuData.currentLoad),
|
usage: Math.round(cpuData.currentLoad),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (platform === 'linux') {
|
||||||
|
try {
|
||||||
|
const tempData = await si.cpuTemperature();
|
||||||
|
metrics.temperature =
|
||||||
|
tempData.main && tempData.main > 0
|
||||||
|
? Math.round(tempData.main)
|
||||||
|
: undefined;
|
||||||
|
} catch {}
|
||||||
|
}
|
||||||
|
|
||||||
if (mainWindow && !mainWindow.isDestroyed()) {
|
if (mainWindow && !mainWindow.isDestroyed()) {
|
||||||
mainWindow.webContents.send('cpu-metrics', metrics);
|
mainWindow.webContents.send('cpu-metrics', metrics);
|
||||||
}
|
}
|
||||||
|
|
@ -132,6 +144,7 @@ async function collectAndSendGpuMetrics() {
|
||||||
gpuInfo.memoryTotal > 0
|
gpuInfo.memoryTotal > 0
|
||||||
? Math.round((gpuInfo.memoryUsed / gpuInfo.memoryTotal) * 100)
|
? Math.round((gpuInfo.memoryUsed / gpuInfo.memoryTotal) * 100)
|
||||||
: 0,
|
: 0,
|
||||||
|
temperature: gpuInfo.temperature,
|
||||||
})),
|
})),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,8 @@ const koboldAPI: KoboldAPI = {
|
||||||
getConfigFiles: () => ipcRenderer.invoke('kobold:getConfigFiles'),
|
getConfigFiles: () => ipcRenderer.invoke('kobold:getConfigFiles'),
|
||||||
saveConfigFile: (configName, configData) =>
|
saveConfigFile: (configName, configData) =>
|
||||||
ipcRenderer.invoke('kobold:saveConfigFile', configName, configData),
|
ipcRenderer.invoke('kobold:saveConfigFile', configName, configData),
|
||||||
|
deleteConfigFile: (configName) =>
|
||||||
|
ipcRenderer.invoke('kobold:deleteConfigFile', configName),
|
||||||
getSelectedConfig: () => ipcRenderer.invoke('kobold:getSelectedConfig'),
|
getSelectedConfig: () => ipcRenderer.invoke('kobold:getSelectedConfig'),
|
||||||
setSelectedConfig: (configName) =>
|
setSelectedConfig: (configName) =>
|
||||||
ipcRenderer.invoke('kobold:setSelectedConfig', configName),
|
ipcRenderer.invoke('kobold:setSelectedConfig', configName),
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,9 @@
|
||||||
@import '@fontsource/inter/latin-500.css';
|
@import '@fontsource/inter/latin-500.css';
|
||||||
@import '@fontsource/inter/latin-600.css';
|
@import '@fontsource/inter/latin-600.css';
|
||||||
|
|
||||||
:root {
|
:root,
|
||||||
|
.mantine-Modal-root,
|
||||||
|
.mantine-Portal {
|
||||||
--mantine-color-body: #fafafa;
|
--mantine-color-body: #fafafa;
|
||||||
--mantine-color-white: #fafafa;
|
--mantine-color-white: #fafafa;
|
||||||
|
|
||||||
|
|
@ -15,7 +17,9 @@
|
||||||
--mantine-color-default-border: #e5e7eb;
|
--mantine-color-default-border: #e5e7eb;
|
||||||
}
|
}
|
||||||
|
|
||||||
[data-mantine-color-scheme='dark'] {
|
[data-mantine-color-scheme='dark'],
|
||||||
|
[data-mantine-color-scheme='dark'] .mantine-Modal-root,
|
||||||
|
[data-mantine-color-scheme='dark'] .mantine-Portal {
|
||||||
--mantine-color-body: #0f0f0f;
|
--mantine-color-body: #0f0f0f;
|
||||||
--mantine-color-dark-7: #1a1a1a;
|
--mantine-color-dark-7: #1a1a1a;
|
||||||
--mantine-color-dark-6: #2d2d2d;
|
--mantine-color-dark-6: #2d2d2d;
|
||||||
|
|
@ -130,3 +134,11 @@
|
||||||
.mantine-Tooltip-arrow {
|
.mantine-Tooltip-arrow {
|
||||||
background-color: var(--mantine-color-dark-6) !important;
|
background-color: var(--mantine-color-dark-6) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[data-mantine-color-scheme='dark'] .mantine-Modal-content {
|
||||||
|
background-color: var(--mantine-color-dark-7) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-mantine-color-scheme='dark'] .mantine-Modal-header {
|
||||||
|
background-color: var(--mantine-color-dark-7) !important;
|
||||||
|
}
|
||||||
|
|
|
||||||
1
src/types/electron.d.ts
vendored
1
src/types/electron.d.ts
vendored
|
|
@ -124,6 +124,7 @@ export interface KoboldAPI {
|
||||||
configName: string,
|
configName: string,
|
||||||
configData: KoboldConfig
|
configData: KoboldConfig
|
||||||
) => Promise<boolean>;
|
) => Promise<boolean>;
|
||||||
|
deleteConfigFile: (configName: string) => Promise<boolean>;
|
||||||
getSelectedConfig: () => Promise<string | null>;
|
getSelectedConfig: () => Promise<string | null>;
|
||||||
setSelectedConfig: (configName: string) => Promise<boolean>;
|
setSelectedConfig: (configName: string) => Promise<boolean>;
|
||||||
parseConfigFile: (filePath: string) => Promise<KoboldConfig | null>;
|
parseConfigFile: (filePath: string) => Promise<KoboldConfig | null>;
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ interface CachedGPUInfo {
|
||||||
deviceName: string;
|
deviceName: string;
|
||||||
devicePath: string;
|
devicePath: string;
|
||||||
memoryTotal: number;
|
memoryTotal: number;
|
||||||
|
hwmonPath?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface GPUData {
|
interface GPUData {
|
||||||
|
|
@ -13,6 +14,7 @@ interface GPUData {
|
||||||
usage: number;
|
usage: number;
|
||||||
memoryUsed: number;
|
memoryUsed: number;
|
||||||
memoryTotal: number;
|
memoryTotal: number;
|
||||||
|
temperature?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
let linuxGpuCache: CachedGPUInfo[] | null = null;
|
let linuxGpuCache: CachedGPUInfo[] | null = null;
|
||||||
|
|
@ -36,6 +38,7 @@ async function initializeLinuxGPUCache() {
|
||||||
return linuxCachePromise;
|
return linuxCachePromise;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line sonarjs/cognitive-complexity
|
||||||
linuxCachePromise = (async () => {
|
linuxCachePromise = (async () => {
|
||||||
try {
|
try {
|
||||||
const drmPath = '/sys/class/drm';
|
const drmPath = '/sys/class/drm';
|
||||||
|
|
@ -80,14 +83,9 @@ async function initializeLinuxGPUCache() {
|
||||||
} else {
|
} else {
|
||||||
deviceName = `GPU (${vendorId}:${deviceId})`;
|
deviceName = `GPU (${vendorId}:${deviceId})`;
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {}
|
||||||
void 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {}
|
||||||
void 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const memTotalData = await readFile(
|
const memTotalData = await readFile(
|
||||||
`${devicePath}/mem_info_vram_total`,
|
`${devicePath}/mem_info_vram_total`,
|
||||||
|
|
@ -99,10 +97,22 @@ async function initializeLinuxGPUCache() {
|
||||||
);
|
);
|
||||||
|
|
||||||
if (memoryTotal > 0) {
|
if (memoryTotal > 0) {
|
||||||
|
let hwmonPath: string | undefined;
|
||||||
|
try {
|
||||||
|
const hwmonEntries = await readdir(`${devicePath}/hwmon`);
|
||||||
|
const hwmonEntry = hwmonEntries.find((e) =>
|
||||||
|
e.startsWith('hwmon')
|
||||||
|
);
|
||||||
|
if (hwmonEntry) {
|
||||||
|
hwmonPath = `${devicePath}/hwmon/${hwmonEntry}`;
|
||||||
|
}
|
||||||
|
} catch {}
|
||||||
|
|
||||||
gpus.push({
|
gpus.push({
|
||||||
deviceName,
|
deviceName,
|
||||||
devicePath,
|
devicePath,
|
||||||
memoryTotal,
|
memoryTotal,
|
||||||
|
hwmonPath,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
|
|
@ -145,11 +155,23 @@ async function getLinuxGPUData() {
|
||||||
(parseInt(memUsedData.trim(), 10) || 0) / (1024 * 1024 * 1024)
|
(parseInt(memUsedData.trim(), 10) || 0) / (1024 * 1024 * 1024)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let temperature: number | undefined;
|
||||||
|
if (cachedGPU.hwmonPath) {
|
||||||
|
try {
|
||||||
|
const tempData = await readFile(
|
||||||
|
`${cachedGPU.hwmonPath}/temp1_input`,
|
||||||
|
'utf8'
|
||||||
|
);
|
||||||
|
temperature = Math.round(parseInt(tempData.trim(), 10) / 1000);
|
||||||
|
} catch {}
|
||||||
|
}
|
||||||
|
|
||||||
gpus.push({
|
gpus.push({
|
||||||
deviceName: cachedGPU.deviceName,
|
deviceName: cachedGPU.deviceName,
|
||||||
usage,
|
usage,
|
||||||
memoryUsed: parseFloat(memoryUsed.toFixed(2)),
|
memoryUsed: parseFloat(memoryUsed.toFixed(2)),
|
||||||
memoryTotal: parseFloat(cachedGPU.memoryTotal.toFixed(2)),
|
memoryTotal: parseFloat(cachedGPU.memoryTotal.toFixed(2)),
|
||||||
|
temperature,
|
||||||
});
|
});
|
||||||
} catch {
|
} catch {
|
||||||
continue;
|
continue;
|
||||||
|
|
|
||||||
|
|
@ -36,18 +36,14 @@ export const initializeAudio = async () => {
|
||||||
audio.pause();
|
audio.pause();
|
||||||
audio.currentTime = 0;
|
audio.currentTime = 0;
|
||||||
audio.volume = 0.5;
|
audio.volume = 0.5;
|
||||||
} catch {
|
} catch {}
|
||||||
void 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
audioCache.set(soundUrl, audio);
|
audioCache.set(soundUrl, audio);
|
||||||
});
|
});
|
||||||
|
|
||||||
await Promise.allSettled(initPromises);
|
await Promise.allSettled(initPromises);
|
||||||
audioInitialized = true;
|
audioInitialized = true;
|
||||||
} catch {
|
} catch {}
|
||||||
void 0;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export const playSound = async (soundUrl: string, volume = 0.5) => {
|
export const playSound = async (soundUrl: string, volume = 0.5) => {
|
||||||
|
|
@ -65,7 +61,5 @@ export const playSound = async (soundUrl: string, volume = 0.5) => {
|
||||||
audio.volume = volume;
|
audio.volume = volume;
|
||||||
audio.currentTime = 0;
|
audio.currentTime = 0;
|
||||||
await audio.play();
|
await audio.play();
|
||||||
} catch {
|
} catch {}
|
||||||
void 0;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
516
yarn.lock
516
yarn.lock
|
|
@ -402,184 +402,184 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/aix-ppc64@npm:0.25.9":
|
"@esbuild/aix-ppc64@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/aix-ppc64@npm:0.25.9"
|
resolution: "@esbuild/aix-ppc64@npm:0.25.10"
|
||||||
conditions: os=aix & cpu=ppc64
|
conditions: os=aix & cpu=ppc64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/android-arm64@npm:0.25.9":
|
"@esbuild/android-arm64@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/android-arm64@npm:0.25.9"
|
resolution: "@esbuild/android-arm64@npm:0.25.10"
|
||||||
conditions: os=android & cpu=arm64
|
conditions: os=android & cpu=arm64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/android-arm@npm:0.25.9":
|
"@esbuild/android-arm@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/android-arm@npm:0.25.9"
|
resolution: "@esbuild/android-arm@npm:0.25.10"
|
||||||
conditions: os=android & cpu=arm
|
conditions: os=android & cpu=arm
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/android-x64@npm:0.25.9":
|
"@esbuild/android-x64@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/android-x64@npm:0.25.9"
|
resolution: "@esbuild/android-x64@npm:0.25.10"
|
||||||
conditions: os=android & cpu=x64
|
conditions: os=android & cpu=x64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/darwin-arm64@npm:0.25.9":
|
"@esbuild/darwin-arm64@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/darwin-arm64@npm:0.25.9"
|
resolution: "@esbuild/darwin-arm64@npm:0.25.10"
|
||||||
conditions: os=darwin & cpu=arm64
|
conditions: os=darwin & cpu=arm64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/darwin-x64@npm:0.25.9":
|
"@esbuild/darwin-x64@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/darwin-x64@npm:0.25.9"
|
resolution: "@esbuild/darwin-x64@npm:0.25.10"
|
||||||
conditions: os=darwin & cpu=x64
|
conditions: os=darwin & cpu=x64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/freebsd-arm64@npm:0.25.9":
|
"@esbuild/freebsd-arm64@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/freebsd-arm64@npm:0.25.9"
|
resolution: "@esbuild/freebsd-arm64@npm:0.25.10"
|
||||||
conditions: os=freebsd & cpu=arm64
|
conditions: os=freebsd & cpu=arm64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/freebsd-x64@npm:0.25.9":
|
"@esbuild/freebsd-x64@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/freebsd-x64@npm:0.25.9"
|
resolution: "@esbuild/freebsd-x64@npm:0.25.10"
|
||||||
conditions: os=freebsd & cpu=x64
|
conditions: os=freebsd & cpu=x64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/linux-arm64@npm:0.25.9":
|
"@esbuild/linux-arm64@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/linux-arm64@npm:0.25.9"
|
resolution: "@esbuild/linux-arm64@npm:0.25.10"
|
||||||
conditions: os=linux & cpu=arm64
|
conditions: os=linux & cpu=arm64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/linux-arm@npm:0.25.9":
|
"@esbuild/linux-arm@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/linux-arm@npm:0.25.9"
|
resolution: "@esbuild/linux-arm@npm:0.25.10"
|
||||||
conditions: os=linux & cpu=arm
|
conditions: os=linux & cpu=arm
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/linux-ia32@npm:0.25.9":
|
"@esbuild/linux-ia32@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/linux-ia32@npm:0.25.9"
|
resolution: "@esbuild/linux-ia32@npm:0.25.10"
|
||||||
conditions: os=linux & cpu=ia32
|
conditions: os=linux & cpu=ia32
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/linux-loong64@npm:0.25.9":
|
"@esbuild/linux-loong64@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/linux-loong64@npm:0.25.9"
|
resolution: "@esbuild/linux-loong64@npm:0.25.10"
|
||||||
conditions: os=linux & cpu=loong64
|
conditions: os=linux & cpu=loong64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/linux-mips64el@npm:0.25.9":
|
"@esbuild/linux-mips64el@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/linux-mips64el@npm:0.25.9"
|
resolution: "@esbuild/linux-mips64el@npm:0.25.10"
|
||||||
conditions: os=linux & cpu=mips64el
|
conditions: os=linux & cpu=mips64el
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/linux-ppc64@npm:0.25.9":
|
"@esbuild/linux-ppc64@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/linux-ppc64@npm:0.25.9"
|
resolution: "@esbuild/linux-ppc64@npm:0.25.10"
|
||||||
conditions: os=linux & cpu=ppc64
|
conditions: os=linux & cpu=ppc64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/linux-riscv64@npm:0.25.9":
|
"@esbuild/linux-riscv64@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/linux-riscv64@npm:0.25.9"
|
resolution: "@esbuild/linux-riscv64@npm:0.25.10"
|
||||||
conditions: os=linux & cpu=riscv64
|
conditions: os=linux & cpu=riscv64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/linux-s390x@npm:0.25.9":
|
"@esbuild/linux-s390x@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/linux-s390x@npm:0.25.9"
|
resolution: "@esbuild/linux-s390x@npm:0.25.10"
|
||||||
conditions: os=linux & cpu=s390x
|
conditions: os=linux & cpu=s390x
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/linux-x64@npm:0.25.9":
|
"@esbuild/linux-x64@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/linux-x64@npm:0.25.9"
|
resolution: "@esbuild/linux-x64@npm:0.25.10"
|
||||||
conditions: os=linux & cpu=x64
|
conditions: os=linux & cpu=x64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/netbsd-arm64@npm:0.25.9":
|
"@esbuild/netbsd-arm64@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/netbsd-arm64@npm:0.25.9"
|
resolution: "@esbuild/netbsd-arm64@npm:0.25.10"
|
||||||
conditions: os=netbsd & cpu=arm64
|
conditions: os=netbsd & cpu=arm64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/netbsd-x64@npm:0.25.9":
|
"@esbuild/netbsd-x64@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/netbsd-x64@npm:0.25.9"
|
resolution: "@esbuild/netbsd-x64@npm:0.25.10"
|
||||||
conditions: os=netbsd & cpu=x64
|
conditions: os=netbsd & cpu=x64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/openbsd-arm64@npm:0.25.9":
|
"@esbuild/openbsd-arm64@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/openbsd-arm64@npm:0.25.9"
|
resolution: "@esbuild/openbsd-arm64@npm:0.25.10"
|
||||||
conditions: os=openbsd & cpu=arm64
|
conditions: os=openbsd & cpu=arm64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/openbsd-x64@npm:0.25.9":
|
"@esbuild/openbsd-x64@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/openbsd-x64@npm:0.25.9"
|
resolution: "@esbuild/openbsd-x64@npm:0.25.10"
|
||||||
conditions: os=openbsd & cpu=x64
|
conditions: os=openbsd & cpu=x64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/openharmony-arm64@npm:0.25.9":
|
"@esbuild/openharmony-arm64@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/openharmony-arm64@npm:0.25.9"
|
resolution: "@esbuild/openharmony-arm64@npm:0.25.10"
|
||||||
conditions: os=openharmony & cpu=arm64
|
conditions: os=openharmony & cpu=arm64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/sunos-x64@npm:0.25.9":
|
"@esbuild/sunos-x64@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/sunos-x64@npm:0.25.9"
|
resolution: "@esbuild/sunos-x64@npm:0.25.10"
|
||||||
conditions: os=sunos & cpu=x64
|
conditions: os=sunos & cpu=x64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/win32-arm64@npm:0.25.9":
|
"@esbuild/win32-arm64@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/win32-arm64@npm:0.25.9"
|
resolution: "@esbuild/win32-arm64@npm:0.25.10"
|
||||||
conditions: os=win32 & cpu=arm64
|
conditions: os=win32 & cpu=arm64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/win32-ia32@npm:0.25.9":
|
"@esbuild/win32-ia32@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/win32-ia32@npm:0.25.9"
|
resolution: "@esbuild/win32-ia32@npm:0.25.10"
|
||||||
conditions: os=win32 & cpu=ia32
|
conditions: os=win32 & cpu=ia32
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/win32-x64@npm:0.25.9":
|
"@esbuild/win32-x64@npm:0.25.10":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "@esbuild/win32-x64@npm:0.25.9"
|
resolution: "@esbuild/win32-x64@npm:0.25.10"
|
||||||
conditions: os=win32 & cpu=x64
|
conditions: os=win32 & cpu=x64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
@ -646,10 +646,10 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@eslint/js@npm:9.35.0, @eslint/js@npm:^9.35.0":
|
"@eslint/js@npm:9.36.0, @eslint/js@npm:^9.36.0":
|
||||||
version: 9.35.0
|
version: 9.36.0
|
||||||
resolution: "@eslint/js@npm:9.35.0"
|
resolution: "@eslint/js@npm:9.36.0"
|
||||||
checksum: 10c0/d40fe38724bc76c085c0b753cdf937fa35c0d6807ae76b2632e3f5f66c3040c91adcf1aff2ce70b4f45752e60629fadc415eeec9af3be3c274bae1cac54b9840
|
checksum: 10c0/e3f6fb7d6f117d79615574f7bef4f238bcfed6ece0465d28226c3a75d2b6fac9cc189121e8673562796ca8ccea2bf9861715ee5cf4a3dbef87d17811c0dac22c
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
|
@ -841,12 +841,12 @@ __metadata:
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.28":
|
"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.28":
|
||||||
version: 0.3.30
|
version: 0.3.31
|
||||||
resolution: "@jridgewell/trace-mapping@npm:0.3.30"
|
resolution: "@jridgewell/trace-mapping@npm:0.3.31"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@jridgewell/resolve-uri": "npm:^3.1.0"
|
"@jridgewell/resolve-uri": "npm:^3.1.0"
|
||||||
"@jridgewell/sourcemap-codec": "npm:^1.4.14"
|
"@jridgewell/sourcemap-codec": "npm:^1.4.14"
|
||||||
checksum: 10c0/3a1516c10f44613b9ba27c37a02ff8f410893776b2b3dad20a391b51b884dd60f97bbb56936d65d2ff8fe978510a0000266654ab8426bdb9ceb5fb4585b19e23
|
checksum: 10c0/4b30ec8cd56c5fd9a661f088230af01e0c1a3888d11ffb6b47639700f71225be21d1f7e168048d6d4f9449207b978a235c07c8f15c07705685d16dc06280e9d9
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
|
@ -981,149 +981,156 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-android-arm-eabi@npm:4.50.1":
|
"@rollup/rollup-android-arm-eabi@npm:4.52.0":
|
||||||
version: 4.50.1
|
version: 4.52.0
|
||||||
resolution: "@rollup/rollup-android-arm-eabi@npm:4.50.1"
|
resolution: "@rollup/rollup-android-arm-eabi@npm:4.52.0"
|
||||||
conditions: os=android & cpu=arm
|
conditions: os=android & cpu=arm
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-android-arm64@npm:4.50.1":
|
"@rollup/rollup-android-arm64@npm:4.52.0":
|
||||||
version: 4.50.1
|
version: 4.52.0
|
||||||
resolution: "@rollup/rollup-android-arm64@npm:4.50.1"
|
resolution: "@rollup/rollup-android-arm64@npm:4.52.0"
|
||||||
conditions: os=android & cpu=arm64
|
conditions: os=android & cpu=arm64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-darwin-arm64@npm:4.50.1":
|
"@rollup/rollup-darwin-arm64@npm:4.52.0":
|
||||||
version: 4.50.1
|
version: 4.52.0
|
||||||
resolution: "@rollup/rollup-darwin-arm64@npm:4.50.1"
|
resolution: "@rollup/rollup-darwin-arm64@npm:4.52.0"
|
||||||
conditions: os=darwin & cpu=arm64
|
conditions: os=darwin & cpu=arm64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-darwin-x64@npm:4.50.1":
|
"@rollup/rollup-darwin-x64@npm:4.52.0":
|
||||||
version: 4.50.1
|
version: 4.52.0
|
||||||
resolution: "@rollup/rollup-darwin-x64@npm:4.50.1"
|
resolution: "@rollup/rollup-darwin-x64@npm:4.52.0"
|
||||||
conditions: os=darwin & cpu=x64
|
conditions: os=darwin & cpu=x64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-freebsd-arm64@npm:4.50.1":
|
"@rollup/rollup-freebsd-arm64@npm:4.52.0":
|
||||||
version: 4.50.1
|
version: 4.52.0
|
||||||
resolution: "@rollup/rollup-freebsd-arm64@npm:4.50.1"
|
resolution: "@rollup/rollup-freebsd-arm64@npm:4.52.0"
|
||||||
conditions: os=freebsd & cpu=arm64
|
conditions: os=freebsd & cpu=arm64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-freebsd-x64@npm:4.50.1":
|
"@rollup/rollup-freebsd-x64@npm:4.52.0":
|
||||||
version: 4.50.1
|
version: 4.52.0
|
||||||
resolution: "@rollup/rollup-freebsd-x64@npm:4.50.1"
|
resolution: "@rollup/rollup-freebsd-x64@npm:4.52.0"
|
||||||
conditions: os=freebsd & cpu=x64
|
conditions: os=freebsd & cpu=x64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-linux-arm-gnueabihf@npm:4.50.1":
|
"@rollup/rollup-linux-arm-gnueabihf@npm:4.52.0":
|
||||||
version: 4.50.1
|
version: 4.52.0
|
||||||
resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.50.1"
|
resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.52.0"
|
||||||
conditions: os=linux & cpu=arm & libc=glibc
|
conditions: os=linux & cpu=arm & libc=glibc
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-linux-arm-musleabihf@npm:4.50.1":
|
"@rollup/rollup-linux-arm-musleabihf@npm:4.52.0":
|
||||||
version: 4.50.1
|
version: 4.52.0
|
||||||
resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.50.1"
|
resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.52.0"
|
||||||
conditions: os=linux & cpu=arm & libc=musl
|
conditions: os=linux & cpu=arm & libc=musl
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-linux-arm64-gnu@npm:4.50.1":
|
"@rollup/rollup-linux-arm64-gnu@npm:4.52.0":
|
||||||
version: 4.50.1
|
version: 4.52.0
|
||||||
resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.50.1"
|
resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.52.0"
|
||||||
conditions: os=linux & cpu=arm64 & libc=glibc
|
conditions: os=linux & cpu=arm64 & libc=glibc
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-linux-arm64-musl@npm:4.50.1":
|
"@rollup/rollup-linux-arm64-musl@npm:4.52.0":
|
||||||
version: 4.50.1
|
version: 4.52.0
|
||||||
resolution: "@rollup/rollup-linux-arm64-musl@npm:4.50.1"
|
resolution: "@rollup/rollup-linux-arm64-musl@npm:4.52.0"
|
||||||
conditions: os=linux & cpu=arm64 & libc=musl
|
conditions: os=linux & cpu=arm64 & libc=musl
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-linux-loongarch64-gnu@npm:4.50.1":
|
"@rollup/rollup-linux-loong64-gnu@npm:4.52.0":
|
||||||
version: 4.50.1
|
version: 4.52.0
|
||||||
resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.50.1"
|
resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.52.0"
|
||||||
conditions: os=linux & cpu=loong64 & libc=glibc
|
conditions: os=linux & cpu=loong64 & libc=glibc
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-linux-ppc64-gnu@npm:4.50.1":
|
"@rollup/rollup-linux-ppc64-gnu@npm:4.52.0":
|
||||||
version: 4.50.1
|
version: 4.52.0
|
||||||
resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.50.1"
|
resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.52.0"
|
||||||
conditions: os=linux & cpu=ppc64 & libc=glibc
|
conditions: os=linux & cpu=ppc64 & libc=glibc
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-linux-riscv64-gnu@npm:4.50.1":
|
"@rollup/rollup-linux-riscv64-gnu@npm:4.52.0":
|
||||||
version: 4.50.1
|
version: 4.52.0
|
||||||
resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.50.1"
|
resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.52.0"
|
||||||
conditions: os=linux & cpu=riscv64 & libc=glibc
|
conditions: os=linux & cpu=riscv64 & libc=glibc
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-linux-riscv64-musl@npm:4.50.1":
|
"@rollup/rollup-linux-riscv64-musl@npm:4.52.0":
|
||||||
version: 4.50.1
|
version: 4.52.0
|
||||||
resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.50.1"
|
resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.52.0"
|
||||||
conditions: os=linux & cpu=riscv64 & libc=musl
|
conditions: os=linux & cpu=riscv64 & libc=musl
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-linux-s390x-gnu@npm:4.50.1":
|
"@rollup/rollup-linux-s390x-gnu@npm:4.52.0":
|
||||||
version: 4.50.1
|
version: 4.52.0
|
||||||
resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.50.1"
|
resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.52.0"
|
||||||
conditions: os=linux & cpu=s390x & libc=glibc
|
conditions: os=linux & cpu=s390x & libc=glibc
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-linux-x64-gnu@npm:4.50.1":
|
"@rollup/rollup-linux-x64-gnu@npm:4.52.0":
|
||||||
version: 4.50.1
|
version: 4.52.0
|
||||||
resolution: "@rollup/rollup-linux-x64-gnu@npm:4.50.1"
|
resolution: "@rollup/rollup-linux-x64-gnu@npm:4.52.0"
|
||||||
conditions: os=linux & cpu=x64 & libc=glibc
|
conditions: os=linux & cpu=x64 & libc=glibc
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-linux-x64-musl@npm:4.50.1":
|
"@rollup/rollup-linux-x64-musl@npm:4.52.0":
|
||||||
version: 4.50.1
|
version: 4.52.0
|
||||||
resolution: "@rollup/rollup-linux-x64-musl@npm:4.50.1"
|
resolution: "@rollup/rollup-linux-x64-musl@npm:4.52.0"
|
||||||
conditions: os=linux & cpu=x64 & libc=musl
|
conditions: os=linux & cpu=x64 & libc=musl
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-openharmony-arm64@npm:4.50.1":
|
"@rollup/rollup-openharmony-arm64@npm:4.52.0":
|
||||||
version: 4.50.1
|
version: 4.52.0
|
||||||
resolution: "@rollup/rollup-openharmony-arm64@npm:4.50.1"
|
resolution: "@rollup/rollup-openharmony-arm64@npm:4.52.0"
|
||||||
conditions: os=openharmony & cpu=arm64
|
conditions: os=openharmony & cpu=arm64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-win32-arm64-msvc@npm:4.50.1":
|
"@rollup/rollup-win32-arm64-msvc@npm:4.52.0":
|
||||||
version: 4.50.1
|
version: 4.52.0
|
||||||
resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.50.1"
|
resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.52.0"
|
||||||
conditions: os=win32 & cpu=arm64
|
conditions: os=win32 & cpu=arm64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-win32-ia32-msvc@npm:4.50.1":
|
"@rollup/rollup-win32-ia32-msvc@npm:4.52.0":
|
||||||
version: 4.50.1
|
version: 4.52.0
|
||||||
resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.50.1"
|
resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.52.0"
|
||||||
conditions: os=win32 & cpu=ia32
|
conditions: os=win32 & cpu=ia32
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@rollup/rollup-win32-x64-msvc@npm:4.50.1":
|
"@rollup/rollup-win32-x64-gnu@npm:4.52.0":
|
||||||
version: 4.50.1
|
version: 4.52.0
|
||||||
resolution: "@rollup/rollup-win32-x64-msvc@npm:4.50.1"
|
resolution: "@rollup/rollup-win32-x64-gnu@npm:4.52.0"
|
||||||
|
conditions: os=win32 & cpu=x64
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
|
"@rollup/rollup-win32-x64-msvc@npm:4.52.0":
|
||||||
|
version: 4.52.0
|
||||||
|
resolution: "@rollup/rollup-win32-x64-msvc@npm:4.52.0"
|
||||||
conditions: os=win32 & cpu=x64
|
conditions: os=win32 & cpu=x64
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
@ -1297,11 +1304,11 @@ __metadata:
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@types/node@npm:^22.7.7":
|
"@types/node@npm:^22.7.7":
|
||||||
version: 22.18.1
|
version: 22.18.6
|
||||||
resolution: "@types/node@npm:22.18.1"
|
resolution: "@types/node@npm:22.18.6"
|
||||||
dependencies:
|
dependencies:
|
||||||
undici-types: "npm:~6.21.0"
|
undici-types: "npm:~6.21.0"
|
||||||
checksum: 10c0/1912b0ea6cb9ef59722b0fed64652388e13b41d52569c16198f1278a882837bbf4c8a4ec913e852893356f07c0c44b4e00fbca289ac7222741d03449104e22fe
|
checksum: 10c0/7ba190da2e64e56c59270661af8cd682c830a1375b6f965ab153be90baabfdaa867aa1d63f87b42de80956996d46dfe1cf93ecefe982d9a16e485b6756949f9a
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
|
@ -1892,6 +1899,15 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"baseline-browser-mapping@npm:^2.8.3":
|
||||||
|
version: 2.8.6
|
||||||
|
resolution: "baseline-browser-mapping@npm:2.8.6"
|
||||||
|
bin:
|
||||||
|
baseline-browser-mapping: dist/cli.js
|
||||||
|
checksum: 10c0/ea628db5048d1e5c0251d4783e0496f5ce8de7a0e20ea29c8876611cb0acf58ffc76bf6561786c6388db22f130646e3ecb91eebc1c03954552a21d38fa38320f
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"bl@npm:^4.1.0":
|
"bl@npm:^4.1.0":
|
||||||
version: 4.1.0
|
version: 4.1.0
|
||||||
resolution: "bl@npm:4.1.0"
|
resolution: "bl@npm:4.1.0"
|
||||||
|
|
@ -1939,16 +1955,17 @@ __metadata:
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"browserslist@npm:^4.24.0":
|
"browserslist@npm:^4.24.0":
|
||||||
version: 4.25.4
|
version: 4.26.2
|
||||||
resolution: "browserslist@npm:4.25.4"
|
resolution: "browserslist@npm:4.26.2"
|
||||||
dependencies:
|
dependencies:
|
||||||
caniuse-lite: "npm:^1.0.30001737"
|
baseline-browser-mapping: "npm:^2.8.3"
|
||||||
electron-to-chromium: "npm:^1.5.211"
|
caniuse-lite: "npm:^1.0.30001741"
|
||||||
node-releases: "npm:^2.0.19"
|
electron-to-chromium: "npm:^1.5.218"
|
||||||
|
node-releases: "npm:^2.0.21"
|
||||||
update-browserslist-db: "npm:^1.1.3"
|
update-browserslist-db: "npm:^1.1.3"
|
||||||
bin:
|
bin:
|
||||||
browserslist: cli.js
|
browserslist: cli.js
|
||||||
checksum: 10c0/2b105948990dc2fc0bc2536b4889aadfa15d637e1d857a121611a704cdf539a68f575a391f6bf8b7ff19db36cee1b7834565571f35a7ea691051d2e7fb4f2eb1
|
checksum: 10c0/1146339dad33fda77786b11ea07f1c40c48899edd897d73a9114ee0dbb1ee6475bb4abda263a678c104508bdca8e66760ff8e10be1947d3e20d34bae01d8b89b
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
|
@ -2149,10 +2166,10 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"caniuse-lite@npm:^1.0.30001737":
|
"caniuse-lite@npm:^1.0.30001741":
|
||||||
version: 1.0.30001741
|
version: 1.0.30001743
|
||||||
resolution: "caniuse-lite@npm:1.0.30001741"
|
resolution: "caniuse-lite@npm:1.0.30001743"
|
||||||
checksum: 10c0/45746f896205a61a8eeb85a32aeca243ebce640cd6eb80d04949d9389a13f4659c737860300d7b988057599f0958c55eeab74ec02ce9ef137feb7d006e75fec1
|
checksum: 10c0/1bd730ca10d881a1ca9f55ce864d34c3b18501718c03976e0d3419f4694b715159e13fdef6d58ad47b6d2445d315940f3a01266658876828c820a3331aac021d
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
|
@ -2441,14 +2458,14 @@ __metadata:
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4":
|
"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4":
|
||||||
version: 4.4.1
|
version: 4.4.3
|
||||||
resolution: "debug@npm:4.4.1"
|
resolution: "debug@npm:4.4.3"
|
||||||
dependencies:
|
dependencies:
|
||||||
ms: "npm:^2.1.3"
|
ms: "npm:^2.1.3"
|
||||||
peerDependenciesMeta:
|
peerDependenciesMeta:
|
||||||
supports-color:
|
supports-color:
|
||||||
optional: true
|
optional: true
|
||||||
checksum: 10c0/d2b44bc1afd912b49bb7ebb0d50a860dc93a4dd7d946e8de94abc957bb63726b7dd5aa48c18c2386c379ec024c46692e15ed3ed97d481729f929201e671fcd55
|
checksum: 10c0/d79136ec6c83ecbefd0f6a5593da6a9c91ec4d7ddc4b54c883d6e71ec9accb5f67a1a5e96d00a328196b5b5c86d365e98d8a3a70856aaf16b4e7b1985e67f5a6
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
|
@ -2530,9 +2547,9 @@ __metadata:
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"detect-libc@npm:^2.0.1":
|
"detect-libc@npm:^2.0.1":
|
||||||
version: 2.0.4
|
version: 2.1.0
|
||||||
resolution: "detect-libc@npm:2.0.4"
|
resolution: "detect-libc@npm:2.1.0"
|
||||||
checksum: 10c0/c15541f836eba4b1f521e4eecc28eefefdbc10a94d3b8cb4c507689f332cc111babb95deda66f2de050b22122113189986d5190be97d51b5a2b23b938415e67c
|
checksum: 10c0/4d0d36c77fdcb1d3221779d8dfc7d5808dd52530d49db67193fb3cd8149e2d499a1eeb87bb830ad7c442294929992c12e971f88ae492965549f8f83e5336eba6
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
|
@ -2686,10 +2703,10 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"electron-to-chromium@npm:^1.5.211":
|
"electron-to-chromium@npm:^1.5.218":
|
||||||
version: 1.5.215
|
version: 1.5.222
|
||||||
resolution: "electron-to-chromium@npm:1.5.215"
|
resolution: "electron-to-chromium@npm:1.5.222"
|
||||||
checksum: 10c0/3a45976d1193e57284533096b3bbec218a5d4d85af4f7c133522aae35b14bbf22734f48ccc3f0e43a451441ebc375fa2f4350390fd729dcedb97543692133e39
|
checksum: 10c0/a81eb8d2b171236884faf9b5dd382c66d9250283032cb89a3e555d788bf3956f7f4f6bf7bf30b3daf9e5c945ef837bfcd1be21b3f41cfe186ed2f25da13c9af3
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
|
@ -2946,35 +2963,35 @@ __metadata:
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"esbuild@npm:^0.25.0, esbuild@npm:^0.25.5":
|
"esbuild@npm:^0.25.0, esbuild@npm:^0.25.5":
|
||||||
version: 0.25.9
|
version: 0.25.10
|
||||||
resolution: "esbuild@npm:0.25.9"
|
resolution: "esbuild@npm:0.25.10"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@esbuild/aix-ppc64": "npm:0.25.9"
|
"@esbuild/aix-ppc64": "npm:0.25.10"
|
||||||
"@esbuild/android-arm": "npm:0.25.9"
|
"@esbuild/android-arm": "npm:0.25.10"
|
||||||
"@esbuild/android-arm64": "npm:0.25.9"
|
"@esbuild/android-arm64": "npm:0.25.10"
|
||||||
"@esbuild/android-x64": "npm:0.25.9"
|
"@esbuild/android-x64": "npm:0.25.10"
|
||||||
"@esbuild/darwin-arm64": "npm:0.25.9"
|
"@esbuild/darwin-arm64": "npm:0.25.10"
|
||||||
"@esbuild/darwin-x64": "npm:0.25.9"
|
"@esbuild/darwin-x64": "npm:0.25.10"
|
||||||
"@esbuild/freebsd-arm64": "npm:0.25.9"
|
"@esbuild/freebsd-arm64": "npm:0.25.10"
|
||||||
"@esbuild/freebsd-x64": "npm:0.25.9"
|
"@esbuild/freebsd-x64": "npm:0.25.10"
|
||||||
"@esbuild/linux-arm": "npm:0.25.9"
|
"@esbuild/linux-arm": "npm:0.25.10"
|
||||||
"@esbuild/linux-arm64": "npm:0.25.9"
|
"@esbuild/linux-arm64": "npm:0.25.10"
|
||||||
"@esbuild/linux-ia32": "npm:0.25.9"
|
"@esbuild/linux-ia32": "npm:0.25.10"
|
||||||
"@esbuild/linux-loong64": "npm:0.25.9"
|
"@esbuild/linux-loong64": "npm:0.25.10"
|
||||||
"@esbuild/linux-mips64el": "npm:0.25.9"
|
"@esbuild/linux-mips64el": "npm:0.25.10"
|
||||||
"@esbuild/linux-ppc64": "npm:0.25.9"
|
"@esbuild/linux-ppc64": "npm:0.25.10"
|
||||||
"@esbuild/linux-riscv64": "npm:0.25.9"
|
"@esbuild/linux-riscv64": "npm:0.25.10"
|
||||||
"@esbuild/linux-s390x": "npm:0.25.9"
|
"@esbuild/linux-s390x": "npm:0.25.10"
|
||||||
"@esbuild/linux-x64": "npm:0.25.9"
|
"@esbuild/linux-x64": "npm:0.25.10"
|
||||||
"@esbuild/netbsd-arm64": "npm:0.25.9"
|
"@esbuild/netbsd-arm64": "npm:0.25.10"
|
||||||
"@esbuild/netbsd-x64": "npm:0.25.9"
|
"@esbuild/netbsd-x64": "npm:0.25.10"
|
||||||
"@esbuild/openbsd-arm64": "npm:0.25.9"
|
"@esbuild/openbsd-arm64": "npm:0.25.10"
|
||||||
"@esbuild/openbsd-x64": "npm:0.25.9"
|
"@esbuild/openbsd-x64": "npm:0.25.10"
|
||||||
"@esbuild/openharmony-arm64": "npm:0.25.9"
|
"@esbuild/openharmony-arm64": "npm:0.25.10"
|
||||||
"@esbuild/sunos-x64": "npm:0.25.9"
|
"@esbuild/sunos-x64": "npm:0.25.10"
|
||||||
"@esbuild/win32-arm64": "npm:0.25.9"
|
"@esbuild/win32-arm64": "npm:0.25.10"
|
||||||
"@esbuild/win32-ia32": "npm:0.25.9"
|
"@esbuild/win32-ia32": "npm:0.25.10"
|
||||||
"@esbuild/win32-x64": "npm:0.25.9"
|
"@esbuild/win32-x64": "npm:0.25.10"
|
||||||
dependenciesMeta:
|
dependenciesMeta:
|
||||||
"@esbuild/aix-ppc64":
|
"@esbuild/aix-ppc64":
|
||||||
optional: true
|
optional: true
|
||||||
|
|
@ -3030,7 +3047,7 @@ __metadata:
|
||||||
optional: true
|
optional: true
|
||||||
bin:
|
bin:
|
||||||
esbuild: bin/esbuild
|
esbuild: bin/esbuild
|
||||||
checksum: 10c0/aaa1284c75fcf45c82f9a1a117fe8dc5c45628e3386bda7d64916ae27730910b51c5aec7dd45a6ba19256be30ba2935e64a8f011a3f0539833071e06bf76d5b3
|
checksum: 10c0/8ee5fdd43ed0d4092ce7f41577c63147f54049d5617763f0549c638bbe939e8adaa8f1a2728adb63417eb11df51956b7b0d8eb88ee08c27ad1d42960256158fa
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
|
@ -3199,9 +3216,9 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"eslint@npm:^9.35.0":
|
"eslint@npm:^9.36.0":
|
||||||
version: 9.35.0
|
version: 9.36.0
|
||||||
resolution: "eslint@npm:9.35.0"
|
resolution: "eslint@npm:9.36.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@eslint-community/eslint-utils": "npm:^4.8.0"
|
"@eslint-community/eslint-utils": "npm:^4.8.0"
|
||||||
"@eslint-community/regexpp": "npm:^4.12.1"
|
"@eslint-community/regexpp": "npm:^4.12.1"
|
||||||
|
|
@ -3209,7 +3226,7 @@ __metadata:
|
||||||
"@eslint/config-helpers": "npm:^0.3.1"
|
"@eslint/config-helpers": "npm:^0.3.1"
|
||||||
"@eslint/core": "npm:^0.15.2"
|
"@eslint/core": "npm:^0.15.2"
|
||||||
"@eslint/eslintrc": "npm:^3.3.1"
|
"@eslint/eslintrc": "npm:^3.3.1"
|
||||||
"@eslint/js": "npm:9.35.0"
|
"@eslint/js": "npm:9.36.0"
|
||||||
"@eslint/plugin-kit": "npm:^0.3.5"
|
"@eslint/plugin-kit": "npm:^0.3.5"
|
||||||
"@humanfs/node": "npm:^0.16.6"
|
"@humanfs/node": "npm:^0.16.6"
|
||||||
"@humanwhocodes/module-importer": "npm:^1.0.1"
|
"@humanwhocodes/module-importer": "npm:^1.0.1"
|
||||||
|
|
@ -3245,7 +3262,7 @@ __metadata:
|
||||||
optional: true
|
optional: true
|
||||||
bin:
|
bin:
|
||||||
eslint: bin/eslint.js
|
eslint: bin/eslint.js
|
||||||
checksum: 10c0/798c527520ccf62106f8cd210bd1db1f8eb1b0e7a56feb0a8b322bf3a1e6a0bc6dc3a414542c22b1b393d58d5e3cd0252c44c023049de9067b836450503a2f03
|
checksum: 10c0/0e2705a94847813b03f2f3c1367c0708319cbb66458250a09b2d056a088c56e079a1c1d76c44feebf51971d9ce64d010373b2a4f007cd1026fc24f95c89836df
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
|
@ -3547,13 +3564,13 @@ __metadata:
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"fs-extra@npm:^11.1.1":
|
"fs-extra@npm:^11.1.1":
|
||||||
version: 11.3.1
|
version: 11.3.2
|
||||||
resolution: "fs-extra@npm:11.3.1"
|
resolution: "fs-extra@npm:11.3.2"
|
||||||
dependencies:
|
dependencies:
|
||||||
graceful-fs: "npm:^4.2.0"
|
graceful-fs: "npm:^4.2.0"
|
||||||
jsonfile: "npm:^6.0.1"
|
jsonfile: "npm:^6.0.1"
|
||||||
universalify: "npm:^2.0.0"
|
universalify: "npm:^2.0.0"
|
||||||
checksum: 10c0/61e5b7285b1ca72c68dfe1058b2514294a922683afac2a80aa90540f9bd85370763d675e3b408ef500077d355956fece3bd24b546790e261c3d3015967e2b2d9
|
checksum: 10c0/f5d629e1bb646d5dedb4d8b24c5aad3deb8cc1d5438979d6f237146cd10e113b49a949ae1b54212c2fbc98e2d0995f38009a9a1d0520f0287943335e65fe919b
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
|
@ -3670,7 +3687,7 @@ __metadata:
|
||||||
version: 0.0.0-use.local
|
version: 0.0.0-use.local
|
||||||
resolution: "gerbil@workspace:."
|
resolution: "gerbil@workspace:."
|
||||||
dependencies:
|
dependencies:
|
||||||
"@eslint/js": "npm:^9.35.0"
|
"@eslint/js": "npm:^9.36.0"
|
||||||
"@fontsource/inter": "npm:^5.2.8"
|
"@fontsource/inter": "npm:^5.2.8"
|
||||||
"@mantine/core": "npm:^8.3.1"
|
"@mantine/core": "npm:^8.3.1"
|
||||||
"@mantine/hooks": "npm:^8.3.1"
|
"@mantine/hooks": "npm:^8.3.1"
|
||||||
|
|
@ -3687,7 +3704,7 @@ __metadata:
|
||||||
electron-builder: "npm:^26.0.12"
|
electron-builder: "npm:^26.0.12"
|
||||||
electron-updater: "npm:6.6.2"
|
electron-updater: "npm:6.6.2"
|
||||||
electron-vite: "npm:^4.0.0"
|
electron-vite: "npm:^4.0.0"
|
||||||
eslint: "npm:^9.35.0"
|
eslint: "npm:^9.36.0"
|
||||||
eslint-plugin-import: "npm:^2.32.0"
|
eslint-plugin-import: "npm:^2.32.0"
|
||||||
eslint-plugin-no-comments: "npm:^1.1.10"
|
eslint-plugin-no-comments: "npm:^1.1.10"
|
||||||
eslint-plugin-promise: "npm:^7.2.1"
|
eslint-plugin-promise: "npm:^7.2.1"
|
||||||
|
|
@ -4182,9 +4199,9 @@ __metadata:
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"is-arrayish@npm:^0.3.1":
|
"is-arrayish@npm:^0.3.1":
|
||||||
version: 0.3.2
|
version: 0.3.4
|
||||||
resolution: "is-arrayish@npm:0.3.2"
|
resolution: "is-arrayish@npm:0.3.4"
|
||||||
checksum: 10c0/f59b43dc1d129edb6f0e282595e56477f98c40278a2acdc8b0a5c57097c9eff8fe55470493df5775478cf32a4dc8eaf6d3a749f07ceee5bc263a78b2434f6a54
|
checksum: 10c0/1fa672a2f0bedb74154440310f616c0b6e53a95cf0625522ae050f06626d1cabd1a3d8085c882dc45c61ad0e7df2529aff122810b3b4a552880bf170d6df94e0
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
|
@ -5239,10 +5256,10 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"node-releases@npm:^2.0.19":
|
"node-releases@npm:^2.0.21":
|
||||||
version: 2.0.20
|
version: 2.0.21
|
||||||
resolution: "node-releases@npm:2.0.20"
|
resolution: "node-releases@npm:2.0.21"
|
||||||
checksum: 10c0/24c5b1f5aa16d042c47a651ca2e022ca27320f95e4d2b76b9e543cc470eadd01032646383212ec373f1a3dd15cccce83d77c318ee99585366dbd25db4366abd8
|
checksum: 10c0/0eb94916eeebbda9d51da6a9ea47428a12b2bb0dd94930c949632b0c859356abf53b2e5a2792021f96c5fda4f791a8e195f2375b78ae7dba8d8bc3141baa1469
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
|
@ -5644,11 +5661,11 @@ __metadata:
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"pretty-ms@npm:^9.2.0":
|
"pretty-ms@npm:^9.2.0":
|
||||||
version: 9.2.0
|
version: 9.3.0
|
||||||
resolution: "pretty-ms@npm:9.2.0"
|
resolution: "pretty-ms@npm:9.3.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
parse-ms: "npm:^4.0.0"
|
parse-ms: "npm:^4.0.0"
|
||||||
checksum: 10c0/ab6d066f90e9f77020426986e1b018369f41575674544c539aabec2e63a20fec01166d8cf6571d0e165ad11cfe5a8134a2a48a36d42ab291c59c6deca5264cbb
|
checksum: 10c0/555ea39a1de48a30601938aedb76d682871d33b6dee015281c37108921514b11e1792928b1648c2e5589acc73c8ef0fb5e585fb4c718e340a28b86799e90fb34
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
|
@ -6090,30 +6107,31 @@ __metadata:
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"rollup@npm:^4.43.0":
|
"rollup@npm:^4.43.0":
|
||||||
version: 4.50.1
|
version: 4.52.0
|
||||||
resolution: "rollup@npm:4.50.1"
|
resolution: "rollup@npm:4.52.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@rollup/rollup-android-arm-eabi": "npm:4.50.1"
|
"@rollup/rollup-android-arm-eabi": "npm:4.52.0"
|
||||||
"@rollup/rollup-android-arm64": "npm:4.50.1"
|
"@rollup/rollup-android-arm64": "npm:4.52.0"
|
||||||
"@rollup/rollup-darwin-arm64": "npm:4.50.1"
|
"@rollup/rollup-darwin-arm64": "npm:4.52.0"
|
||||||
"@rollup/rollup-darwin-x64": "npm:4.50.1"
|
"@rollup/rollup-darwin-x64": "npm:4.52.0"
|
||||||
"@rollup/rollup-freebsd-arm64": "npm:4.50.1"
|
"@rollup/rollup-freebsd-arm64": "npm:4.52.0"
|
||||||
"@rollup/rollup-freebsd-x64": "npm:4.50.1"
|
"@rollup/rollup-freebsd-x64": "npm:4.52.0"
|
||||||
"@rollup/rollup-linux-arm-gnueabihf": "npm:4.50.1"
|
"@rollup/rollup-linux-arm-gnueabihf": "npm:4.52.0"
|
||||||
"@rollup/rollup-linux-arm-musleabihf": "npm:4.50.1"
|
"@rollup/rollup-linux-arm-musleabihf": "npm:4.52.0"
|
||||||
"@rollup/rollup-linux-arm64-gnu": "npm:4.50.1"
|
"@rollup/rollup-linux-arm64-gnu": "npm:4.52.0"
|
||||||
"@rollup/rollup-linux-arm64-musl": "npm:4.50.1"
|
"@rollup/rollup-linux-arm64-musl": "npm:4.52.0"
|
||||||
"@rollup/rollup-linux-loongarch64-gnu": "npm:4.50.1"
|
"@rollup/rollup-linux-loong64-gnu": "npm:4.52.0"
|
||||||
"@rollup/rollup-linux-ppc64-gnu": "npm:4.50.1"
|
"@rollup/rollup-linux-ppc64-gnu": "npm:4.52.0"
|
||||||
"@rollup/rollup-linux-riscv64-gnu": "npm:4.50.1"
|
"@rollup/rollup-linux-riscv64-gnu": "npm:4.52.0"
|
||||||
"@rollup/rollup-linux-riscv64-musl": "npm:4.50.1"
|
"@rollup/rollup-linux-riscv64-musl": "npm:4.52.0"
|
||||||
"@rollup/rollup-linux-s390x-gnu": "npm:4.50.1"
|
"@rollup/rollup-linux-s390x-gnu": "npm:4.52.0"
|
||||||
"@rollup/rollup-linux-x64-gnu": "npm:4.50.1"
|
"@rollup/rollup-linux-x64-gnu": "npm:4.52.0"
|
||||||
"@rollup/rollup-linux-x64-musl": "npm:4.50.1"
|
"@rollup/rollup-linux-x64-musl": "npm:4.52.0"
|
||||||
"@rollup/rollup-openharmony-arm64": "npm:4.50.1"
|
"@rollup/rollup-openharmony-arm64": "npm:4.52.0"
|
||||||
"@rollup/rollup-win32-arm64-msvc": "npm:4.50.1"
|
"@rollup/rollup-win32-arm64-msvc": "npm:4.52.0"
|
||||||
"@rollup/rollup-win32-ia32-msvc": "npm:4.50.1"
|
"@rollup/rollup-win32-ia32-msvc": "npm:4.52.0"
|
||||||
"@rollup/rollup-win32-x64-msvc": "npm:4.50.1"
|
"@rollup/rollup-win32-x64-gnu": "npm:4.52.0"
|
||||||
|
"@rollup/rollup-win32-x64-msvc": "npm:4.52.0"
|
||||||
"@types/estree": "npm:1.0.8"
|
"@types/estree": "npm:1.0.8"
|
||||||
fsevents: "npm:~2.3.2"
|
fsevents: "npm:~2.3.2"
|
||||||
dependenciesMeta:
|
dependenciesMeta:
|
||||||
|
|
@ -6137,7 +6155,7 @@ __metadata:
|
||||||
optional: true
|
optional: true
|
||||||
"@rollup/rollup-linux-arm64-musl":
|
"@rollup/rollup-linux-arm64-musl":
|
||||||
optional: true
|
optional: true
|
||||||
"@rollup/rollup-linux-loongarch64-gnu":
|
"@rollup/rollup-linux-loong64-gnu":
|
||||||
optional: true
|
optional: true
|
||||||
"@rollup/rollup-linux-ppc64-gnu":
|
"@rollup/rollup-linux-ppc64-gnu":
|
||||||
optional: true
|
optional: true
|
||||||
|
|
@ -6157,13 +6175,15 @@ __metadata:
|
||||||
optional: true
|
optional: true
|
||||||
"@rollup/rollup-win32-ia32-msvc":
|
"@rollup/rollup-win32-ia32-msvc":
|
||||||
optional: true
|
optional: true
|
||||||
|
"@rollup/rollup-win32-x64-gnu":
|
||||||
|
optional: true
|
||||||
"@rollup/rollup-win32-x64-msvc":
|
"@rollup/rollup-win32-x64-msvc":
|
||||||
optional: true
|
optional: true
|
||||||
fsevents:
|
fsevents:
|
||||||
optional: true
|
optional: true
|
||||||
bin:
|
bin:
|
||||||
rollup: dist/bin/rollup
|
rollup: dist/bin/rollup
|
||||||
checksum: 10c0/2029282826d5fb4e308be261b2c28329a4d2bd34304cc3960da69fd21d5acccd0267d6770b1656ffc8f166203ef7e865b4583d5f842a519c8ef059ac71854205
|
checksum: 10c0/05b33f5143cfeb2c64df6bfa13a971c3d94081828f763e22b4154ed1452091abe648418d9a45abc8d5656a9a979f5b12e9cd5b390f247c3af4640ad8ed333523
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
|
@ -6424,11 +6444,11 @@ __metadata:
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"simple-swizzle@npm:^0.2.2":
|
"simple-swizzle@npm:^0.2.2":
|
||||||
version: 0.2.2
|
version: 0.2.4
|
||||||
resolution: "simple-swizzle@npm:0.2.2"
|
resolution: "simple-swizzle@npm:0.2.4"
|
||||||
dependencies:
|
dependencies:
|
||||||
is-arrayish: "npm:^0.3.1"
|
is-arrayish: "npm:^0.3.1"
|
||||||
checksum: 10c0/df5e4662a8c750bdba69af4e8263c5d96fe4cd0f9fe4bdfa3cbdeb45d2e869dff640beaaeb1ef0e99db4d8d2ec92f85508c269f50c972174851bc1ae5bd64308
|
checksum: 10c0/846c3fdd1325318d5c71295cfbb99bfc9edc4c8dffdda5e6e9efe30482bbcd32cf360fc2806f46ac43ff7d09bcfaff20337bb79f826f0e6a8e366efd3cdd7868
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue