+
{(() => {
const lines = tab.content.split('\n');
- const MAX_MINIMAP_LINES = 500;
-
- if (lines.length <= MAX_MINIMAP_LINES) {
+ const MAX = 500;
+ if (lines.length <= MAX) {
return lines.map((line, i) => (
-
- {line.substring(0, 80)}
-
+
{line.substring(0, 80)}
));
}
-
- // For large files: sample lines proportionally
- const step = lines.length / MAX_MINIMAP_LINES;
- return Array.from({ length: MAX_MINIMAP_LINES }, (_, i) => {
- const lineIdx = Math.floor(i * step);
- return (
-
- {lines[lineIdx]?.substring(0, 80) || ''}
-
- );
+ const step = lines.length / MAX;
+ return Array.from({ length: MAX }, (_, i) => {
+ const idx = Math.floor(i * step);
+ return
{lines[idx]?.substring(0, 80) || ''}
;
});
})()}
-
)}
diff --git a/src/components/EncryptionPanel.tsx b/src/components/EncryptionPanel.tsx
index a87543a..68959e7 100644
--- a/src/components/EncryptionPanel.tsx
+++ b/src/components/EncryptionPanel.tsx
@@ -1,6 +1,6 @@
import { useState, useCallback } from 'react';
import { createPortal } from 'react-dom';
-import { invoke } from '@tauri-apps/api/tauri';
+import { invoke } from '@tauri-apps/api/core';
import { Lock, Unlock, Key, AlertTriangle, Shield, Eye, EyeOff, File, Check, Loader2, X, FileText, Copy } from '../icons';
import './EncryptionPanel.css';
diff --git a/src/components/GitPanel.tsx b/src/components/GitPanel.tsx
index 2f6d63d..cd7c7d1 100644
--- a/src/components/GitPanel.tsx
+++ b/src/components/GitPanel.tsx
@@ -1,5 +1,5 @@
import { useState, useEffect, useCallback } from 'react';
-import { invoke } from '@tauri-apps/api/tauri';
+import { invoke } from '@tauri-apps/api/core';
import { GitStatus, GitCommit } from '../types';
import { GitBranch, Globe, FolderOpen, Rocket, Download, Upload, RefreshCw, Lightbulb, Check } from '../icons';
import './GitPanel.css';
diff --git a/src/components/GlobalSearchPanel.tsx b/src/components/GlobalSearchPanel.tsx
index f0d2300..5a6b0cc 100644
--- a/src/components/GlobalSearchPanel.tsx
+++ b/src/components/GlobalSearchPanel.tsx
@@ -1,5 +1,5 @@
import { useState, useCallback, useRef, useEffect } from 'react';
-import { invoke } from '@tauri-apps/api/tauri';
+import { invoke } from '@tauri-apps/api/core';
import { Search, Loader2, X, Zap, File, Target, FolderOpen } from '../icons';
import './GlobalSearchPanel.css';
diff --git a/src/components/SessionsPanel.tsx b/src/components/SessionsPanel.tsx
index f337fdd..f62b62b 100644
--- a/src/components/SessionsPanel.tsx
+++ b/src/components/SessionsPanel.tsx
@@ -1,5 +1,5 @@
import { useState, useEffect } from 'react';
-import { invoke } from '@tauri-apps/api/tauri';
+import { invoke } from '@tauri-apps/api/core';
import { Tab, Session, SessionFile } from '../types';
import { Save, ClipboardList, FolderOpen, Trash2 } from '../icons';
import './SessionsPanel.css';
diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx
index 70d04ff..195ead6 100644
--- a/src/components/Sidebar.tsx
+++ b/src/components/Sidebar.tsx
@@ -1,5 +1,5 @@
import { useState, useEffect, useCallback } from 'react';
-import { invoke } from '@tauri-apps/api/tauri';
+import { invoke } from '@tauri-apps/api/core';
import { FileInfo, Bookmark } from '../types';
import { getFileIcon, Folder as FolderIcon, Bookmark as BookmarkIcon, Loader2 } from '../icons';
import './Sidebar.css';
diff --git a/src/components/SnippetsPanel.tsx b/src/components/SnippetsPanel.tsx
index 2a797bf..4369bfe 100644
--- a/src/components/SnippetsPanel.tsx
+++ b/src/components/SnippetsPanel.tsx
@@ -1,6 +1,6 @@
import { useState, useEffect } from 'react';
import { createPortal } from 'react-dom';
-import { invoke } from '@tauri-apps/api/tauri';
+import { invoke } from '@tauri-apps/api/core';
import { Snippet } from '../types';
import { Scissors, Pencil, ClipboardList, Trash2, Plus, Lightbulb, Save, Search } from '../icons';
import './SnippetsPanel.css';
diff --git a/src/components/StatsPanel.tsx b/src/components/StatsPanel.tsx
index e3d944b..71a2794 100644
--- a/src/components/StatsPanel.tsx
+++ b/src/components/StatsPanel.tsx
@@ -1,5 +1,5 @@
import { useState, useEffect } from 'react';
-import { invoke } from '@tauri-apps/api/tauri';
+import { invoke } from '@tauri-apps/api/core';
import { CodingStats } from '../types';
import { BarChart3, Trash2, FileText, Keyboard, Clock } from '../icons';
import './StatsPanel.css';
diff --git a/src/components/SupportPanel.tsx b/src/components/SupportPanel.tsx
index 13b2072..aeb9c74 100644
--- a/src/components/SupportPanel.tsx
+++ b/src/components/SupportPanel.tsx
@@ -1,7 +1,7 @@
import { createPortal } from 'react-dom';
-import { shell } from '@tauri-apps/api';
import { Heart, Bug, Lightbulb, Star, GitBranch, ExternalLink } from '../icons';
import './SupportPanel.css';
+import * as shell from "@tauri-apps/plugin-shell"
interface SupportPanelProps {
onClose: () => void;
diff --git a/src/components/Terminal.tsx b/src/components/Terminal.tsx
index efacfaa..94963e1 100644
--- a/src/components/Terminal.tsx
+++ b/src/components/Terminal.tsx
@@ -1,7 +1,7 @@
import { useEffect, useRef } from 'react';
-import { invoke } from '@tauri-apps/api/tauri';
+import { invoke } from '@tauri-apps/api/core';
import { listen, UnlistenFn } from '@tauri-apps/api/event';
-import { confirm } from '@tauri-apps/api/dialog';
+import { confirm } from '@tauri-apps/plugin-dialog';
import { Terminal as XTerm } from 'xterm';
import { FitAddon } from 'xterm-addon-fit';
import { WebLinksAddon } from 'xterm-addon-web-links';
@@ -123,7 +123,7 @@ function Terminal({ cwd }: TerminalProps) {
const shouldProceed = await confirm(
`Dangerous Command Detected\n\nCommand: ${command}\nWarning: ${warning}\n\nAre you sure you want to execute this command?`,
- { title: 'Terminal Safety Warning', type: 'warning' }
+ { title: 'Terminal Safety Warning', kind: 'warning' }
);
if (shouldProceed) {
diff --git a/src/components/ToolsPanel.tsx b/src/components/ToolsPanel.tsx
index e49258e..654dc33 100644
--- a/src/components/ToolsPanel.tsx
+++ b/src/components/ToolsPanel.tsx
@@ -1,5 +1,5 @@
import { useState } from 'react';
-import { invoke } from '@tauri-apps/api/tauri';
+import { invoke } from '@tauri-apps/api/core';
import { RegexMatch } from '../types';
import { FileJson, Type, Link, Hash, Fingerprint, FileText, Ticket, Clock, Palette, Search, Scale, Copy } from '../icons';
import './ToolsPanel.css';
diff --git a/src/hooks/useFileManager.ts b/src/hooks/useFileManager.ts
index ac9dd74..022a8fd 100644
--- a/src/hooks/useFileManager.ts
+++ b/src/hooks/useFileManager.ts
@@ -1,6 +1,6 @@
import { useState, useEffect, useCallback, useRef, MutableRefObject } from 'react';
-import { open, save, ask, confirm } from '@tauri-apps/api/dialog';
-import { invoke } from '@tauri-apps/api/tauri';
+import { open, save, ask, confirm } from '@tauri-apps/plugin-dialog';
+import { invoke } from '@tauri-apps/api/core';
import { listen } from '@tauri-apps/api/event';
import { Tab, EditorSettings, Bookmark } from '../types';
import { generateId, detectLanguage } from '../utils';
@@ -195,7 +195,7 @@ export function useFileManager({ settingsRef, settings }: UseFileManagerParams)
if (tab?.isModified) {
const shouldSave = await ask(
`Do you want to save changes to "${tab.name}"?\n\nClick "Yes" to save, "No" to discard changes.`,
- { title: 'Unsaved Changes', type: 'warning' }
+ { title: 'Unsaved Changes', kind: 'warning' }
);
if (shouldSave) {
@@ -203,7 +203,7 @@ export function useFileManager({ settingsRef, settings }: UseFileManagerParams)
} else {
const shouldDiscard = await confirm(
`Are you sure you want to discard unsaved changes to "${tab.name}"?`,
- { title: 'Discard Changes', type: 'warning' }
+ { title: 'Discard Changes', kind: 'warning' }
);
if (!shouldDiscard) return;
}
diff --git a/src/hooks/useMenuEvents.ts b/src/hooks/useMenuEvents.ts
index fc6469e..152a450 100644
--- a/src/hooks/useMenuEvents.ts
+++ b/src/hooks/useMenuEvents.ts
@@ -1,6 +1,6 @@
import { useEffect } from 'react';
-import { ask, confirm } from '@tauri-apps/api/dialog';
-import { invoke } from '@tauri-apps/api/tauri';
+import { ask, confirm } from '@tauri-apps/plugin-dialog';
+import { invoke } from '@tauri-apps/api/core';
import { listen } from '@tauri-apps/api/event';
import { Tab, EditorSettings, PanelType } from '../types';
import { detectLanguage } from '../utils';
@@ -82,14 +82,14 @@ export function useMenuEvents({
if (modifiedTabs.length > 0) {
const shouldSave = await ask(
`You have ${modifiedTabs.length} unsaved file(s). Save all before closing?`,
- { title: 'Close All Tabs', type: 'warning' }
+ { title: 'Close All Tabs', kind: 'warning' }
);
if (shouldSave) {
await Promise.all(modifiedTabs.map(t => saveFile(t)));
} else {
const shouldDiscard = await confirm(
`Discard changes to ${modifiedTabs.length} file(s)?`,
- { title: 'Discard All Changes', type: 'warning' }
+ { title: 'Discard All Changes', kind: 'warning' }
);
if (!shouldDiscard) return;
}
diff --git a/vite.config.ts b/vite.config.ts
index 5bdc9e4..9141a30 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -13,5 +13,17 @@ export default defineConfig({
target: process.env.TAURI_PLATFORM === 'windows' ? 'chrome105' : 'safari13',
minify: !process.env.TAURI_DEBUG ? 'esbuild' : false,
sourcemap: !!process.env.TAURI_DEBUG,
+ rollupOptions: {
+ output: {
+ manualChunks(id) {
+ if (!id.includes('node_modules')) return;
+ if (id.includes('@codemirror') || id.includes('@lezer') || /node_modules[\\/]codemirror[\\/]/.test(id)) return 'codemirror';
+ if (/react-markdown|remark|micromark|mdast|hast|unist/.test(id)) return 'markdown';
+ if (id.includes('xterm')) return 'xterm';
+ if (id.includes('lucide-react') || id.includes('react-icons')) return 'icons';
+ if (id.includes('react-dom') || id.includes('scheduler') || /node_modules[\\/]react[\\/]/.test(id)) return 'react-vendor';
+ },
+ },
+ },
},
})