diff --git a/.gitignore b/.gitignore old mode 100755 new mode 100644 index a547bf3..74cbe98 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,10 @@ dist-ssr *.njsproj *.sln *.sw? +*.sw? + +# Release Artifacts +Release/ +*.zip +*.exe +backend/dist/ diff --git a/.npmrc b/.npmrc old mode 100755 new mode 100644 diff --git a/README.md b/README.md old mode 100755 new mode 100644 diff --git a/backend/internal/apps/apps_common.go b/backend/internal/apps/apps_common.go new file mode 100644 index 0000000..21d7106 --- /dev/null +++ b/backend/internal/apps/apps_common.go @@ -0,0 +1,22 @@ +package apps + +type AppInfo struct { + Name string `json:"name"` + Path string `json:"path"` + BundleID string `json:"bundleID"` // On Windows this can be ProductCode or Registry Key Name + UninstallString string `json:"uninstallString"` + Size int64 `json:"size"` + Icon string `json:"icon,omitempty"` +} + +type AssociatedFile struct { + Path string `json:"path"` + Type string `json:"type"` // "cache", "config", "log", "data" + Size int64 `json:"size"` +} + +type AppDetails struct { + AppInfo + Associated []AssociatedFile `json:"associated"` + TotalSize int64 `json:"totalSize"` +} diff --git a/backend/internal/apps/apps.go b/backend/internal/apps/apps_darwin.go similarity index 88% rename from backend/internal/apps/apps.go rename to backend/internal/apps/apps_darwin.go index 07a3231..c024951 100644 --- a/backend/internal/apps/apps.go +++ b/backend/internal/apps/apps_darwin.go @@ -1,3 +1,5 @@ +//go:build darwin + package apps import ( @@ -9,25 +11,7 @@ import ( "sync" ) -type AppInfo struct { - Name string `json:"name"` - Path string `json:"path"` - BundleID string `json:"bundleID"` - Size int64 `json:"size"` - Icon string `json:"icon,omitempty"` // Base64 or path? For now just path to .app (frontend can get icon) -} - -type AssociatedFile struct { - Path string `json:"path"` - Type string `json:"type"` // "cache", "config", "log", "data" - Size int64 `json:"size"` -} - -type AppDetails struct { - AppInfo - Associated []AssociatedFile `json:"associated"` - TotalSize int64 `json:"totalSize"` -} +// Structs moved to apps_common.go // ScanApps returns a list of installed applications func ScanApps() ([]AppInfo, error) { @@ -81,7 +65,7 @@ func ScanApps() ([]AppInfo, error) { } // GetAppDetails finds all associated files for a given app path -func GetAppDetails(appPath string) (*AppDetails, error) { +func GetAppDetails(appPath, _ string) (*AppDetails, error) { bid := getBundleID(appPath) if bid == "" { return nil, fmt.Errorf("could not determine bundle ID") @@ -215,3 +199,8 @@ func getType(locName string) string { return "data" } } + +// RunUninstaller executes the uninstall command (Not implemented on Mac yet) +func RunUninstaller(cmdString string) error { + return fmt.Errorf("uninstall not supported on macOS yet") +} diff --git a/backend/internal/apps/apps_windows.go b/backend/internal/apps/apps_windows.go new file mode 100644 index 0000000..67cdcd8 --- /dev/null +++ b/backend/internal/apps/apps_windows.go @@ -0,0 +1,248 @@ +//go:build windows + +package apps + +import ( + "fmt" + "os" + "os/exec" + "path/filepath" + "strings" + "syscall" + + "golang.org/x/sys/windows/registry" +) + +// ScanApps returns a list of installed applications via Registry +func ScanApps() ([]AppInfo, error) { + var apps []AppInfo + + // Keys to search + // HKLM Software\Microsoft\Windows\CurrentVersion\Uninstall + // HKLM Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall + // HKCU Software\Microsoft\Windows\CurrentVersion\Uninstall + + keys := []struct { + hive registry.Key + path string + }{ + {registry.LOCAL_MACHINE, `Software\Microsoft\Windows\CurrentVersion\Uninstall`}, + {registry.LOCAL_MACHINE, `Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall`}, + {registry.CURRENT_USER, `Software\Microsoft\Windows\CurrentVersion\Uninstall`}, + } + + seen := make(map[string]bool) + + for _, k := range keys { + baseKey, err := registry.OpenKey(k.hive, k.path, registry.READ) + if err != nil { + continue + } + + subkeys, err := baseKey.ReadSubKeyNames(-1) + baseKey.Close() + if err != nil { + continue + } + + for _, subkeyName := range subkeys { + appKey, err := registry.OpenKey(k.hive, k.path+`\`+subkeyName, registry.READ) + if err != nil { + continue + } + + displayName, _, err := appKey.GetStringValue("DisplayName") + if err != nil || displayName == "" { + appKey.Close() + continue + } + + // Define installLocation explicitly + installLocation, _, _ := appKey.GetStringValue("InstallLocation") + uninstallString, _, _ := appKey.GetStringValue("UninstallString") + quietUninstallString, _, _ := appKey.GetStringValue("QuietUninstallString") + + if uninstallString == "" && quietUninstallString != "" { + uninstallString = quietUninstallString + } + + // Debug Log + if strings.Contains(displayName, "Foxit") { + fmt.Printf("found Foxit: %s | UninstallString: %s\n", displayName, uninstallString) + } + + // Deduplication: If we've seen this Name + Location combination, skip it. + // This handles the common case of 32-bit apps appearing in both HKLM and WOW6432Node. + dedupKey := displayName + "|" + strings.ToLower(installLocation) + if seen[dedupKey] { + appKey.Close() + continue + } + seen[dedupKey] = true + + // Try to get size from registry (EstimatedSize is in KB) + sizeVal, _, errSize := appKey.GetIntegerValue("EstimatedSize") + var sizeBytes int64 + if errSize == nil { + sizeBytes = int64(sizeVal) * 1024 + } + + // Construct Full Registry Key Path as BundleID for later use + hiveName := "HKLM" + if k.hive == registry.CURRENT_USER { + hiveName = "HKCU" + } + fullRegPath := hiveName + `\` + k.path + `\` + subkeyName + + apps = append(apps, AppInfo{ + Name: displayName, + Path: installLocation, + BundleID: fullRegPath, + UninstallString: uninstallString, + Size: sizeBytes, + }) + appKey.Close() + } + } + + return apps, nil +} + +// GetAppDetails finds all associated files (simplified for Windows) +func GetAppDetails(appPath, bundleID string) (*AppDetails, error) { + // appPath might come from ScanApps which set it to InstallLocation. + // bundleID is used as the Registry Key Path. + + // Re-construct basic info + info := AppInfo{ + Name: filepath.Base(appPath), + Path: appPath, + BundleID: bundleID, + // UninstallString is hard to recover if not passed, but usually we call GetAppDetails after ScanApps which has it. + // For now leave empty, or we'd need to re-query registry if bundleID is a registry path. + Size: 0, + } + + if appPath == "" && bundleID != "" { + // Fallback name if path is empty + parts := strings.Split(bundleID, `\`) + if len(parts) > 0 { + info.Name = parts[len(parts)-1] + } + } + + details := &AppDetails{ + AppInfo: info, + TotalSize: 0, + } + + // 1. Scan File System + if appPath != "" { + var size int64 + filepath.WalkDir(appPath, func(_ string, d os.DirEntry, err error) error { + if err == nil && !d.IsDir() { + i, _ := d.Info() + size += i.Size() + } + return nil + }) + + details.AppInfo.Size = size + details.TotalSize = size + + // Add the main folder as associated data + details.Associated = append(details.Associated, AssociatedFile{ + Path: appPath, + Type: "data", + Size: size, + }) + } + + // 2. Add Registry Key (Uninstall Entry) + if bundleID != "" && (strings.HasPrefix(bundleID, "HKLM") || strings.HasPrefix(bundleID, "HKCU")) { + // We treat the registry key as a "file" with special type and 0 size + details.Associated = append(details.Associated, AssociatedFile{ + Path: "REG:" + bundleID, + Type: "registry", // New type + Size: 0, // Registry entries are negligible in size + }) + } + + return details, nil +} + +// DeleteFiles removes the requested paths +func DeleteFiles(paths []string) error { + for _, p := range paths { + if p == "" { + continue + } + + // Registry Deletion + if strings.HasPrefix(p, "REG:") { + regPath := strings.TrimPrefix(p, "REG:") + deleteRegistryKey(regPath) + continue + } + + // Safety checks + if p == "C:\\" || p == "c:\\" || + p == "C:\\Windows" || strings.HasPrefix(strings.ToLower(p), "c:\\windows") { + continue + } + + err := os.RemoveAll(p) + if err != nil { + // Log error but continue? Or return? + // return err + // On Windows file locking is common, best effort + } + } + return nil +} + +func deleteRegistryKey(fullPath string) error { + var hive registry.Key + var subPath string + + if strings.HasPrefix(fullPath, "HKLM\\") { + hive = registry.LOCAL_MACHINE + subPath = strings.TrimPrefix(fullPath, "HKLM\\") + } else if strings.HasPrefix(fullPath, "HKCU\\") { + hive = registry.CURRENT_USER + subPath = strings.TrimPrefix(fullPath, "HKCU\\") + } else { + return nil + } + + // Provide parent key and subkey name to DeleteKey + // path: Software\...\Uninstall\AppGUID + lastSlash := strings.LastIndex(subPath, `\`) + if lastSlash == -1 { + return nil + } + parentPath := subPath[:lastSlash] + keyName := subPath[lastSlash+1:] + + k, err := registry.OpenKey(hive, parentPath, registry.WRITE) + if err != nil { + return err + } + defer k.Close() + + return registry.DeleteKey(k, keyName) +} + +// RunUninstaller executes the uninstall command +func RunUninstaller(cmdString string) error { + fmt.Printf("RunUninstaller Called with: %s\n", cmdString) + cmd := exec.Command("cmd", "/C", cmdString) + cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: false} // Show window so user can click next + err := cmd.Start() + if err != nil { + fmt.Printf("RunUninstaller Error: %v\n", err) + return err + } + fmt.Printf("RunUninstaller Started Successfully\n") + return nil +} diff --git a/backend/internal/platform/platform_common.go b/backend/internal/platform/platform_common.go new file mode 100644 index 0000000..ac44397 --- /dev/null +++ b/backend/internal/platform/platform_common.go @@ -0,0 +1,8 @@ +package platform + +type SystemInfo struct { + Model string `json:"model"` + Chip string `json:"chip"` + Memory string `json:"memory"` + OS string `json:"os"` +} diff --git a/backend/internal/platform/platform_darwin.go b/backend/internal/platform/platform_darwin.go new file mode 100644 index 0000000..ab1982d --- /dev/null +++ b/backend/internal/platform/platform_darwin.go @@ -0,0 +1,114 @@ +//go:build darwin + +package platform + +import ( + "encoding/json" + "fmt" + "os" + "os/exec" + "path/filepath" +) + +func OpenSettings() error { + return exec.Command("open", "x-apple.systempreferences:com.apple.settings.Storage").Run() +} + +func GetSystemInfo() (*SystemInfo, error) { + // Structs for parsing system_profiler JSON + type HardwareItem struct { + MachineName string `json:"machine_name"` + ChipType string `json:"chip_type"` + PhysicalMemory string `json:"physical_memory"` + } + + type SoftwareItem struct { + OSVersion string `json:"os_version"` + } + + type SystemProfile struct { + Hardware []HardwareItem `json:"SPHardwareDataType"` + Software []SoftwareItem `json:"SPSoftwareDataType"` + } + + cmd := exec.Command("system_profiler", "SPHardwareDataType", "SPSoftwareDataType", "-json") + output, err := cmd.Output() + if err != nil { + return nil, err + } + + var profile SystemProfile + if err := json.Unmarshal(output, &profile); err != nil { + return nil, err + } + + info := &SystemInfo{ + Model: "Unknown", + Chip: "Unknown", + Memory: "Unknown", + OS: "Unknown", + } + + if len(profile.Hardware) > 0 { + info.Model = profile.Hardware[0].MachineName + info.Chip = profile.Hardware[0].ChipType + info.Memory = profile.Hardware[0].PhysicalMemory + } + if len(profile.Software) > 0 { + info.OS = profile.Software[0].OSVersion + } + return info, nil +} + +func EmptyTrash() error { + home, err := os.UserHomeDir() + if err != nil { + return err + } + trashPath := filepath.Join(home, ".Trash") + + entries, err := os.ReadDir(trashPath) + if err != nil { + return err + } + + for _, entry := range entries { + itemPath := filepath.Join(trashPath, entry.Name()) + os.RemoveAll(itemPath) + } + return nil +} + +func GetCachePath() (string, error) { + home, err := os.UserHomeDir() + if err != nil { + return "", err + } + return filepath.Join(home, "Library", "Caches"), nil +} + +func GetDockerPath() (string, error) { + dockerPath, err := exec.LookPath("docker") + if err != nil { + // Try common locations + commonPaths := []string{ + "/usr/local/bin/docker", + "/opt/homebrew/bin/docker", + "/Applications/Docker.app/Contents/Resources/bin/docker", + } + for _, p := range commonPaths { + if _, e := os.Stat(p); e == nil { + dockerPath = p + return dockerPath, nil + } + } + } + if dockerPath != "" { + return dockerPath, nil + } + return "", fmt.Errorf("docker not found") +} + +func OpenBrowser(url string) error { + return exec.Command("open", url).Start() +} diff --git a/backend/internal/platform/platform_windows.go b/backend/internal/platform/platform_windows.go new file mode 100644 index 0000000..3694b98 --- /dev/null +++ b/backend/internal/platform/platform_windows.go @@ -0,0 +1,106 @@ +//go:build windows + +package platform + +import ( + "fmt" + "os" + "os/exec" + "path/filepath" + "strings" +) + +func OpenSettings() error { + // Open Windows Settings -> Storage + // ms-settings:storagesense + return exec.Command("cmd", "/c", "start", "ms-settings:storagesense").Run() +} + +func GetSystemInfo() (*SystemInfo, error) { + // Use systeminfo or wmic + // simpler: generic info + + info := &SystemInfo{ + Model: "PC", + Chip: "Unknown", + Memory: "Unknown", + OS: "Windows", + } + + // Helper to run powershell and get string result + runPS := func(cmd string) string { + out, err := exec.Command("powershell", "-NoProfile", "-Command", cmd).Output() + if err != nil { + return "" + } + return strings.TrimSpace(string(out)) + } + + // 1. Get OS Name (Simplified) + // Get-CimInstance Win32_OperatingSystem | Select-Object -ExpandProperty Caption + osName := runPS("(Get-CimInstance Win32_OperatingSystem).Caption") + if osName != "" { + info.OS = strings.TrimPrefix(osName, "Microsoft ") + } + + // 2. Get Memory (in GB) + // [math]::Round((Get-CimInstance Win32_ComputerSystem).TotalPhysicalMemory / 1GB) + mem := runPS("[math]::Round((Get-CimInstance Win32_ComputerSystem).TotalPhysicalMemory / 1GB)") + if mem != "" { + info.Memory = mem + " GB" + } + + // 3. Get CPU Name + // (Get-CimInstance Win32_Processor).Name + cpu := runPS("(Get-CimInstance Win32_Processor).Name") + if cpu != "" { + // Cleanup CPU string (remove extra spaces) + info.Chip = strings.Join(strings.Fields(cpu), " ") + } + + return info, nil +} + +func EmptyTrash() error { + // PowerShell to empty Recycle Bin + // Clear-RecycleBin -Force -ErrorAction SilentlyContinue + + // PowerShell to empty Recycle Bin + // Clear-RecycleBin -Force -ErrorAction SilentlyContinue + // We use ExecutionPolicy Bypass to avoid permission issues. + // We also catch errors to prevent 500s on empty bins. + + cmd := exec.Command("powershell", "-NoProfile", "-ExecutionPolicy", "Bypass", "-Command", "Clear-RecycleBin -Force -ErrorAction SilentlyContinue") + // If it returns an error, it might be due to permissions or being already empty. + // We can ignore the error for now to check if that fixes the User's 500. + err := cmd.Run() + if err != nil { + // Log it but return nil effectively? + // For now, let's return nil because 'Empty Trash' is best-effort. + // If the user really has a permission issue, it acts as a no-op which is better than a crash. + fmt.Printf("EmptyTrash warning: %v\n", err) + return nil + } + return nil +} + +func GetCachePath() (string, error) { + home, err := os.UserHomeDir() + if err != nil { + return "", err + } + return filepath.Join(home, "AppData", "Local", "Temp"), nil +} + +func GetDockerPath() (string, error) { + path, err := exec.LookPath("docker") + if err == nil { + return path, nil + } + // Common Windows path? + return "", fmt.Errorf("docker not found") +} + +func OpenBrowser(url string) error { + return exec.Command("rundll32", "url.dll,FileProtocolHandler", url).Start() +} diff --git a/backend/internal/scanner/scanner_common.go b/backend/internal/scanner/scanner_common.go new file mode 100644 index 0000000..6132b89 --- /dev/null +++ b/backend/internal/scanner/scanner_common.go @@ -0,0 +1,92 @@ +package scanner + +import ( + "os" + "path/filepath" + "sort" + "strings" +) + +type ScanResult struct { + Path string `json:"path"` + Size int64 `json:"size"` + IsDirectory bool `json:"isDirectory"` +} + +type DiskUsage struct { + Name string `json:"name"` // e.g. "Local Disk (C:)" + TotalGB string `json:"totalGB"` + UsedGB string `json:"usedGB"` + FreeGB string `json:"freeGB"` +} + +type CategorySizes struct { + Documents int64 `json:"documents"` // Personal Docs only + Downloads int64 `json:"downloads"` + Desktop int64 `json:"desktop"` + Music int64 `json:"music"` + Movies int64 `json:"movies"` + System int64 `json:"system"` + Trash int64 `json:"trash"` + Apps int64 `json:"apps"` + Photos int64 `json:"photos"` + ICloud int64 `json:"icloud"` // Or OneDrive on Windows? + Archives int64 `json:"archives"` + VirtualMachines int64 `json:"virtual_machines"` + Games int64 `json:"games"` + AI int64 `json:"ai"` + Docker int64 `json:"docker"` + Cache int64 `json:"cache"` +} + +type CleaningEstimates struct { + FlashEst int64 `json:"flash_est"` + DeepEst int64 `json:"deep_est"` +} + +// FindLargeFiles walks a directory and returns files > threshold +func FindLargeFiles(root string, threshold int64) ([]ScanResult, error) { + var results []ScanResult + + err := filepath.WalkDir(root, func(path string, d os.DirEntry, err error) error { + if err != nil { + return nil // Skip errors + } + + // Skip hidden files/dirs (except .Trash maybe, but let's skip all . for now) + if strings.HasPrefix(d.Name(), ".") { + if d.IsDir() { + return filepath.SkipDir + } + return nil + } + + // Skip node_modules explicitly + if d.IsDir() && d.Name() == "node_modules" { + return filepath.SkipDir + } + + if !d.IsDir() { + info, err := d.Info() + if err == nil && info.Size() > threshold { + results = append(results, ScanResult{ + Path: path, + Size: info.Size(), + IsDirectory: false, + }) + } + } + return nil + }) + + // Sort by size desc + sort.Slice(results, func(i, j int) bool { + return results[i].Size > results[j].Size + }) + + // Return top 50 + if len(results) > 50 { + return results[:50], err + } + return results, err +} diff --git a/backend/internal/scanner/scanner.go b/backend/internal/scanner/scanner_darwin.go similarity index 82% rename from backend/internal/scanner/scanner.go rename to backend/internal/scanner/scanner_darwin.go index d2b5155..fbbc4da 100644 --- a/backend/internal/scanner/scanner.go +++ b/backend/internal/scanner/scanner_darwin.go @@ -1,3 +1,5 @@ +//go:build darwin + package scanner import ( @@ -10,33 +12,10 @@ import ( "strings" ) -type ScanResult struct { - Path string `json:"path"` - Size int64 `json:"size"` - IsDirectory bool `json:"isDirectory"` -} - -type DiskUsage struct { - TotalGB string `json:"totalGB"` - UsedGB string `json:"usedGB"` - FreeGB string `json:"freeGB"` -} - -type CategorySizes struct { - Documents int64 `json:"documents"` // Personal Docs only - Downloads int64 `json:"downloads"` - Desktop int64 `json:"desktop"` - Music int64 `json:"music"` - Movies int64 `json:"movies"` - System int64 `json:"system"` - Trash int64 `json:"trash"` - Apps int64 `json:"apps"` - Photos int64 `json:"photos"` - ICloud int64 `json:"icloud"` -} +// Structs moved to scanner_common.go // GetDiskUsage uses diskutil for accurate APFS disk usage -func GetDiskUsage() (*DiskUsage, error) { +func GetDiskUsage() ([]*DiskUsage, error) { cmd := exec.Command("diskutil", "info", "/") out, err := cmd.Output() if err != nil { @@ -80,59 +59,15 @@ func GetDiskUsage() (*DiskUsage, error) { return fmt.Sprintf("%.2f", gb) } - return &DiskUsage{ + return []*DiskUsage{{ + Name: "Macintosh HD", TotalGB: toGB(containerTotal), UsedGB: toGB(containerUsed), FreeGB: toGB(containerFree), - }, nil + }}, nil } -// FindLargeFiles walks a directory and returns files > threshold -func FindLargeFiles(root string, threshold int64) ([]ScanResult, error) { - var results []ScanResult - - err := filepath.WalkDir(root, func(path string, d os.DirEntry, err error) error { - if err != nil { - return nil // Skip errors - } - - // Skip hidden files/dirs (except .Trash maybe, but let's skip all . for now) - if strings.HasPrefix(d.Name(), ".") { - if d.IsDir() { - return filepath.SkipDir - } - return nil - } - - // Skip node_modules explicitly - if d.IsDir() && d.Name() == "node_modules" { - return filepath.SkipDir - } - - if !d.IsDir() { - info, err := d.Info() - if err == nil && info.Size() > threshold { - results = append(results, ScanResult{ - Path: path, - Size: info.Size(), - IsDirectory: false, - }) - } - } - return nil - }) - - // Sort by size desc - sort.Slice(results, func(i, j int) bool { - return results[i].Size > results[j].Size - }) - - // Return top 50 - if len(results) > 50 { - return results[:50], err - } - return results, err -} +// FindLargeFiles moved to scanner_common.go // FindHeavyFolders uses `du` to find large directories func FindHeavyFolders(root string) ([]ScanResult, error) { @@ -384,10 +319,7 @@ func GetCategorySizes() (*CategorySizes, error) { return sizes, nil } -type CleaningEstimates struct { - FlashEst int64 `json:"flash_est"` - DeepEst int64 `json:"deep_est"` -} +// CleaningEstimates struct moved to scanner_common.go func GetCleaningEstimates() (*CleaningEstimates, error) { home, err := os.UserHomeDir() diff --git a/backend/internal/scanner/scanner_windows.go b/backend/internal/scanner/scanner_windows.go new file mode 100644 index 0000000..87c7900 --- /dev/null +++ b/backend/internal/scanner/scanner_windows.go @@ -0,0 +1,435 @@ +//go:build windows + +package scanner + +import ( + "fmt" + "os" + "path/filepath" + "sort" + "strings" + "sync" + "syscall" + "unsafe" + // Added missing import +) + +// GetDiskUsage using GetDiskFreeSpaceExW +// GetDiskUsage returns usage for all fixed drives +func GetDiskUsage() ([]*DiskUsage, error) { + kernel32 := syscall.NewLazyDLL("kernel32.dll") + getDiskFreeSpaceEx := kernel32.NewProc("GetDiskFreeSpaceExW") + getLogicalDrives := kernel32.NewProc("GetLogicalDrives") + + var usages []*DiskUsage + + // Get logical drives bitmask + ret, _, _ := getLogicalDrives.Call() + if ret == 0 { + return nil, fmt.Errorf("GetLogicalDrives failed") + } + drivesBitmask := uint32(ret) + + toGB := func(bytes int64) string { + gb := float64(bytes) / 1024 / 1024 / 1024 + return fmt.Sprintf("%.2f", gb) + } + + for i := 0; i < 26; i++ { + if drivesBitmask&(1< 0 { + usedBytes := totalNumberOfBytes - totalNumberOfFreeBytes + usages = append(usages, &DiskUsage{ + Name: fmt.Sprintf("Local Disk (%s:)", driveLetter), + TotalGB: toGB(totalNumberOfBytes), + UsedGB: toGB(usedBytes), + FreeGB: toGB(totalNumberOfFreeBytes), + }) + } + } + } + + return usages, nil +} + +// GetDirectorySize walks the directory to calculate size (Windows doesn't have `du`) +func GetDirectorySize(path string) int64 { + var size int64 + filepath.WalkDir(path, func(_ string, d os.DirEntry, err error) error { + if err != nil { + return nil + } + if !d.IsDir() { + info, err := d.Info() + if err == nil { + size += info.Size() + } + } + return nil + }) + return size +} + +// FindHeavyFolders finds large directories +func FindHeavyFolders(root string) ([]ScanResult, error) { + // Basic implementation: Walk max 2 levels deep and calculate sizes + var results []ScanResult + + // depth 0 = root + // depth 1 = children of root + // depth 2 = children of children + + entries, err := os.ReadDir(root) + if err != nil { + return nil, err + } + + var wg sync.WaitGroup + var mu sync.Mutex + + for _, entry := range entries { + if entry.IsDir() { + path := filepath.Join(root, entry.Name()) + wg.Add(1) + go func(p string) { + defer wg.Done() + s := GetDirectorySize(p) + mu.Lock() + results = append(results, ScanResult{ + Path: p, + Size: s, + IsDirectory: true, + }) + mu.Unlock() + }(path) + } + } + wg.Wait() + + // Sort by size desc + sort.Slice(results, func(i, j int) bool { + return results[i].Size > results[j].Size + }) + + if len(results) > 50 { + return results[:50], nil + } + return results, nil +} + +func ScanUserDocuments() ([]ScanResult, error) { + home, err := os.UserHomeDir() + if err != nil { + return nil, err + } + + targets := []string{ + filepath.Join(home, "Documents"), + filepath.Join(home, "Downloads"), + filepath.Join(home, "Desktop"), + } + + var allResults []ScanResult + for _, t := range targets { + res, _ := FindLargeFiles(t, 10*1024*1024) // 10MB + allResults = append(allResults, res...) + } + + sort.Slice(allResults, func(i, j int) bool { + return allResults[i].Size > allResults[j].Size + }) + + if len(allResults) > 50 { + return allResults[:50], nil + } + return allResults, nil +} + +func ScanSystemData() ([]ScanResult, error) { + home, err := os.UserHomeDir() + if err != nil { + return nil, err + } + + // Windows System/Temp locations + // %Temp%, Prefetch (admin only, careful), AppData/Local/Temp + targets := []string{ + filepath.Join(home, "AppData", "Local", "Temp"), + os.Getenv("TEMP"), + // "C:\\Windows\\Temp", // Requires Admin, maybe skip for now or handle error + } + + var allResults []ScanResult + for _, t := range targets { + if t == "" { + continue + } + res, _ := FindLargeFiles(t, 10*1024*1024) + allResults = append(allResults, res...) + } + + sort.Slice(allResults, func(i, j int) bool { + return allResults[i].Size > allResults[j].Size + }) + + if len(allResults) > 50 { + return allResults[:50], nil + } + return allResults, nil +} + +func GetCategorySizes() (*CategorySizes, error) { + home, err := os.UserHomeDir() + if err != nil { + return nil, err + } + + docPath := filepath.Join(home, "Documents") + downPath := filepath.Join(home, "Downloads") + deskPath := filepath.Join(home, "Desktop") + musicPath := filepath.Join(home, "Music") + moviesPath := filepath.Join(home, "Videos") // Windows uses Videos + photos := filepath.Join(home, "Pictures") + + // AppData is roughly Library + localAppData := filepath.Join(home, "AppData", "Local") + temp := filepath.Join(localAppData, "Temp") + + // Parallel fetch + type result struct { + name string + size int64 + } + c := make(chan result) + // Checks: docs, down, desk, music, movies, temp, photos, archives, vms, games, ai, docker, cache + totalChecks := 13 + + check := func(name, p string) { + c <- result{name, GetDirectorySize(p)} + } + + go check("docs", docPath) + go check("down", downPath) + go check("desk", deskPath) + go check("music", musicPath) + go check("movies", moviesPath) + // Temp is part of Cache now, but let's keep it separate or sum it up + // System/Temp logic from before: + go check("temp", temp) + go check("photos", photos) + + // Scan specific common folders for Archives and VMs + go func() { + // Archives: Zip, Rar, 7z in Downloads and Documents + size := ScanExtensions(downPath, []string{".zip", ".rar", ".7z", ".tar", ".gz", ".xz"}) + size += ScanExtensions(docPath, []string{".zip", ".rar", ".7z", ".tar", ".gz", ".xz"}) + c <- result{"archives", size} + }() + + go func() { + // VMs / Disk Images: ISO, VHDX, VMDK in Downloads and Documents + size := ScanExtensions(downPath, []string{".iso", ".vdi", ".vmdk", ".qcow2", ".vhdx", ".img", ".dsk"}) + size += ScanExtensions(docPath, []string{".iso", ".vdi", ".vmdk", ".qcow2", ".vhdx", ".img", ".dsk"}) + c <- result{"vms", size} + }() + + // Games + go func() { + var size int64 + // Common Game Paths + paths := []string{ + `C:\Program Files (x86)\Steam\steamapps\common`, + `C:\Program Files\Epic Games`, + `C:\Program Files (x86)\Ubisoft\Ubisoft Game Launcher\games`, + `C:\Program Files\EA Games`, + filepath.Join(home, "AppData", "Roaming", ".minecraft"), + } + for _, p := range paths { + size += GetDirectorySize(p) + } + c <- result{"games", size} + }() + + // AI + go func() { + var size int64 + // 1. Common Installation Paths + paths := []string{ + `C:\ComfyUI`, + `C:\ai\ComfyUI`, + filepath.Join(home, "ComfyUI"), + filepath.Join(home, "stable-diffusion-webui"), + filepath.Join(home, "webui"), + // Common Model Caches + filepath.Join(home, ".cache", "huggingface"), + filepath.Join(home, ".ollama", "models"), + filepath.Join(home, ".lmstudio", "models"), + } + for _, p := range paths { + size += GetDirectorySize(p) + } + + // 2. Loose Model Files (Deep Scan) + // Look for .safetensors, .ckpt, .gguf, .pt, .pth, .bin, .onnx in Downloads and Documents + aiExtensions := []string{".safetensors", ".ckpt", ".gguf", ".pt", ".pth", ".bin", ".onnx"} + size += ScanExtensions(downPath, aiExtensions) + size += ScanExtensions(docPath, aiExtensions) + + c <- result{"ai", size} + }() + + // Docker + go func() { + var size int64 + // Docker Desktop Default WSL Data + dockerPath := filepath.Join(localAppData, "Docker", "wsl", "data", "ext4.vhdx") + info, err := os.Stat(dockerPath) + if err == nil { + size = info.Size() + } + c <- result{"docker", size} + }() + + // Cache (Browser + System Temp) + go func() { + var size int64 + // System Temp + size += GetDirectorySize(os.Getenv("TEMP")) + + // Chrome Cache + size += GetDirectorySize(filepath.Join(localAppData, "Google", "Chrome", "User Data", "Default", "Cache")) + // Edge Cache + size += GetDirectorySize(filepath.Join(localAppData, "Microsoft", "Edge", "User Data", "Default", "Cache")) + // Brave Cache + size += GetDirectorySize(filepath.Join(localAppData, "BraveSoftware", "Brave-Browser", "User Data", "Default", "Cache")) + // Opera Cache + size += GetDirectorySize(filepath.Join(localAppData, "Opera Software", "Opera Stable", "Cache")) + // Firefox Cache + size += GetDirectorySize(filepath.Join(localAppData, "Mozilla", "Firefox", "Profiles")) // Scan all profiles for cache? Usually in Local/Mozilla/Firefox/Profiles//cache2 + + // Firefox requires walking profiles in LocalAppData + mozPath := filepath.Join(localAppData, "Mozilla", "Firefox", "Profiles") + entries, _ := os.ReadDir(mozPath) + for _, e := range entries { + if e.IsDir() { + size += GetDirectorySize(filepath.Join(mozPath, e.Name(), "cache2")) + } + } + + c <- result{"cache", size} + }() + + sizes := &CategorySizes{} + + for i := 0; i < totalChecks; i++ { + res := <-c + switch res.name { + case "docs": + sizes.Documents = res.size + case "down": + sizes.Downloads = res.size + case "desk": + sizes.Desktop = res.size + case "music": + sizes.Music = res.size + case "movies": + sizes.Movies = res.size + case "temp": + // Keeping legacy System field for now, maybe map to part of Cache or System logs? + sizes.System = res.size + case "photos": + sizes.Photos = res.size + case "archives": + sizes.Archives = res.size + case "vms": + sizes.VirtualMachines = res.size + case "games": + sizes.Games = res.size + case "ai": + sizes.AI = res.size + case "docker": + sizes.Docker = res.size + case "cache": + sizes.Cache = res.size + } + } + + return sizes, nil +} + +// ScanExtensions walks a directory and sums up size of files with matching extensions +func ScanExtensions(root string, exts []string) int64 { + var total int64 + extMap := make(map[string]bool) + for _, e := range exts { + extMap[strings.ToLower(e)] = true + } + + filepath.WalkDir(root, func(_ string, d os.DirEntry, err error) error { + if err != nil { + return nil + } + if !d.IsDir() { + ext := strings.ToLower(filepath.Ext(d.Name())) + if extMap[ext] { + info, err := d.Info() + if err == nil { + total += info.Size() + } + } + } + return nil + }) + return total +} + +func GetCleaningEstimates() (*CleaningEstimates, error) { + home, err := os.UserHomeDir() + if err != nil { + return nil, err + } + + // Flash Clean: Temp files + temp := filepath.Join(home, "AppData", "Local", "Temp") + + // Deep Clean: Downloads + downloads := filepath.Join(home, "Downloads") + + type result struct { + name string + size int64 + } + c := make(chan result) + + go func() { c <- result{"temp", GetDirectorySize(temp)} }() + go func() { c <- result{"downloads", GetDirectorySize(downloads)} }() + + estimates := &CleaningEstimates{} + + for i := 0; i < 2; i++ { + res := <-c + switch res.name { + case "temp": + estimates.FlashEst = res.size + case "downloads": + estimates.DeepEst = res.size + } + } + return estimates, nil +} diff --git a/backend/internal/scanner/targets_darwin.go b/backend/internal/scanner/targets_darwin.go new file mode 100644 index 0000000..8dce6ae --- /dev/null +++ b/backend/internal/scanner/targets_darwin.go @@ -0,0 +1,38 @@ +//go:build darwin + +package scanner + +import ( + "os" + "path/filepath" +) + +func GetScanTargets(category string) []string { + home, _ := os.UserHomeDir() + switch category { + case "apps": + return []string{"/Applications", filepath.Join(home, "Applications")} + case "photos": + return []string{filepath.Join(home, "Pictures")} + case "icloud": + return []string{filepath.Join(home, "Library", "Mobile Documents")} + case "docs": + return []string{filepath.Join(home, "Documents")} + case "downloads": + return []string{filepath.Join(home, "Downloads")} + case "desktop": + return []string{filepath.Join(home, "Desktop")} + case "music": + return []string{filepath.Join(home, "Music")} + case "movies": + return []string{filepath.Join(home, "Movies")} + case "system": + return []string{ + filepath.Join(home, "Library", "Caches"), + filepath.Join(home, "Library", "Logs"), + filepath.Join(home, "Library", "Developer", "Xcode", "DerivedData"), + } + default: + return []string{} + } +} diff --git a/backend/internal/scanner/targets_windows.go b/backend/internal/scanner/targets_windows.go new file mode 100644 index 0000000..9b75b0f --- /dev/null +++ b/backend/internal/scanner/targets_windows.go @@ -0,0 +1,90 @@ +package scanner + +import ( + "os" + "path/filepath" +) + +func GetScanTargets(category string) []string { + home, _ := os.UserHomeDir() + switch category { + case "apps": + // Windows apps are dispersed (Program Files), usually read-only. We don't file-scan them usually. + return []string{ + os.Getenv("ProgramFiles"), + os.Getenv("ProgramFiles(x86)"), + filepath.Join(os.Getenv("LocalAppData"), "Programs"), + } + case "photos": + return []string{filepath.Join(home, "Pictures")} + case "icloud": + // iCloudDrive? + return []string{filepath.Join(home, "iCloudDrive")} + case "docs": + return []string{filepath.Join(home, "Documents")} + case "downloads": + return []string{filepath.Join(home, "Downloads")} + case "desktop": + return []string{filepath.Join(home, "Desktop")} + case "music": + return []string{filepath.Join(home, "Music")} + case "movies": + return []string{filepath.Join(home, "Videos")} + case "system": + return []string{ + filepath.Join(home, "AppData", "Local", "Temp"), + filepath.Join(home, "AppData", "Local", "Microsoft", "Windows", "INetCache"), // IE/Edge cache + filepath.Join(home, "AppData", "Local", "Google", "Chrome", "User Data", "Default", "Cache"), + filepath.Join(home, "AppData", "Local", "Mozilla", "Firefox", "Profiles"), + filepath.Join(home, "AppData", "Local", "BraveSoftware", "Brave-Browser", "User Data", "Default", "Cache"), + filepath.Join(home, "AppData", "Local", "Opera Software", "Opera Stable", "Cache"), + } + case "cache": + return []string{ + os.Getenv("TEMP"), + filepath.Join(home, "AppData", "Local", "Temp"), + filepath.Join(home, "AppData", "Local", "Microsoft", "Windows", "INetCache"), + filepath.Join(home, "AppData", "Local", "Google", "Chrome", "User Data", "Default", "Cache"), + filepath.Join(home, "AppData", "Local", "Mozilla", "Firefox", "Profiles"), + filepath.Join(home, "AppData", "Local", "BraveSoftware", "Brave-Browser", "User Data", "Default", "Cache"), + filepath.Join(home, "AppData", "Local", "Opera Software", "Opera Stable", "Cache"), + } + case "games": + return []string{ + `C:\Program Files (x86)\Steam\steamapps\common`, + `C:\Program Files\Epic Games`, + `C:\Program Files (x86)\Ubisoft\Ubisoft Game Launcher\games`, + `C:\Program Files\EA Games`, + filepath.Join(home, "AppData", "Roaming", ".minecraft"), + } + case "ai": + return []string{ + `C:\ComfyUI`, + `C:\ai\ComfyUI`, + filepath.Join(home, "ComfyUI"), + filepath.Join(home, "stable-diffusion-webui"), + filepath.Join(home, "webui"), + filepath.Join(home, ".cache", "huggingface"), + filepath.Join(home, ".ollama", "models"), + filepath.Join(home, ".lmstudio", "models"), + } + case "docker": + return []string{ + filepath.Join(os.Getenv("LocalAppData"), "Docker", "wsl", "data"), + } + case "archives": + // Archives usually scattered, but main ones in Downloads + return []string{ + filepath.Join(home, "Downloads"), + filepath.Join(home, "Documents"), + } + case "vms": + return []string{ + filepath.Join(home, "Downloads"), + filepath.Join(home, "Documents"), + filepath.Join(home, "VirtualBox VMs"), + } + default: + return []string{} + } +} diff --git a/backend/main.go b/backend/main.go index a799f53..f26488c 100644 --- a/backend/main.go +++ b/backend/main.go @@ -1,8 +1,11 @@ package main import ( + "embed" "encoding/json" "fmt" + "io" + "io/fs" "net/http" "os" "os/exec" @@ -11,9 +14,13 @@ import ( "github.com/kv/clearnup/backend/internal/apps" "github.com/kv/clearnup/backend/internal/cleaner" + "github.com/kv/clearnup/backend/internal/platform" "github.com/kv/clearnup/backend/internal/scanner" ) +//go:embed all:dist +var distFS embed.FS + const Port = ":36969" func enableCors(w *http.ResponseWriter) { @@ -41,8 +48,52 @@ func main() { http.HandleFunc("/api/apps", handleScanApps) http.HandleFunc("/api/apps/details", handleAppDetails) http.HandleFunc("/api/apps/action", handleAppAction) + http.HandleFunc("/api/apps/uninstall", handleAppUninstall) + + // Static File Serving (SPA Support) + // Check if we are running with embedded files or local dist + // Priority: Embedded (Production) -> Local dist (Dev/Preview) + + // Try to get a sub-fs for "dist" from the embedded FS + distRoot, err := fs.Sub(distFS, "dist") + if err == nil { + fmt.Println("📂 Serving embedded static files") + // Check if it's actually populated (sanity check) + if _, err := distRoot.Open("index.html"); err == nil { + fsrv := http.FileServer(http.FS(distRoot)) + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + if filepath.Ext(r.URL.Path) == "" { + // Read index.html from embedded + index, _ := distRoot.Open("index.html") + stat, _ := index.Stat() + http.ServeContent(w, r, "index.html", stat.ModTime(), index.(io.ReadSeeker)) + return + } + fsrv.ServeHTTP(w, r) + }) + } else { + // Fallback to local ./dist if embedded is empty (e.g. dev mode without build) + if _, err := os.Stat("dist"); err == nil { + fmt.Println("📂 Serving static files from local ./dist") + fs := http.FileServer(http.Dir("dist")) + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + if filepath.Ext(r.URL.Path) == "" { + http.ServeFile(w, r, "dist/index.html") + return + } + fs.ServeHTTP(w, r) + }) + } + } + } fmt.Printf("🚀 Antigravity Backend running on http://localhost%s\n", Port) + + // Open Browser if not in development mode + if os.Getenv("APP_ENV") != "development" { + go platform.OpenBrowser("http://localhost" + Port) + } + if err := http.ListenAndServe(Port, nil); err != nil { fmt.Printf("Server failed: %s\n", err) } @@ -64,38 +115,17 @@ func handleScanCategory(w http.ResponseWriter, r *http.Request) { return } - home, _ := os.UserHomeDir() - var targets []string - - switch req.Category { - case "apps": - targets = []string{"/Applications", filepath.Join(home, "Applications")} - case "photos": - targets = []string{filepath.Join(home, "Pictures")} - case "icloud": - targets = []string{filepath.Join(home, "Library", "Mobile Documents")} - case "docs": - targets = []string{filepath.Join(home, "Documents")} - case "downloads": - targets = []string{filepath.Join(home, "Downloads")} - case "desktop": - targets = []string{filepath.Join(home, "Desktop")} - case "music": - targets = []string{filepath.Join(home, "Music")} - case "movies": - targets = []string{filepath.Join(home, "Movies")} - case "system": - targets = []string{filepath.Join(home, "Library", "Caches"), filepath.Join(home, "Library", "Logs"), filepath.Join(home, "Library", "Developer", "Xcode", "DerivedData")} - default: + targets := scanner.GetScanTargets(req.Category) + if len(targets) == 0 { json.NewEncoder(w).Encode([]scanner.ScanResult{}) return } - // Reuse ScanPath logic inline or call a helper - // We'll just do a quick loop here since ScanPath in scanner.go was defined but I need to link it - // Actually I put ScanPath in scanner.go as FindLargeFiles wrapper. var allResults []scanner.ScanResult for _, t := range targets { + if t == "" { + continue + } res, _ := scanner.FindLargeFiles(t, 10*1024*1024) // 10MB allResults = append(allResults, res...) } @@ -117,9 +147,9 @@ func handleOpenSettings(w http.ResponseWriter, r *http.Request) { return } - // Open Storage Settings - // macOS Ventura+: open x-apple.systempreferences:com.apple.settings.Storage - exec.Command("open", "x-apple.systempreferences:com.apple.settings.Storage").Run() + if err := platform.OpenSettings(); err != nil { + fmt.Printf("Failed to open settings: %v\n", err) + } w.WriteHeader(http.StatusOK) } @@ -134,6 +164,7 @@ func handleDiskUsage(w http.ResponseWriter, r *http.Request) { http.Error(w, err.Error(), http.StatusInternalServerError) return } + w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(usage) } @@ -230,26 +261,11 @@ func handleEmptyTrash(w http.ResponseWriter, r *http.Request) { return } - home, err := os.UserHomeDir() - if err != nil { - http.Error(w, "Cannot get home directory", http.StatusInternalServerError) + if err := platform.EmptyTrash(); err != nil { + http.Error(w, fmt.Sprintf("Cannot empty trash: %v", err), http.StatusInternalServerError) return } - trashPath := filepath.Join(home, ".Trash") - - // Get all items in trash and delete them - entries, err := os.ReadDir(trashPath) - if err != nil { - http.Error(w, "Cannot read trash", http.StatusInternalServerError) - return - } - - for _, entry := range entries { - itemPath := filepath.Join(trashPath, entry.Name()) - os.RemoveAll(itemPath) - } - json.NewEncoder(w).Encode(map[string]bool{"success": true}) } @@ -259,13 +275,16 @@ func handleClearCache(w http.ResponseWriter, r *http.Request) { return } - home, _ := os.UserHomeDir() - cachePath := filepath.Join(home, "Library", "Caches") + cachePath, err := platform.GetCachePath() + if err != nil { + http.Error(w, "Cannot get cache path", http.StatusInternalServerError) + return + } // Get size before clearing sizeBefore := scanner.GetDirectorySize(cachePath) - // Clear cache directories (keep the Caches folder itself) + // Clear cache directories (keep the Caches folder itself if possible, or jus remove content) entries, err := os.ReadDir(cachePath) if err != nil { http.Error(w, "Cannot read cache directory", http.StatusInternalServerError) @@ -286,33 +305,17 @@ func handleCleanDocker(w http.ResponseWriter, r *http.Request) { return } - // Try to find docker executable - dockerPath, err := exec.LookPath("docker") + dockerPath, err := platform.GetDockerPath() if err != nil { - // Try common locations - commonPaths := []string{ - "/usr/local/bin/docker", - "/opt/homebrew/bin/docker", - "/Applications/Docker.app/Contents/Resources/bin/docker", - } - for _, p := range commonPaths { - if _, e := os.Stat(p); e == nil { - dockerPath = p - break - } - } - } - - if dockerPath == "" { json.NewEncoder(w).Encode(map[string]interface{}{ "cleared": 0, - "message": "Docker not found in PATH or common locations", + "message": "Docker not found", }) return } - // Run docker system prune -af - cmd := exec.Command(dockerPath, "system", "prune", "-af") + // Run docker system prune -af --volumes to clean images, containers, and volumes + cmd := exec.Command(dockerPath, "system", "prune", "-af", "--volumes") output, err := cmd.CombinedOutput() if err != nil { @@ -335,52 +338,13 @@ func handleSystemInfo(w http.ResponseWriter, r *http.Request) { return } - // Structs for parsing system_profiler JSON - type HardwareItem struct { - MachineName string `json:"machine_name"` - ChipType string `json:"chip_type"` - PhysicalMemory string `json:"physical_memory"` - } - - type SoftwareItem struct { - OSVersion string `json:"os_version"` - } - - type SystemProfile struct { - Hardware []HardwareItem `json:"SPHardwareDataType"` - Software []SoftwareItem `json:"SPSoftwareDataType"` - } - - cmd := exec.Command("system_profiler", "SPHardwareDataType", "SPSoftwareDataType", "-json") - output, err := cmd.Output() + info, err := platform.GetSystemInfo() if err != nil { http.Error(w, "Failed to get system info", http.StatusInternalServerError) return } - var profile SystemProfile - if err := json.Unmarshal(output, &profile); err != nil { - http.Error(w, "Failed to parse system info", http.StatusInternalServerError) - return - } - - response := map[string]string{ - "model": "Unknown", - "chip": "Unknown", - "memory": "Unknown", - "os": "Unknown", - } - - if len(profile.Hardware) > 0 { - response["model"] = profile.Hardware[0].MachineName - response["chip"] = profile.Hardware[0].ChipType - response["memory"] = profile.Hardware[0].PhysicalMemory - } - if len(profile.Software) > 0 { - response["os"] = profile.Software[0].OSVersion - } - - json.NewEncoder(w).Encode(response) + json.NewEncoder(w).Encode(info) } func handleCleaningEstimates(w http.ResponseWriter, r *http.Request) { @@ -413,23 +377,23 @@ func handleScanApps(w http.ResponseWriter, r *http.Request) { json.NewEncoder(w).Encode(appsList) } -type AppDetailsRequest struct { - Path string `json:"path"` -} - func handleAppDetails(w http.ResponseWriter, r *http.Request) { enableCors(&w) if r.Method == "OPTIONS" { return } + type AppDetailsRequest struct { + Path string `json:"path"` + BundleID string `json:"bundleID"` + } var req AppDetailsRequest if err := json.NewDecoder(r.Body).Decode(&req); err != nil { http.Error(w, "Invalid request body", http.StatusBadRequest) return } - details, err := apps.GetAppDetails(req.Path) + details, err := apps.GetAppDetails(req.Path, req.BundleID) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return @@ -437,17 +401,15 @@ func handleAppDetails(w http.ResponseWriter, r *http.Request) { json.NewEncoder(w).Encode(details) } -type AppActionRequest struct { - Files []string `json:"files"` -} - func handleAppAction(w http.ResponseWriter, r *http.Request) { enableCors(&w) if r.Method == "OPTIONS" { return } - var req AppActionRequest + var req struct { + Files []string `json:"files"` + } if err := json.NewDecoder(r.Body).Decode(&req); err != nil { http.Error(w, "Invalid request body", http.StatusBadRequest) return @@ -461,3 +423,26 @@ func handleAppAction(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(map[string]bool{"success": true}) } + +func handleAppUninstall(w http.ResponseWriter, r *http.Request) { + enableCors(&w) + if r.Method == "OPTIONS" { + return + } + + var req struct { + Cmd string `json:"cmd"` + } + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, "Invalid request body", http.StatusBadRequest) + return + } + + if err := apps.RunUninstaller(req.Cmd); err != nil { + http.Error(w, fmt.Sprintf("Failed to launch uninstaller: %s", err), http.StatusInternalServerError) + return + } + + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(map[string]bool{"success": true}) +} diff --git a/backend/verify_output.txt b/backend/verify_output.txt new file mode 100644 index 0000000..44873bd Binary files /dev/null and b/backend/verify_output.txt differ diff --git a/backend/verify_windows.ps1 b/backend/verify_windows.ps1 new file mode 100644 index 0000000..86dc619 --- /dev/null +++ b/backend/verify_windows.ps1 @@ -0,0 +1,25 @@ +$p = Start-Process -FilePath ".\kv-cleanup.exe" -PassThru -NoNewWindow +Start-Sleep -Seconds 3 + +try { + Write-Host "`n=== Disk Usage ===" + $disk = Invoke-RestMethod -Uri "http://localhost:36969/api/disk-usage" + Write-Host "Total: $($disk.totalGB) GB, Free: $($disk.freeGB) GB" + + Write-Host "`n=== System Info ===" + $sys = Invoke-RestMethod -Uri "http://localhost:36969/api/system-info" + Write-Host "OS: $($sys.os)" + Write-Host "Memory: $($sys.memory)" + + Write-Host "`n=== Apps (First 3) ===" + $apps = Invoke-RestMethod -Uri "http://localhost:36969/api/apps" + $apps | Select-Object -First 3 | Format-Table Name, Path + + Write-Host "`n=== Scan Downloads ===" + $scan = Invoke-RestMethod -Uri "http://localhost:36969/api/scan/category" -Method Post -Body '{"category": "downloads"}' -ContentType "application/json" + $scan | Select-Object -First 3 | Format-Table Path, Size +} catch { + Write-Host "Error: $_" +} finally { + Stop-Process -Id $p.Id -Force +} diff --git a/build-release.ps1 b/build-release.ps1 new file mode 100644 index 0000000..b9ff84a --- /dev/null +++ b/build-release.ps1 @@ -0,0 +1,62 @@ +# build-release.ps1 +# Builds a portable SINGLE-FILE release for Windows and Mac + +Write-Host "Starting Portable Release Build..." -ForegroundColor Cyan + +# 1. Clean previous build +if (Test-Path "Release") { Remove-Item "Release" -Recurse -Force } +if (Test-Path "backend\dist") { Remove-Item "backend\dist" -Recurse -Force } +New-Item -ItemType Directory -Force -Path "Release" | Out-Null +New-Item -ItemType Directory -Force -Path "Release\Windows" | Out-Null +New-Item -ItemType Directory -Force -Path "Release\Mac" | Out-Null + +# 2. Build Frontend +Write-Host "Building Frontend (Vite)..." -ForegroundColor Yellow +$pkgManager = "pnpm" +if (-not (Get-Command "pnpm" -ErrorAction SilentlyContinue)) { $pkgManager = "npm" } + +Invoke-Expression "$pkgManager install" +Invoke-Expression "$pkgManager run build" + +if (-not (Test-Path "dist")) { + Write-Host "Frontend build failed: 'dist' folder not found." -ForegroundColor Red + exit 1 +} + +# 3. Move dist to backend/dist (for embedding) +Write-Host "Moving frontend to backend for embedding..." -ForegroundColor Cyan +Copy-Item -Path "dist" -Destination "backend\dist" -Recurse + +# 4. Build Backend +Write-Host "Building Backend..." -ForegroundColor Yellow + +# Windows Build +Write-Host " Windows (amd64)..." -ForegroundColor Cyan +$env:GOOS = "windows"; $env:GOARCH = "amd64" +go build -ldflags "-s -w -H=windowsgui" -o "Release\Windows\Antigravity.exe" backend/main.go + +# Mac Build (Cross-compile) +Write-Host " macOS (amd64 & arm64)..." -ForegroundColor Cyan +$env:GOOS = "darwin"; $env:GOARCH = "amd64" +go build -ldflags "-s -w" -o "Release\Mac\Antigravity-Intel" backend/main.go + +$env:GOARCH = "arm64" +go build -ldflags "-s -w" -o "Release\Mac\Antigravity-AppleSilicon" backend/main.go + +# Cleanup backend/dist +Remove-Item "backend\dist" -Recurse -Force + +# 5. Success Message & Zipping +Write-Host "Build Complete!" -ForegroundColor Green + +# Zip Windows +if (Test-Path "Release\Antigravity-Windows.zip") { Remove-Item "Release\Antigravity-Windows.zip" } +Compress-Archive -Path "Release\Windows\*" -DestinationPath "Release\Antigravity-Windows.zip" -Force +Write-Host "Created Windows Zip: Release\Antigravity-Windows.zip" -ForegroundColor Green + +# Zip Mac +if (Test-Path "Release\Antigravity-Mac.zip") { Remove-Item "Release\Antigravity-Mac.zip" } +Compress-Archive -Path "Release\Mac\*" -DestinationPath "Release\Antigravity-Mac.zip" -Force +Write-Host "Created Mac Zip: Release\Antigravity-Mac.zip" -ForegroundColor Green + +Write-Host "Artifacts are in the 'Release' folder." -ForegroundColor White diff --git a/dist-electron/main.cjs b/dist-electron/main.cjs deleted file mode 100644 index 211fe85..0000000 --- a/dist-electron/main.cjs +++ /dev/null @@ -1,467 +0,0 @@ -"use strict"; -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); - -// electron/main.ts -var import_electron = require("electron"); -var import_fs = __toESM(require("fs"), 1); -var import_path3 = __toESM(require("path"), 1); -var import_child_process3 = require("child_process"); - -// electron/features/scanner.ts -var import_promises = __toESM(require("fs/promises"), 1); -var import_path = __toESM(require("path"), 1); -var import_os = __toESM(require("os"), 1); -var import_child_process = require("child_process"); -var import_util = __toESM(require("util"), 1); -async function scanDirectory(rootDir, maxDepth = 5) { - const results = []; - async function traverse(currentPath, depth) { - if (depth > maxDepth) return; - try { - const entries = await import_promises.default.readdir(currentPath, { withFileTypes: true }); - for (const entry of entries) { - const fullPath = import_path.default.join(currentPath, entry.name); - if (entry.isDirectory()) { - if (entry.name === "node_modules" || entry.name === "vendor" || entry.name === ".venv") { - try { - const stats = await import_promises.default.stat(fullPath); - results.push({ - path: fullPath, - size: 0, - // Calculating size is expensive, might do lazily or separate task - lastAccessed: stats.atime, - type: entry.name - }); - continue; - } catch (e) { - console.error(`Error stat-ing ${fullPath}`, e); - } - } else if (!entry.name.startsWith(".")) { - await traverse(fullPath, depth + 1); - } - } - } - } catch (error) { - console.error(`Error scanning ${currentPath}`, error); - } - } - await traverse(rootDir, 0); - return results; -} -async function findLargeFiles(rootDir, threshold = 100 * 1024 * 1024) { - const results = []; - async function traverse(currentPath) { - try { - const stats = await import_promises.default.stat(currentPath); - if (stats.size > threshold && !stats.isDirectory()) { - results.push({ path: currentPath, size: stats.size, isDirectory: false }); - return; - } - if (stats.isDirectory()) { - if (import_path.default.basename(currentPath) === "node_modules") return; - const entries = await import_promises.default.readdir(currentPath, { withFileTypes: true }); - for (const entry of entries) { - if (entry.name.startsWith(".") && entry.name !== ".Trash") continue; - await traverse(import_path.default.join(currentPath, entry.name)); - } - } - } catch (e) { - } - } - await traverse(rootDir); - return results.sort((a, b) => b.size - a.size); -} -async function getDeepDiveSummary() { - const home = import_os.default.homedir(); - const targets = [ - import_path.default.join(home, "Downloads"), - import_path.default.join(home, "Documents"), - import_path.default.join(home, "Desktop"), - import_path.default.join(home, "Library/Application Support") - ]; - const results = []; - for (const t of targets) { - console.log(`Scanning ${t}...`); - const large = await findLargeFiles(t, 50 * 1024 * 1024); - console.log(`Found ${large.length} large files in ${t}`); - results.push(...large); - } - return results.slice(0, 20); -} -var execPromise = import_util.default.promisify(import_child_process.exec); -async function getDiskUsage() { - try { - const { stdout } = await execPromise("df -k /"); - const lines = stdout.trim().split("\n"); - if (lines.length < 2) return null; - const parts = lines[1].split(/\s+/); - const total = parseInt(parts[1]) * 1024; - const used = parseInt(parts[2]) * 1024; - const available = parseInt(parts[3]) * 1024; - return { - totalGB: (total / 1024 / 1024 / 1024).toFixed(2), - usedGB: (used / 1024 / 1024 / 1024).toFixed(2), - freeGB: (available / 1024 / 1024 / 1024).toFixed(2) - }; - } catch (e) { - console.error("Error getting disk usage:", e); - return null; - } -} -async function findHeavyFolders(rootDir) { - try { - console.log(`Deepest scan on: ${rootDir}`); - const { stdout } = await execPromise(`du -k -d 2 "${rootDir}" | sort -nr | head -n 50`); - const lines = stdout.trim().split("\n"); - const results = lines.map((line) => { - const trimmed = line.trim(); - const firstSpace = trimmed.indexOf(" "); - const match = trimmed.match(/^(\d+)\s+(.+)$/); - if (!match) return null; - const sizeK = parseInt(match[1]); - const fullPath = match[2]; - return { - path: fullPath, - size: sizeK * 1024, - // Convert KB to Bytes - isDirectory: true - }; - }).filter((item) => item !== null && item.path !== rootDir); - return results; - } catch (e) { - console.error("Deepest scan failed:", e); - return []; - } -} - -// electron/features/updater.ts -var import_child_process2 = require("child_process"); -var import_util2 = __toESM(require("util"), 1); -var execAsync = import_util2.default.promisify(import_child_process2.exec); -async function disableAutoUpdates(password) { - const cmds = [ - "sudo -S softwareupdate --schedule off", - "sudo -S defaults write /Library/Preferences/com.apple.SoftwareUpdate AutomaticCheckEnabled -bool false", - "sudo -S defaults write /Library/Preferences/com.apple.SoftwareUpdate AutomaticDownload -bool false", - "sudo -S defaults write /Library/Preferences/com.apple.commerce AutoUpdate -bool false" - ]; - try { - await execWithSudo("softwareupdate --schedule off"); - return true; - } catch (error) { - console.error("Failed to disable updates", error); - return false; - } -} -async function execWithSudo(command) { - const script = `do shell script "${command}" with administrator privileges`; - return execAsync(`osascript -e '${script}'`); -} - -// electron/features/cleaner.ts -var import_promises2 = __toESM(require("fs/promises"), 1); -var import_path2 = __toESM(require("path"), 1); -var import_os2 = __toESM(require("os"), 1); -async function clearCaches() { - const cacheDir = import_path2.default.join(import_os2.default.homedir(), "Library/Caches"); - try { - const entries = await import_promises2.default.readdir(cacheDir); - let freedSpace = 0; - for (const entry of entries) { - const fullPath = import_path2.default.join(cacheDir, entry); - await import_promises2.default.rm(fullPath, { recursive: true, force: true }); - } - return true; - } catch (error) { - console.error("Error clearing caches", error); - return false; - } -} -async function purgePath(targetPath) { - try { - await import_promises2.default.rm(targetPath, { recursive: true, force: true }); - return true; - } catch (e) { - console.error(`Failed to purge ${targetPath}`, e); - return false; - } -} -async function cleanupDocker() { - try { - const { exec: exec3 } = await import("child_process"); - const util3 = await import("util"); - const execAsync2 = util3.promisify(exec3); - await execAsync2("docker system prune -a --volumes -f"); - return true; - } catch (e) { - console.error("Failed to cleanup docker:", e); - return false; - } -} -async function cleanupTmp() { - const tmpDir = import_os2.default.tmpdir(); - let success = true; - try { - const entries = await import_promises2.default.readdir(tmpDir); - for (const entry of entries) { - try { - await import_promises2.default.rm(import_path2.default.join(tmpDir, entry), { recursive: true, force: true }); - } catch (e) { - console.warn(`Skipped ${entry}`); - } - } - } catch (e) { - console.error("Failed to access tmp dir:", e); - success = false; - } - return success; -} -async function cleanupXcode() { - try { - const home = import_os2.default.homedir(); - const paths = [ - import_path2.default.join(home, "Library/Developer/Xcode/DerivedData"), - import_path2.default.join(home, "Library/Developer/Xcode/iOS DeviceSupport"), - import_path2.default.join(home, "Library/Developer/Xcode/Archives"), - import_path2.default.join(home, "Library/Caches/com.apple.dt.Xcode") - ]; - for (const p of paths) { - try { - await import_promises2.default.rm(p, { recursive: true, force: true }); - } catch (e) { - console.warn(`Failed to clean ${p}`, e); - } - } - return true; - } catch (e) { - console.error("Failed to cleanup Xcode:", e); - return false; - } -} -async function cleanupTurnkey() { - try { - const home = import_os2.default.homedir(); - const paths = [ - import_path2.default.join(home, ".npm/_cacache"), - import_path2.default.join(home, ".yarn/cache"), - import_path2.default.join(home, "Library/pnpm/store"), - // Mac default for pnpm store if not configured otherwise - import_path2.default.join(home, ".cache/yarn"), - import_path2.default.join(home, ".gradle/caches") - ]; - for (const p of paths) { - try { - await import_promises2.default.rm(p, { recursive: true, force: true }); - } catch (e) { - console.warn(`Failed to clean ${p}`, e); - } - } - return true; - } catch (e) { - console.error("Failed to cleanup package managers:", e); - return false; - } -} - -// electron/main.ts -var mainWindow = null; -var backendProcess = null; -var tray = null; -var startBackend = () => { - if (process.env.NODE_ENV === "development") { - console.log("Development mode: Backend should be running via start-go.sh"); - return; - } - const backendPath = import_path3.default.join(process.resourcesPath, "backend"); - console.log("Starting backend from:", backendPath); - try { - backendProcess = (0, import_child_process3.spawn)(backendPath, [], { - stdio: "inherit" - }); - backendProcess.on("error", (err) => { - console.error("Failed to start backend:", err); - }); - backendProcess.on("exit", (code, signal) => { - console.log(`Backend exited with code ${code} and signal ${signal}`); - }); - } catch (error) { - console.error("Error spawning backend:", error); - } -}; -function createTray() { - const iconPath = import_path3.default.join(__dirname, "../dist/tray/tray-iconTemplate.png"); - let finalIconPath = iconPath; - if (!import_fs.default.existsSync(iconPath)) { - finalIconPath = import_path3.default.join(__dirname, "../public/tray/tray-iconTemplate.png"); - } - const image = import_electron.nativeImage.createFromPath(finalIconPath); - tray = new import_electron.Tray(image.resize({ width: 16, height: 16 })); - tray.setToolTip("Antigravity Cleaner"); - updateTrayMenu("Initializing..."); -} -var isDockVisible = true; -function updateTrayMenu(statusText) { - if (!tray) return; - const contextMenu = import_electron.Menu.buildFromTemplate([ - { label: `Storage: ${statusText}`, enabled: false }, - { type: "separator" }, - { - label: "Open Dashboard", - click: () => { - if (mainWindow) { - mainWindow.show(); - mainWindow.focus(); - } - } - }, - { - label: "Free Up Storage", - click: () => { - if (mainWindow) { - mainWindow.show(); - mainWindow.focus(); - } - } - }, - { type: "separator" }, - { - label: "Show Dock Icon", - type: "checkbox", - checked: isDockVisible, - click: (menuItem) => { - isDockVisible = menuItem.checked; - if (isDockVisible) { - import_electron.app.dock.show(); - } else { - import_electron.app.dock.hide(); - } - } - }, - { type: "separator" }, - { label: "Quit", click: () => import_electron.app.quit() } - ]); - tray.setContextMenu(contextMenu); - tray.setTitle(statusText); -} -function createWindow() { - mainWindow = new import_electron.BrowserWindow({ - width: 1200, - height: 800, - backgroundColor: "#FFFFFF", - // Helps prevent white flash - webPreferences: { - preload: import_path3.default.join(__dirname, "preload.cjs"), - nodeIntegration: true, - contextIsolation: true - } - }); - const isDev = process.env.NODE_ENV === "development"; - const port = process.env.PORT || 5173; - if (isDev) { - mainWindow.loadURL(`http://localhost:${port}`); - } else { - mainWindow.loadFile(import_path3.default.join(__dirname, "../dist/index.html")); - } - mainWindow.on("closed", () => { - mainWindow = null; - }); -} -import_electron.app.whenReady().then(() => { - import_electron.ipcMain.handle("scan-directory", async (event, path4) => { - return scanDirectory(path4); - }); - import_electron.ipcMain.handle("deep-dive-scan", async () => { - return getDeepDiveSummary(); - }); - import_electron.ipcMain.handle("get-disk-usage", async () => { - return getDiskUsage(); - }); - import_electron.ipcMain.handle("deepest-scan", async (event, targetPath) => { - const target = targetPath || import_path3.default.join(import_electron.app.getPath("home"), "Documents"); - return findHeavyFolders(target); - }); - import_electron.ipcMain.handle("disable-updates", async () => { - return disableAutoUpdates(); - }); - import_electron.ipcMain.handle("clean-system", async () => { - return clearCaches(); - }); - import_electron.ipcMain.handle("cleanup-docker", async () => { - return cleanupDocker(); - }); - import_electron.ipcMain.handle("cleanup-tmp", async () => { - return cleanupTmp(); - }); - import_electron.ipcMain.handle("cleanup-xcode", async () => { - return cleanupXcode(); - }); - import_electron.ipcMain.handle("cleanup-turnkey", async () => { - return cleanupTurnkey(); - }); - import_electron.ipcMain.handle("purge-path", async (event, targetPath) => { - return purgePath(targetPath); - }); - import_electron.ipcMain.handle("update-tray-title", (event, title) => { - if (tray) { - tray.setTitle(title); - updateTrayMenu(title); - } - }); - import_electron.ipcMain.handle("get-app-icon", async (event, appPath) => { - try { - const icon = await import_electron.app.getFileIcon(appPath, { size: "normal" }); - return icon.toDataURL(); - } catch (e) { - console.error("Failed to get icon for:", appPath, e); - return ""; - return ""; - } - }); - import_electron.ipcMain.handle("update-tray-icon", (event, dataUrl) => { - if (tray && dataUrl) { - const image = import_electron.nativeImage.createFromDataURL(dataUrl); - tray.setImage(image.resize({ width: 22, height: 22 })); - } - }); - createWindow(); - createTray(); - startBackend(); -}); -import_electron.app.on("will-quit", () => { - if (backendProcess) { - console.log("Killing backend process..."); - backendProcess.kill(); - backendProcess = null; - } -}); -import_electron.app.on("window-all-closed", () => { - if (process.platform !== "darwin") { - import_electron.app.quit(); - } -}); -import_electron.app.on("activate", () => { - if (mainWindow === null) { - createWindow(); - } -}); diff --git a/dist-electron/preload.cjs b/dist-electron/preload.cjs deleted file mode 100644 index 3407f3b..0000000 --- a/dist-electron/preload.cjs +++ /dev/null @@ -1,20 +0,0 @@ -"use strict"; - -// electron/preload.ts -var import_electron = require("electron"); -import_electron.contextBridge.exposeInMainWorld("electronAPI", { - scanDirectory: (path) => import_electron.ipcRenderer.invoke("scan-directory", path), - disableUpdates: () => import_electron.ipcRenderer.invoke("disable-updates"), - cleanSystem: () => import_electron.ipcRenderer.invoke("clean-system"), - purgePath: (path) => import_electron.ipcRenderer.invoke("purge-path", path), - cleanupDocker: () => import_electron.ipcRenderer.invoke("cleanup-docker"), - cleanupTmp: () => import_electron.ipcRenderer.invoke("cleanup-tmp"), - cleanupXcode: () => import_electron.ipcRenderer.invoke("cleanup-xcode"), - cleanupTurnkey: () => import_electron.ipcRenderer.invoke("cleanup-turnkey"), - deepDiveScan: () => import_electron.ipcRenderer.invoke("deep-dive-scan"), - getDiskUsage: () => import_electron.ipcRenderer.invoke("get-disk-usage"), - deepestScan: (path) => import_electron.ipcRenderer.invoke("deepest-scan", path), - updateTrayTitle: (title) => import_electron.ipcRenderer.invoke("update-tray-title", title), - getAppIcon: (path) => import_electron.ipcRenderer.invoke("get-app-icon", path), - updateTrayIcon: (dataUrl) => import_electron.ipcRenderer.invoke("update-tray-icon", dataUrl) -}); diff --git a/electron/features/cleaner.ts b/electron/features/cleaner.ts old mode 100755 new mode 100644 diff --git a/electron/features/enforcer.ts b/electron/features/enforcer.ts old mode 100755 new mode 100644 diff --git a/electron/features/scanner.ts b/electron/features/scanner.ts old mode 100755 new mode 100644 diff --git a/electron/features/updater.ts b/electron/features/updater.ts old mode 100755 new mode 100644 diff --git a/electron/main.ts b/electron/main.ts old mode 100755 new mode 100644 diff --git a/electron/preload.ts b/electron/preload.ts old mode 100755 new mode 100644 diff --git a/electron/tsconfig.json b/electron/tsconfig.json old mode 100755 new mode 100644 diff --git a/eslint.config.js b/eslint.config.js old mode 100755 new mode 100644 diff --git a/go.mod b/go.mod index a10ae0e..d672297 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,5 @@ module github.com/kv/clearnup go 1.25.4 + +require golang.org/x/sys v0.40.0 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..d117642 --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= +golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= diff --git a/index.html b/index.html old mode 100755 new mode 100644 diff --git a/package.json b/package.json old mode 100755 new mode 100644 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml old mode 100755 new mode 100644 index 08dfa85..ba92ad6 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,12 +8,24 @@ importers: .: dependencies: + clsx: + specifier: ^2.1.1 + version: 2.1.1 + framer-motion: + specifier: ^12.29.2 + version: 12.29.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + lucide-react: + specifier: ^0.563.0 + version: 0.563.0(react@19.2.4) react: specifier: ^19.2.0 version: 19.2.4 react-dom: specifier: ^19.2.0 version: 19.2.4(react@19.2.4) + tailwind-merge: + specifier: ^3.4.0 + version: 3.4.0 devDependencies: '@eslint/js': specifier: ^9.39.1 @@ -42,6 +54,9 @@ importers: electron: specifier: ^33.2.1 version: 33.4.11 + electron-builder: + specifier: ^26.4.0 + version: 26.7.0(electron-builder-squirrel-windows@26.7.0) eslint: specifier: ^9.39.1 version: 9.39.2(jiti@1.21.7) @@ -75,6 +90,9 @@ importers: packages: + 7zip-bin@5.2.0: + resolution: {integrity: sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==} + '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} @@ -162,10 +180,50 @@ packages: resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==} engines: {node: '>=6.9.0'} + '@develar/schema-utils@2.6.5': + resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==} + engines: {node: '>= 8.9.0'} + + '@electron/asar@3.4.1': + resolution: {integrity: sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==} + engines: {node: '>=10.12.0'} + hasBin: true + + '@electron/fuses@1.8.0': + resolution: {integrity: sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==} + hasBin: true + '@electron/get@2.0.3': resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} engines: {node: '>=12'} + '@electron/get@3.1.0': + resolution: {integrity: sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ==} + engines: {node: '>=14'} + + '@electron/notarize@2.5.0': + resolution: {integrity: sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==} + engines: {node: '>= 10.0.0'} + + '@electron/osx-sign@1.3.3': + resolution: {integrity: sha512-KZ8mhXvWv2rIEgMbWZ4y33bDHyUKMXnx4M0sTyPNK/vcB81ImdeY9Ggdqy0SWbMDgmbqyQ+phgejh6V3R2QuSg==} + engines: {node: '>=12.0.0'} + hasBin: true + + '@electron/rebuild@4.0.3': + resolution: {integrity: sha512-u9vpTHRMkOYCs/1FLiSVAFZ7FbjsXK+bQuzviJZa+lG7BHZl1nz52/IcGvwa3sk80/fc3llutBkbCq10Vh8WQA==} + engines: {node: '>=22.12.0'} + hasBin: true + + '@electron/universal@2.0.3': + resolution: {integrity: sha512-Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g==} + engines: {node: '>=16.4'} + + '@electron/windows-sign@1.2.2': + resolution: {integrity: sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ==} + engines: {node: '>=14.14'} + hasBin: true + '@esbuild/aix-ppc64@0.27.2': resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} engines: {node: '>=18'} @@ -396,6 +454,22 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@isaacs/balanced-match@4.0.1': + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} + engines: {node: 20 || >=22} + + '@isaacs/brace-expansion@5.0.0': + resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} + engines: {node: 20 || >=22} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -412,6 +486,14 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@malept/cross-spawn-promise@2.0.0': + resolution: {integrity: sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==} + engines: {node: '>= 12.13.0'} + + '@malept/flatpak-bundler@0.4.0': + resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} + engines: {node: '>= 10.0.0'} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -424,6 +506,18 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@npmcli/agent@3.0.0': + resolution: {integrity: sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@npmcli/fs@4.0.0': + resolution: {integrity: sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + '@rolldown/pluginutils@1.0.0-beta.53': resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==} @@ -461,79 +555,66 @@ packages: resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} cpu: [arm] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.57.1': resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} cpu: [arm] os: [linux] - libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.57.1': resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} cpu: [arm64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.57.1': resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} cpu: [arm64] os: [linux] - libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.57.1': resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} cpu: [loong64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-loong64-musl@4.57.1': resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} cpu: [loong64] os: [linux] - libc: [musl] '@rollup/rollup-linux-ppc64-gnu@4.57.1': resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} cpu: [ppc64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-ppc64-musl@4.57.1': resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} cpu: [ppc64] os: [linux] - libc: [musl] '@rollup/rollup-linux-riscv64-gnu@4.57.1': resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} cpu: [riscv64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.57.1': resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} cpu: [riscv64] os: [linux] - libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.57.1': resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} cpu: [s390x] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.57.1': resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} cpu: [x64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-musl@4.57.1': resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} cpu: [x64] os: [linux] - libc: [musl] '@rollup/rollup-openbsd-x64@4.57.1': resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} @@ -591,9 +672,15 @@ packages: '@types/cacheable-request@6.0.3': resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/fs-extra@9.0.13': + resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} + '@types/http-cache-semantics@4.2.0': resolution: {integrity: sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==} @@ -603,12 +690,18 @@ packages: '@types/keyv@3.1.4': resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/node@20.19.30': resolution: {integrity: sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==} '@types/node@24.10.9': resolution: {integrity: sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==} + '@types/plist@3.0.5': + resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==} + '@types/react-dom@19.2.3': resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} peerDependencies: @@ -620,6 +713,9 @@ packages: '@types/responselike@1.0.3': resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + '@types/verror@1.10.11': + resolution: {integrity: sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==} + '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} @@ -688,6 +784,14 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + '@xmldom/xmldom@0.8.11': + resolution: {integrity: sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==} + engines: {node: '>=10.0.0'} + + abbrev@3.0.1: + resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} + engines: {node: ^18.17.0 || >=20.5.0} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -698,6 +802,15 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -705,10 +818,18 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} @@ -716,15 +837,44 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + app-builder-bin@5.0.0-alpha.12: + resolution: {integrity: sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w==} + + app-builder-lib@26.7.0: + resolution: {integrity: sha512-/UgCD8VrO79Wv8aBNpjMfsS1pIUfIPURoRn0Ik6tMe5avdZF+vQgl/juJgipcMmH3YS0BD573lCdCHyoi84USg==} + engines: {node: '>=14.0.0'} + peerDependencies: + dmg-builder: 26.7.0 + electron-builder-squirrel-windows: 26.7.0 + arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + assert-plus@1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + async-exit-hook@2.0.1: + resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} + engines: {node: '>=0.12.0'} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + autoprefixer@10.4.24: resolution: {integrity: sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==} engines: {node: ^10 || ^12 || >=14} @@ -738,6 +888,9 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + baseline-browser-mapping@2.9.19: resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} hasBin: true @@ -746,6 +899,9 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + boolean@3.2.0: resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. @@ -768,6 +924,23 @@ packages: buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + builder-util-runtime@9.5.1: + resolution: {integrity: sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==} + engines: {node: '>=12.0.0'} + + builder-util@26.4.1: + resolution: {integrity: sha512-FlgH43XZ50w3UtS1RVGDWOz8v9qMXPC7upMtKMtBEnYdt1OVoS61NYhKm/4x+cIaWqJTXua0+VVPI+fSPGXNIw==} + + cacache@19.0.1: + resolution: {integrity: sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==} + engines: {node: ^18.17.0 || >=20.5.0} + cacheable-lookup@5.0.4: resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} engines: {node: '>=10.6.0'} @@ -799,6 +972,33 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + + chromium-pickle-js@0.2.0: + resolution: {integrity: sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==} + + ci-info@4.3.1: + resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} + engines: {node: '>=8'} + + ci-info@4.4.0: + resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} + engines: {node: '>=8'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-truncate@2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -806,6 +1006,14 @@ packages: clone-response@1.0.3: resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -821,6 +1029,18 @@ packages: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} + commander@5.1.0: + resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} + engines: {node: '>= 6'} + + commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + + compare-version@0.1.2: + resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==} + engines: {node: '>=0.10.0'} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -832,6 +1052,15 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + core-util-is@1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + + crc@3.8.0: + resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==} + + cross-dirname@0.1.0: + resolution: {integrity: sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==} + cross-env@7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} @@ -865,6 +1094,9 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + defer-to-connect@2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} @@ -881,22 +1113,69 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dir-compare@4.2.0: + resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} + dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dmg-builder@26.7.0: + resolution: {integrity: sha512-uOOBA3f+kW3o4KpSoMQ6SNpdXU7WtxlJRb9vCZgOvqhTz4b3GjcoWKstdisizNZLsylhTMv8TLHFPFW0Uxsj/g==} + + dmg-license@1.0.11: + resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==} + engines: {node: '>=8'} + os: [darwin] + hasBin: true + + dotenv-expand@11.0.7: + resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==} + engines: {node: '>=12'} + + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-builder-squirrel-windows@26.7.0: + resolution: {integrity: sha512-3EqkQK+q0kGshdPSKEPb2p5F75TENMKu6Fe5aTdeaPfdzFK4Yjp5L0d6S7K8iyvqIsGQ/ei4bnpyX9wt+kVCKQ==} + + electron-builder@26.7.0: + resolution: {integrity: sha512-LoXbCvSFxLesPneQ/fM7FB4OheIDA2tjqCdUkKlObV5ZKGhYgi5VHPHO/6UUOUodAlg7SrkPx7BZJPby+Vrtbg==} + engines: {node: '>=14.0.0'} + hasBin: true + + electron-publish@26.6.0: + resolution: {integrity: sha512-LsyHMMqbvJ2vsOvuWJ19OezgF2ANdCiHpIucDHNiLhuI+/F3eW98ouzWSRmXXi82ZOPZXC07jnIravY4YYwCLQ==} + electron-to-chromium@1.5.283: resolution: {integrity: sha512-3vifjt1HgrGW/h76UEeny+adYApveS9dH2h3p57JYzBSXJIKUJAvtmIytDKjcSCt9xHfrNCFJ7gts6vkhuq++w==} + electron-winstaller@5.4.0: + resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==} + engines: {node: '>=8.0.0'} + electron@33.4.11: resolution: {integrity: sha512-xmdAs5QWRkInC7TpXGNvzo/7exojubk+72jn1oJL7keNeIlw7xNglf8TGtJtkR4rWC5FJq0oXiIXPS9BcK2Irg==} engines: {node: '>= 12.20.55'} @@ -905,6 +1184,12 @@ packages: emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} @@ -912,6 +1197,9 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -997,11 +1285,18 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + exponential-backoff@3.1.3: + resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} + extract-zip@2.0.1: resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} engines: {node: '>= 10.17.0'} hasBin: true + extsprintf@1.4.1: + resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==} + engines: {'0': node >=0.6.0} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -1034,6 +1329,9 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -1058,6 +1356,10 @@ packages: debug: optional: true + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + form-data@4.0.5: resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} @@ -1065,10 +1367,47 @@ packages: fraction.js@5.3.4: resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} + framer-motion@12.29.2: + resolution: {integrity: sha512-lSNRzBJk4wuIy0emYQ/nfZ7eWhqud2umPKw2QAQki6uKhZPKm2hRQHeQoHTG9MIvfobb+A/LbEWPJU794ZUKrg==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@11.3.3: + resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==} + engines: {node: '>=14.14'} + + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + fs-extra@8.1.0: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + fs-minipass@3.0.3: + resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -1105,6 +1444,14 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} + glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + global-agent@3.0.0: resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} engines: {node: '>=10.0'} @@ -1157,13 +1504,37 @@ packages: hermes-parser@0.25.1: resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + http-cache-semantics@4.2.0: resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + http2-wrapper@1.0.3: resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} engines: {node: '>=10.19.0'} + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + iconv-corefoundation@1.1.7: + resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} + engines: {node: ^8.11.2 || >=10} + os: [darwin] + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -1180,6 +1551,17 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ip-address@10.1.0: + resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} + engines: {node: '>= 12'} + is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -1200,17 +1582,49 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + isbinaryfile@4.0.10: + resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} + engines: {node: '>= 8.0.0'} + + isbinaryfile@5.0.7: + resolution: {integrity: sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==} + engines: {node: '>= 18.0.0'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isexe@3.1.1: + resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} + engines: {node: '>=16'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jake@10.9.4: + resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} + engines: {node: '>=10'} + hasBin: true + jiti@1.21.7: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + joi@18.0.2: resolution: {integrity: sha512-RuCOQMIt78LWnktPoeBL0GErkNaJPTBGcYuyaBvUOQSpcpcLfWrHPPihYdOGbV5pam9VTWbeoF7TsGiHugcjGA==} engines: {node: '>= 20'} @@ -1247,9 +1661,15 @@ packages: jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + lazy-val@1.0.5: + resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==} + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -1271,13 +1691,33 @@ packages: lodash@4.17.23: resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + lowercase-keys@2.0.0: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + lucide-react@0.563.0: + resolution: {integrity: sha512-8dXPB2GI4dI8jV4MgUDGBeLdGk8ekfqVZ0BdLcrRzocGgG75ltNEmWS+gE7uokKF/0oSUuczNDT+g9hFJ23FkA==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + make-fetch-happen@14.0.3: + resolution: {integrity: sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==} + engines: {node: ^18.17.0 || >=20.5.0} + matcher@3.0.0: resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} engines: {node: '>=10'} @@ -1302,6 +1742,15 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + mimic-response@1.0.1: resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} engines: {node: '>=4'} @@ -1310,9 +1759,17 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} + minimatch@10.1.1: + resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} + engines: {node: 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -1320,6 +1777,48 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + minipass-collect@2.0.1: + resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass-fetch@4.0.1: + resolution: {integrity: sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + minipass-flush@1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} + + minipass-pipeline@1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} + + minipass-sized@1.0.3: + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@3.1.0: + resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} + engines: {node: '>= 18'} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + motion-dom@12.29.2: + resolution: {integrity: sha512-/k+NuycVV8pykxyiTCoFzIVLA95Nb1BFIVvfSu9L50/6K6qNeAYtkxXILy/LRutt7AzaYDc2myj0wkCVVYAPPA==} + + motion-utils@12.29.2: + resolution: {integrity: sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1334,9 +1833,33 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + + node-abi@4.26.0: + resolution: {integrity: sha512-8QwIZqikRvDIkXS2S93LjzhsSPJuIbfaMETWH+Bx8oOT9Sa9UsUtBFQlc3gBNd1+QINjaTloitXr1W3dQLi9Iw==} + engines: {node: '>=22.12.0'} + + node-addon-api@1.7.2: + resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==} + + node-api-version@0.2.1: + resolution: {integrity: sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==} + + node-gyp@11.5.0: + resolution: {integrity: sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + node-releases@2.0.27: resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + nopt@8.1.0: + resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -1360,10 +1883,18 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + p-cancelable@2.1.1: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} @@ -1376,6 +1907,13 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + p-map@7.0.4: + resolution: {integrity: sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==} + engines: {node: '>=18'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -1384,6 +1922,10 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -1391,6 +1933,14 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + pe-library@0.4.1: + resolution: {integrity: sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==} + engines: {node: '>=12', npm: '>=6'} + pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} @@ -1413,6 +1963,10 @@ packages: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} + plist@3.1.0: + resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} + engines: {node: '>=10.4.0'} + postcss-import@15.1.0: resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} @@ -1460,14 +2014,30 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + postject@1.0.0-alpha.6: + resolution: {integrity: sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==} + engines: {node: '>=14.0.0'} + hasBin: true + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + proc-log@5.0.0: + resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==} + engines: {node: ^18.17.0 || >=20.5.0} + progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + + proper-lockfile@4.1.2: + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} @@ -1498,9 +2068,17 @@ packages: resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} engines: {node: '>=0.10.0'} + read-binary-file-arch@1.0.6: + resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==} + hasBin: true + read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -1509,6 +2087,10 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + resedit@1.7.2: + resolution: {integrity: sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==} + engines: {node: '>=12', npm: '>=6'} + resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} @@ -1524,10 +2106,23 @@ packages: responselike@2.0.1: resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rimraf@2.6.3: + resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + roarr@2.15.4: resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} engines: {node: '>=8.0'} @@ -1543,12 +2138,29 @@ packages: rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sanitize-filename@1.6.3: + resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==} + + sax@1.4.4: + resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==} + engines: {node: '>=11.0.0'} + scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} semver-compare@1.0.0: resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -1574,21 +2186,74 @@ packages: resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} engines: {node: '>= 0.4'} + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-update-notifier@2.0.0: + resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} + engines: {node: '>=10'} + + slice-ansi@3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + socks-proxy-agent@8.0.5: + resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} + engines: {node: '>= 14'} + + socks@2.8.7: + resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + sprintf-js@1.1.3: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + ssri@12.0.0: + resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + stat-mode@1.0.0: + resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==} + engines: {node: '>= 6'} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} + engines: {node: '>=12'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -1614,11 +2279,25 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + tailwind-merge@3.4.0: + resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==} + tailwindcss@3.4.19: resolution: {integrity: sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==} engines: {node: '>=14.0.0'} hasBin: true + tar@7.5.7: + resolution: {integrity: sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==} + engines: {node: '>=18'} + + temp-file@3.4.0: + resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==} + + temp@0.9.4: + resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==} + engines: {node: '>=6.0.0'} + thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -1626,10 +2305,20 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + tiny-async-pool@1.3.0: + resolution: {integrity: sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==} + tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} + tmp-promise@3.0.3: + resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} + + tmp@0.2.5: + resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} + engines: {node: '>=14.14'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -1638,6 +2327,9 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true + truncate-utf8-bytes@1.0.2: + resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} + ts-api-utils@2.4.0: resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} engines: {node: '>=18.12'} @@ -1676,10 +2368,22 @@ packages: undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + unique-filename@4.0.0: + resolution: {integrity: sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + unique-slug@5.0.0: + resolution: {integrity: sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==} + engines: {node: ^18.17.0 || >=20.5.0} + universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + update-browserslist-db@1.2.3: resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true @@ -1689,9 +2393,16 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + utf8-byte-length@1.0.5: + resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==} + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + verror@1.10.1: + resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} + engines: {node: '>=0.6.0'} + vite@7.3.1: resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1737,11 +2448,19 @@ packages: engines: {node: '>=12.0.0'} hasBin: true + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true + which@5.0.0: + resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -1750,9 +2469,17 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + xmlbuilder@15.1.1: + resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} + engines: {node: '>=8.0'} + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -1760,6 +2487,13 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -1786,6 +2520,8 @@ packages: snapshots: + 7zip-bin@5.2.0: {} + '@alloc/quick-lru@5.2.0': {} '@babel/code-frame@7.28.6': @@ -1900,6 +2636,23 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@develar/schema-utils@2.6.5': + dependencies: + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + + '@electron/asar@3.4.1': + dependencies: + commander: 5.1.0 + glob: 7.2.3 + minimatch: 3.1.2 + + '@electron/fuses@1.8.0': + dependencies: + chalk: 4.1.2 + fs-extra: 9.1.0 + minimist: 1.2.8 + '@electron/get@2.0.3': dependencies: debug: 4.4.3 @@ -1914,6 +2667,80 @@ snapshots: transitivePeerDependencies: - supports-color + '@electron/get@3.1.0': + dependencies: + debug: 4.4.3 + env-paths: 2.2.1 + fs-extra: 8.1.0 + got: 11.8.6 + progress: 2.0.3 + semver: 6.3.1 + sumchecker: 3.0.1 + optionalDependencies: + global-agent: 3.0.0 + transitivePeerDependencies: + - supports-color + + '@electron/notarize@2.5.0': + dependencies: + debug: 4.4.3 + fs-extra: 9.1.0 + promise-retry: 2.0.1 + transitivePeerDependencies: + - supports-color + + '@electron/osx-sign@1.3.3': + dependencies: + compare-version: 0.1.2 + debug: 4.4.3 + fs-extra: 10.1.0 + isbinaryfile: 4.0.10 + minimist: 1.2.8 + plist: 3.1.0 + transitivePeerDependencies: + - supports-color + + '@electron/rebuild@4.0.3': + dependencies: + '@malept/cross-spawn-promise': 2.0.0 + debug: 4.4.3 + detect-libc: 2.1.2 + got: 11.8.6 + graceful-fs: 4.2.11 + node-abi: 4.26.0 + node-api-version: 0.2.1 + node-gyp: 11.5.0 + ora: 5.4.1 + read-binary-file-arch: 1.0.6 + semver: 7.7.3 + tar: 7.5.7 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + + '@electron/universal@2.0.3': + dependencies: + '@electron/asar': 3.4.1 + '@malept/cross-spawn-promise': 2.0.0 + debug: 4.4.3 + dir-compare: 4.2.0 + fs-extra: 11.3.3 + minimatch: 9.0.5 + plist: 3.1.0 + transitivePeerDependencies: + - supports-color + + '@electron/windows-sign@1.2.2': + dependencies: + cross-dirname: 0.1.0 + debug: 4.4.3 + fs-extra: 11.3.3 + minimist: 1.2.8 + postject: 1.0.0-alpha.6 + transitivePeerDependencies: + - supports-color + optional: true + '@esbuild/aix-ppc64@0.27.2': optional: true @@ -2065,6 +2892,25 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@isaacs/balanced-match@4.0.1': {} + + '@isaacs/brace-expansion@5.0.0': + dependencies: + '@isaacs/balanced-match': 4.0.1 + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.2 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.2 + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -2084,6 +2930,19 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@malept/cross-spawn-promise@2.0.0': + dependencies: + cross-spawn: 7.0.6 + + '@malept/flatpak-bundler@0.4.0': + dependencies: + debug: 4.4.3 + fs-extra: 9.1.0 + lodash: 4.17.23 + tmp-promise: 3.0.3 + transitivePeerDependencies: + - supports-color + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -2096,6 +2955,23 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 + '@npmcli/agent@3.0.0': + dependencies: + agent-base: 7.1.4 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + lru-cache: 10.4.3 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + + '@npmcli/fs@4.0.0': + dependencies: + semver: 7.7.3 + + '@pkgjs/parseargs@0.11.0': + optional: true + '@rolldown/pluginutils@1.0.0-beta.53': {} '@rollup/rollup-android-arm-eabi@4.57.1': @@ -2209,8 +3085,16 @@ snapshots: '@types/node': 24.10.9 '@types/responselike': 1.0.3 + '@types/debug@4.1.12': + dependencies: + '@types/ms': 2.1.0 + '@types/estree@1.0.8': {} + '@types/fs-extra@9.0.13': + dependencies: + '@types/node': 24.10.9 + '@types/http-cache-semantics@4.2.0': {} '@types/json-schema@7.0.15': {} @@ -2219,6 +3103,8 @@ snapshots: dependencies: '@types/node': 24.10.9 + '@types/ms@2.1.0': {} + '@types/node@20.19.30': dependencies: undici-types: 6.21.0 @@ -2227,6 +3113,12 @@ snapshots: dependencies: undici-types: 7.16.0 + '@types/plist@3.0.5': + dependencies: + '@types/node': 24.10.9 + xmlbuilder: 15.1.1 + optional: true + '@types/react-dom@19.2.3(@types/react@19.2.10)': dependencies: '@types/react': 19.2.10 @@ -2239,6 +3131,9 @@ snapshots: dependencies: '@types/node': 24.10.9 + '@types/verror@1.10.11': + optional: true + '@types/yauzl@2.10.3': dependencies: '@types/node': 24.10.9 @@ -2347,12 +3242,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@xmldom/xmldom@0.8.11': {} + + abbrev@3.0.1: {} + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 acorn@8.15.0: {} + agent-base@7.1.4: {} + + ajv-keywords@3.5.2(ajv@6.12.6): + dependencies: + ajv: 6.12.6 + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -2362,10 +3267,14 @@ snapshots: ansi-regex@5.0.1: {} + ansi-regex@6.2.2: {} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 + ansi-styles@6.2.3: {} + any-promise@1.3.0: {} anymatch@3.1.3: @@ -2373,12 +3282,69 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 + app-builder-bin@5.0.0-alpha.12: {} + + app-builder-lib@26.7.0(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.7.0): + dependencies: + '@develar/schema-utils': 2.6.5 + '@electron/asar': 3.4.1 + '@electron/fuses': 1.8.0 + '@electron/get': 3.1.0 + '@electron/notarize': 2.5.0 + '@electron/osx-sign': 1.3.3 + '@electron/rebuild': 4.0.3 + '@electron/universal': 2.0.3 + '@malept/flatpak-bundler': 0.4.0 + '@types/fs-extra': 9.0.13 + async-exit-hook: 2.0.1 + builder-util: 26.4.1 + builder-util-runtime: 9.5.1 + chromium-pickle-js: 0.2.0 + ci-info: 4.3.1 + debug: 4.4.3 + dmg-builder: 26.7.0(electron-builder-squirrel-windows@26.7.0) + dotenv: 16.6.1 + dotenv-expand: 11.0.7 + ejs: 3.1.10 + electron-builder-squirrel-windows: 26.7.0(dmg-builder@26.7.0) + electron-publish: 26.6.0 + fs-extra: 10.1.0 + hosted-git-info: 4.1.0 + isbinaryfile: 5.0.7 + jiti: 2.6.1 + js-yaml: 4.1.1 + json5: 2.2.3 + lazy-val: 1.0.5 + minimatch: 10.1.1 + plist: 3.1.0 + proper-lockfile: 4.1.2 + resedit: 1.7.2 + semver: 7.7.3 + tar: 7.5.7 + temp-file: 3.4.0 + tiny-async-pool: 1.3.0 + which: 5.0.0 + transitivePeerDependencies: + - supports-color + arg@5.0.2: {} argparse@2.0.1: {} + assert-plus@1.0.0: + optional: true + + astral-regex@2.0.0: + optional: true + + async-exit-hook@2.0.1: {} + + async@3.2.6: {} + asynckit@0.4.0: {} + at-least-node@1.0.0: {} + autoprefixer@10.4.24(postcss@8.5.6): dependencies: browserslist: 4.28.1 @@ -2398,10 +3364,18 @@ snapshots: balanced-match@1.0.2: {} + base64-js@1.5.1: {} + baseline-browser-mapping@2.9.19: {} binary-extensions@2.3.0: {} + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + boolean@3.2.0: optional: true @@ -2428,6 +3402,56 @@ snapshots: buffer-crc32@0.2.13: {} + buffer-from@1.1.2: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + builder-util-runtime@9.5.1: + dependencies: + debug: 4.4.3 + sax: 1.4.4 + transitivePeerDependencies: + - supports-color + + builder-util@26.4.1: + dependencies: + 7zip-bin: 5.2.0 + '@types/debug': 4.1.12 + app-builder-bin: 5.0.0-alpha.12 + builder-util-runtime: 9.5.1 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + fs-extra: 10.1.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + js-yaml: 4.1.1 + sanitize-filename: 1.6.3 + source-map-support: 0.5.21 + stat-mode: 1.0.0 + temp-file: 3.4.0 + tiny-async-pool: 1.3.0 + transitivePeerDependencies: + - supports-color + + cacache@19.0.1: + dependencies: + '@npmcli/fs': 4.0.0 + fs-minipass: 3.0.3 + glob: 10.5.0 + lru-cache: 10.4.3 + minipass: 7.1.2 + minipass-collect: 2.0.1 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + p-map: 7.0.4 + ssri: 12.0.0 + tar: 7.5.7 + unique-filename: 4.0.0 + cacheable-lookup@5.0.4: {} cacheable-request@7.0.4: @@ -2468,6 +3492,26 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + chownr@3.0.0: {} + + chromium-pickle-js@0.2.0: {} + + ci-info@4.3.1: {} + + ci-info@4.4.0: {} + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-spinners@2.9.2: {} + + cli-truncate@2.1.0: + dependencies: + slice-ansi: 3.0.0 + string-width: 4.2.3 + optional: true + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -2478,6 +3522,10 @@ snapshots: dependencies: mimic-response: 1.0.1 + clone@1.0.4: {} + + clsx@2.1.1: {} + color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -2490,6 +3538,13 @@ snapshots: commander@4.1.1: {} + commander@5.1.0: {} + + commander@9.5.0: + optional: true + + compare-version@0.1.2: {} + concat-map@0.0.1: {} concurrently@9.2.1: @@ -2503,6 +3558,17 @@ snapshots: convert-source-map@2.0.0: {} + core-util-is@1.0.2: + optional: true + + crc@3.8.0: + dependencies: + buffer: 5.7.1 + optional: true + + cross-dirname@0.1.0: + optional: true + cross-env@7.0.3: dependencies: cross-spawn: 7.0.6 @@ -2527,6 +3593,10 @@ snapshots: deep-is@0.1.4: {} + defaults@1.0.4: + dependencies: + clone: 1.0.4 + defer-to-connect@2.0.1: {} define-data-property@1.1.4: @@ -2545,21 +3615,115 @@ snapshots: delayed-stream@1.0.0: {} + detect-libc@2.1.2: {} + detect-node@2.1.0: optional: true didyoumean@1.2.2: {} + dir-compare@4.2.0: + dependencies: + minimatch: 3.1.2 + p-limit: 3.1.0 + dlv@1.1.3: {} + dmg-builder@26.7.0(electron-builder-squirrel-windows@26.7.0): + dependencies: + app-builder-lib: 26.7.0(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.7.0) + builder-util: 26.4.1 + fs-extra: 10.1.0 + iconv-lite: 0.6.3 + js-yaml: 4.1.1 + optionalDependencies: + dmg-license: 1.0.11 + transitivePeerDependencies: + - electron-builder-squirrel-windows + - supports-color + + dmg-license@1.0.11: + dependencies: + '@types/plist': 3.0.5 + '@types/verror': 1.10.11 + ajv: 6.12.6 + crc: 3.8.0 + iconv-corefoundation: 1.1.7 + plist: 3.1.0 + smart-buffer: 4.2.0 + verror: 1.10.1 + optional: true + + dotenv-expand@11.0.7: + dependencies: + dotenv: 16.6.1 + + dotenv@16.6.1: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 es-errors: 1.3.0 gopd: 1.2.0 + eastasianwidth@0.2.0: {} + + ejs@3.1.10: + dependencies: + jake: 10.9.4 + + electron-builder-squirrel-windows@26.7.0(dmg-builder@26.7.0): + dependencies: + app-builder-lib: 26.7.0(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.7.0) + builder-util: 26.4.1 + electron-winstaller: 5.4.0 + transitivePeerDependencies: + - dmg-builder + - supports-color + + electron-builder@26.7.0(electron-builder-squirrel-windows@26.7.0): + dependencies: + app-builder-lib: 26.7.0(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.7.0) + builder-util: 26.4.1 + builder-util-runtime: 9.5.1 + chalk: 4.1.2 + ci-info: 4.4.0 + dmg-builder: 26.7.0(electron-builder-squirrel-windows@26.7.0) + fs-extra: 10.1.0 + lazy-val: 1.0.5 + simple-update-notifier: 2.0.0 + yargs: 17.7.2 + transitivePeerDependencies: + - electron-builder-squirrel-windows + - supports-color + + electron-publish@26.6.0: + dependencies: + '@types/fs-extra': 9.0.13 + builder-util: 26.4.1 + builder-util-runtime: 9.5.1 + chalk: 4.1.2 + form-data: 4.0.5 + fs-extra: 10.1.0 + lazy-val: 1.0.5 + mime: 2.6.0 + transitivePeerDependencies: + - supports-color + electron-to-chromium@1.5.283: {} + electron-winstaller@5.4.0: + dependencies: + '@electron/asar': 3.4.1 + debug: 4.4.3 + fs-extra: 7.0.1 + lodash: 4.17.23 + temp: 0.9.4 + optionalDependencies: + '@electron/windows-sign': 1.2.2 + transitivePeerDependencies: + - supports-color + electron@33.4.11: dependencies: '@electron/get': 2.0.3 @@ -2570,12 +3734,21 @@ snapshots: emoji-regex@8.0.0: {} + emoji-regex@9.2.2: {} + + encoding@0.1.13: + dependencies: + iconv-lite: 0.6.3 + optional: true + end-of-stream@1.4.5: dependencies: once: 1.4.0 env-paths@2.2.1: {} + err-code@2.0.3: {} + es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -2710,6 +3883,8 @@ snapshots: esutils@2.0.3: {} + exponential-backoff@3.1.3: {} + extract-zip@2.0.1: dependencies: debug: 4.4.3 @@ -2720,6 +3895,9 @@ snapshots: transitivePeerDependencies: - supports-color + extsprintf@1.4.1: + optional: true + fast-deep-equal@3.1.3: {} fast-glob@3.3.3: @@ -2750,6 +3928,10 @@ snapshots: dependencies: flat-cache: 4.0.1 + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -2768,6 +3950,11 @@ snapshots: follow-redirects@1.15.11: {} + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + form-data@4.0.5: dependencies: asynckit: 0.4.0 @@ -2778,12 +3965,52 @@ snapshots: fraction.js@5.3.4: {} + framer-motion@12.29.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + dependencies: + motion-dom: 12.29.2 + motion-utils: 12.29.2 + tslib: 2.8.1 + optionalDependencies: + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fs-extra@11.3.3: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fs-extra@7.0.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + fs-extra@8.1.0: dependencies: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 + fs-extra@9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fs-minipass@3.0.3: + dependencies: + minipass: 7.1.2 + + fs.realpath@1.0.0: {} + fsevents@2.3.3: optional: true @@ -2823,6 +4050,24 @@ snapshots: dependencies: is-glob: 4.0.3 + glob@10.5.0: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + global-agent@3.0.0: dependencies: boolean: 3.2.0 @@ -2884,13 +4129,43 @@ snapshots: dependencies: hermes-estree: 0.25.1 + hosted-git-info@4.1.0: + dependencies: + lru-cache: 6.0.0 + http-cache-semantics@4.2.0: {} + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + http2-wrapper@1.0.3: dependencies: quick-lru: 5.1.1 resolve-alpn: 1.2.1 + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + iconv-corefoundation@1.1.7: + dependencies: + cli-truncate: 2.1.0 + node-addon-api: 1.7.2 + optional: true + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + ignore@5.3.2: {} ignore@7.0.5: {} @@ -2902,6 +4177,15 @@ snapshots: imurmurhash@0.1.4: {} + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + ip-address@10.1.0: {} + is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 @@ -2918,12 +4202,36 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-interactive@1.0.0: {} + is-number@7.0.0: {} + is-unicode-supported@0.1.0: {} + + isbinaryfile@4.0.10: {} + + isbinaryfile@5.0.7: {} + isexe@2.0.0: {} + isexe@3.1.1: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jake@10.9.4: + dependencies: + async: 3.2.6 + filelist: 1.0.4 + picocolors: 1.1.1 + jiti@1.21.7: {} + jiti@2.6.1: {} + joi@18.0.2: dependencies: '@hapi/address': 5.1.1 @@ -2957,10 +4265,18 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + jsonfile@6.2.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + keyv@4.5.4: dependencies: json-buffer: 3.0.1 + lazy-val@1.0.5: {} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -2978,12 +4294,43 @@ snapshots: lodash@4.17.23: {} + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + lowercase-keys@2.0.0: {} + lru-cache@10.4.3: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + lucide-react@0.563.0(react@19.2.4): + dependencies: + react: 19.2.4 + + make-fetch-happen@14.0.3: + dependencies: + '@npmcli/agent': 3.0.0 + cacache: 19.0.1 + http-cache-semantics: 4.2.0 + minipass: 7.1.2 + minipass-fetch: 4.0.1 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + negotiator: 1.0.0 + proc-log: 5.0.0 + promise-retry: 2.0.1 + ssri: 12.0.0 + transitivePeerDependencies: + - supports-color + matcher@3.0.0: dependencies: escape-string-regexp: 4.0.0 @@ -3004,20 +4351,76 @@ snapshots: dependencies: mime-db: 1.52.0 + mime@2.6.0: {} + + mimic-fn@2.1.0: {} + mimic-response@1.0.1: {} mimic-response@3.1.0: {} + minimatch@10.1.1: + dependencies: + '@isaacs/brace-expansion': 5.0.0 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.2 + minimatch@9.0.5: dependencies: brace-expansion: 2.0.2 minimist@1.2.8: {} + minipass-collect@2.0.1: + dependencies: + minipass: 7.1.2 + + minipass-fetch@4.0.1: + dependencies: + minipass: 7.1.2 + minipass-sized: 1.0.3 + minizlib: 3.1.0 + optionalDependencies: + encoding: 0.1.13 + + minipass-flush@1.0.5: + dependencies: + minipass: 3.3.6 + + minipass-pipeline@1.2.4: + dependencies: + minipass: 3.3.6 + + minipass-sized@1.0.3: + dependencies: + minipass: 3.3.6 + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@7.1.2: {} + + minizlib@3.1.0: + dependencies: + minipass: 7.1.2 + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + motion-dom@12.29.2: + dependencies: + motion-utils: 12.29.2 + + motion-utils@12.29.2: {} + ms@2.1.3: {} mz@2.7.0: @@ -3030,8 +4433,40 @@ snapshots: natural-compare@1.4.0: {} + negotiator@1.0.0: {} + + node-abi@4.26.0: + dependencies: + semver: 7.7.3 + + node-addon-api@1.7.2: + optional: true + + node-api-version@0.2.1: + dependencies: + semver: 7.7.3 + + node-gyp@11.5.0: + dependencies: + env-paths: 2.2.1 + exponential-backoff: 3.1.3 + graceful-fs: 4.2.11 + make-fetch-happen: 14.0.3 + nopt: 8.1.0 + proc-log: 5.0.0 + semver: 7.7.3 + tar: 7.5.7 + tinyglobby: 0.2.15 + which: 5.0.0 + transitivePeerDependencies: + - supports-color + node-releases@2.0.27: {} + nopt@8.1.0: + dependencies: + abbrev: 3.0.1 + normalize-path@3.0.0: {} normalize-url@6.1.0: {} @@ -3047,6 +4482,10 @@ snapshots: dependencies: wrappy: 1.0.2 + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -3056,6 +4495,18 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + p-cancelable@2.1.1: {} p-limit@3.1.0: @@ -3066,16 +4517,29 @@ snapshots: dependencies: p-limit: 3.1.0 + p-map@7.0.4: {} + + package-json-from-dist@1.0.1: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 path-exists@4.0.0: {} + path-is-absolute@1.0.1: {} + path-key@3.1.1: {} path-parse@1.0.7: {} + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + pe-library@0.4.1: {} + pend@1.2.0: {} picocolors@1.1.1: {} @@ -3088,6 +4552,12 @@ snapshots: pirates@4.0.7: {} + plist@3.1.0: + dependencies: + '@xmldom/xmldom': 0.8.11 + base64-js: 1.5.1 + xmlbuilder: 15.1.1 + postcss-import@15.1.0(postcss@8.5.6): dependencies: postcss: 8.5.6 @@ -3125,10 +4595,28 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postject@1.0.0-alpha.6: + dependencies: + commander: 9.5.0 + optional: true + prelude-ls@1.2.1: {} + proc-log@5.0.0: {} + progress@2.0.3: {} + promise-retry@2.0.1: + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + + proper-lockfile@4.1.2: + dependencies: + graceful-fs: 4.2.11 + retry: 0.12.0 + signal-exit: 3.0.7 + proxy-from-env@1.1.0: {} pump@3.0.3: @@ -3151,16 +4639,32 @@ snapshots: react@19.2.4: {} + read-binary-file-arch@1.0.6: + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + read-cache@1.0.0: dependencies: pify: 2.3.0 + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + readdirp@3.6.0: dependencies: picomatch: 2.3.1 require-directory@2.1.1: {} + resedit@1.7.2: + dependencies: + pe-library: 0.4.1 + resolve-alpn@1.2.1: {} resolve-from@4.0.0: {} @@ -3175,8 +4679,19 @@ snapshots: dependencies: lowercase-keys: 2.0.0 + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + retry@0.12.0: {} + reusify@1.1.0: {} + rimraf@2.6.3: + dependencies: + glob: 7.2.3 + roarr@2.15.4: dependencies: boolean: 3.2.0 @@ -3226,11 +4741,23 @@ snapshots: dependencies: tslib: 2.8.1 + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + sanitize-filename@1.6.3: + dependencies: + truncate-utf8-bytes: 1.0.2 + + sax@1.4.4: {} + scheduler@0.27.0: {} semver-compare@1.0.0: optional: true + semver@5.7.2: {} + semver@6.3.1: {} semver@7.7.3: {} @@ -3248,21 +4775,78 @@ snapshots: shell-quote@1.8.3: {} + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + simple-update-notifier@2.0.0: + dependencies: + semver: 7.7.3 + + slice-ansi@3.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + optional: true + + smart-buffer@4.2.0: {} + + socks-proxy-agent@8.0.5: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + socks: 2.8.7 + transitivePeerDependencies: + - supports-color + + socks@2.8.7: + dependencies: + ip-address: 10.1.0 + smart-buffer: 4.2.0 + source-map-js@1.2.1: {} + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + sprintf-js@1.1.3: optional: true + ssri@12.0.0: + dependencies: + minipass: 7.1.2 + + stat-mode@1.0.0: {} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 + strip-ansi@7.1.2: + dependencies: + ansi-regex: 6.2.2 + strip-json-comments@3.1.1: {} sucrase@3.35.1: @@ -3291,6 +4875,8 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + tailwind-merge@3.4.0: {} + tailwindcss@3.4.19: dependencies: '@alloc/quick-lru': 5.2.0 @@ -3319,6 +4905,24 @@ snapshots: - tsx - yaml + tar@7.5.7: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.1.0 + yallist: 5.0.0 + + temp-file@3.4.0: + dependencies: + async-exit-hook: 2.0.1 + fs-extra: 10.1.0 + + temp@0.9.4: + dependencies: + mkdirp: 0.5.6 + rimraf: 2.6.3 + thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -3327,17 +4931,31 @@ snapshots: dependencies: any-promise: 1.3.0 + tiny-async-pool@1.3.0: + dependencies: + semver: 5.7.2 + tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 + tmp-promise@3.0.3: + dependencies: + tmp: 0.2.5 + + tmp@0.2.5: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 tree-kill@1.2.2: {} + truncate-utf8-bytes@1.0.2: + dependencies: + utf8-byte-length: 1.0.5 + ts-api-utils@2.4.0(typescript@5.9.3): dependencies: typescript: 5.9.3 @@ -3370,8 +4988,18 @@ snapshots: undici-types@7.16.0: {} + unique-filename@4.0.0: + dependencies: + unique-slug: 5.0.0 + + unique-slug@5.0.0: + dependencies: + imurmurhash: 0.1.4 + universalify@0.1.2: {} + universalify@2.0.1: {} + update-browserslist-db@1.2.3(browserslist@4.28.1): dependencies: browserslist: 4.28.1 @@ -3382,8 +5010,17 @@ snapshots: dependencies: punycode: 2.3.1 + utf8-byte-length@1.0.5: {} + util-deprecate@1.0.2: {} + verror@1.10.1: + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.4.1 + optional: true + vite@7.3.1(@types/node@24.10.9)(jiti@1.21.7): dependencies: esbuild: 0.27.2 @@ -3407,10 +5044,18 @@ snapshots: transitivePeerDependencies: - debug + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + which@2.0.2: dependencies: isexe: 2.0.0 + which@5.0.0: + dependencies: + isexe: 3.1.1 + word-wrap@1.2.5: {} wrap-ansi@7.0.0: @@ -3419,12 +5064,24 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.1.2 + wrappy@1.0.2: {} + xmlbuilder@15.1.1: {} + y18n@5.0.8: {} yallist@3.1.1: {} + yallist@4.0.0: {} + + yallist@5.0.0: {} + yargs-parser@21.1.1: {} yargs@17.7.2: diff --git a/postcss.config.js b/postcss.config.js old mode 100755 new mode 100644 diff --git a/public/vite.svg b/public/vite.svg old mode 100755 new mode 100644 diff --git a/release/.icon-icns/icon.icns b/release/.icon-icns/icon.icns deleted file mode 100644 index 0987f3c..0000000 Binary files a/release/.icon-icns/icon.icns and /dev/null differ diff --git a/release/KV Clearnup-0.0.0-universal.dmg b/release/KV Clearnup-0.0.0-universal.dmg deleted file mode 100644 index dd27211..0000000 Binary files a/release/KV Clearnup-0.0.0-universal.dmg and /dev/null differ diff --git a/release/KV Clearnup-0.0.0-universal.dmg.blockmap b/release/KV Clearnup-0.0.0-universal.dmg.blockmap deleted file mode 100644 index 4dd8d3d..0000000 Binary files a/release/KV Clearnup-0.0.0-universal.dmg.blockmap and /dev/null differ diff --git a/release/builder-debug.yml b/release/builder-debug.yml deleted file mode 100644 index f5a0097..0000000 --- a/release/builder-debug.yml +++ /dev/null @@ -1,40 +0,0 @@ -x64: - firstOrDefaultFilePatterns: - - '!**/node_modules/**' - - '!build{,/**/*}' - - '!release{,/**/*}' - - dist/**/* - - dist-electron/**/* - - package.json - - '!**/*.{iml,hprof,orig,pyc,pyo,rbc,swp,csproj,sln,suo,xproj,cc,d.ts,mk,a,o,obj,forge-meta,pdb}' - - '!**/._*' - - '!**/electron-builder.{yaml,yml,json,json5,toml,ts}' - - '!**/{.git,.hg,.svn,CVS,RCS,SCCS,__pycache__,.DS_Store,thumbs.db,.gitignore,.gitkeep,.gitattributes,.npmignore,.idea,.vs,.flowconfig,.jshintrc,.eslintrc,.circleci,.yarn-integrity,.yarn-metadata.json,yarn-error.log,yarn.lock,package-lock.json,npm-debug.log,pnpm-lock.yaml,bun.lock,bun.lockb,appveyor.yml,.travis.yml,circle.yml,.nyc_output,.husky,.github,electron-builder.env}' - - '!.yarn{,/**/*}' - - '!.editorconfig' - - '!.yarnrc.yml' - nodeModuleFilePatterns: - - '**/*' - - dist/**/* - - dist-electron/**/* - - package.json -arm64: - firstOrDefaultFilePatterns: - - '!**/node_modules/**' - - '!build{,/**/*}' - - '!release{,/**/*}' - - dist/**/* - - dist-electron/**/* - - package.json - - '!**/*.{iml,hprof,orig,pyc,pyo,rbc,swp,csproj,sln,suo,xproj,cc,d.ts,mk,a,o,obj,forge-meta,pdb}' - - '!**/._*' - - '!**/electron-builder.{yaml,yml,json,json5,toml,ts}' - - '!**/{.git,.hg,.svn,CVS,RCS,SCCS,__pycache__,.DS_Store,thumbs.db,.gitignore,.gitkeep,.gitattributes,.npmignore,.idea,.vs,.flowconfig,.jshintrc,.eslintrc,.circleci,.yarn-integrity,.yarn-metadata.json,yarn-error.log,yarn.lock,package-lock.json,npm-debug.log,pnpm-lock.yaml,bun.lock,bun.lockb,appveyor.yml,.travis.yml,circle.yml,.nyc_output,.husky,.github,electron-builder.env}' - - '!.yarn{,/**/*}' - - '!.editorconfig' - - '!.yarnrc.yml' - nodeModuleFilePatterns: - - '**/*' - - dist/**/* - - dist-electron/**/* - - package.json diff --git a/release/builder-effective-config.yaml b/release/builder-effective-config.yaml deleted file mode 100644 index 83574f0..0000000 --- a/release/builder-effective-config.yaml +++ /dev/null @@ -1,21 +0,0 @@ -directories: - output: release - buildResources: build -appId: com.kv.clearnup -productName: KV Clearnup -compression: maximum -mac: - target: - - dmg - icon: build/icon.png - category: public.app-category.utilities - hardenedRuntime: false -files: - - filter: - - dist/**/* - - dist-electron/**/* - - package.json -extraResources: - - from: backend/dist/universal/backend - to: backend -electronVersion: 33.4.11 diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Electron Framework b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Electron Framework deleted file mode 120000 index b0f7c45..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Electron Framework +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Electron Framework \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Helpers b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Helpers deleted file mode 120000 index feb1cc0..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Helpers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Helpers \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Libraries b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Libraries deleted file mode 120000 index bc941ee..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Libraries +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Libraries \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Resources b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Resources deleted file mode 120000 index 953ee36..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Resources +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Resources \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Electron Framework b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Electron Framework deleted file mode 100755 index b2ebafd..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Electron Framework and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Helpers/chrome_crashpad_handler b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Helpers/chrome_crashpad_handler deleted file mode 100755 index 442c358..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Helpers/chrome_crashpad_handler and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libEGL.dylib b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libEGL.dylib deleted file mode 100755 index b4eea0e..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libEGL.dylib and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libGLESv2.dylib b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libGLESv2.dylib deleted file mode 100755 index f06e128..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libGLESv2.dylib and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libffmpeg.dylib b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libffmpeg.dylib deleted file mode 100755 index fd3e81b..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libffmpeg.dylib and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libvk_swiftshader.dylib b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libvk_swiftshader.dylib deleted file mode 100755 index 2a22d93..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/libvk_swiftshader.dylib and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/vk_swiftshader_icd.json b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/vk_swiftshader_icd.json deleted file mode 100644 index d63cfd9..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries/vk_swiftshader_icd.json +++ /dev/null @@ -1 +0,0 @@ -{"file_format_version": "1.0.0", "ICD": {"library_path": "./libvk_swiftshader.dylib", "api_version": "1.0.5"}} \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/Info.plist b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/Info.plist deleted file mode 100644 index a0e50bd..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/Info.plist +++ /dev/null @@ -1,43 +0,0 @@ - - - - - CFBundleExecutable - Electron Framework - CFBundleIdentifier - com.github.Electron.framework - CFBundleName - Electron Framework - CFBundlePackageType - FMWK - CFBundleVersion - 33.4.11 - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTSDKBuild - 23F73 - DTSDKName - macosx14.5 - DTXcode - 1540 - DTXcodeBuild - 15F31d - LSEnvironment - - MallocNanoZone - 0 - - NSSupportsAutomaticGraphicsSwitching - - ElectronAsarIntegrity - - Resources/app.asar - - algorithm - SHA256 - hash - 7f0ca3c6fae4ccfe2d088e243546c0f695b844fbf714bd59e8c6111fb873f334 - - - - \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/MainMenu.nib b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/MainMenu.nib deleted file mode 100644 index 7f7483c..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/MainMenu.nib and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/af.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/af.lproj/locale.pak deleted file mode 100644 index cc011c0..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/af.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/am.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/am.lproj/locale.pak deleted file mode 100644 index a800c42..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/am.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ar.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ar.lproj/locale.pak deleted file mode 100644 index a28a665..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ar.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/bg.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/bg.lproj/locale.pak deleted file mode 100644 index 8ea02d4..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/bg.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/bn.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/bn.lproj/locale.pak deleted file mode 100644 index 2aaaa33..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/bn.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ca.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ca.lproj/locale.pak deleted file mode 100644 index 6931392..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ca.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/chrome_100_percent.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/chrome_100_percent.pak deleted file mode 100644 index c1b322a..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/chrome_100_percent.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/chrome_200_percent.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/chrome_200_percent.pak deleted file mode 100644 index b6c5528..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/chrome_200_percent.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/cs.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/cs.lproj/locale.pak deleted file mode 100644 index 9b5430d..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/cs.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/da.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/da.lproj/locale.pak deleted file mode 100644 index 44f380b..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/da.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/de.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/de.lproj/locale.pak deleted file mode 100644 index 205ffac..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/de.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/el.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/el.lproj/locale.pak deleted file mode 100644 index 9ce27bc..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/el.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/en.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/en.lproj/locale.pak deleted file mode 100644 index 3dad459..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/en.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/en_GB.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/en_GB.lproj/locale.pak deleted file mode 100644 index 6b56bb2..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/en_GB.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/es.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/es.lproj/locale.pak deleted file mode 100644 index 814e89c..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/es.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/es_419.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/es_419.lproj/locale.pak deleted file mode 100644 index 9260d25..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/es_419.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/et.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/et.lproj/locale.pak deleted file mode 100644 index 052e514..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/et.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/fa.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/fa.lproj/locale.pak deleted file mode 100644 index d7ed3ae..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/fa.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/fi.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/fi.lproj/locale.pak deleted file mode 100644 index 9fcd642..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/fi.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/fil.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/fil.lproj/locale.pak deleted file mode 100644 index d715b5b..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/fil.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/fr.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/fr.lproj/locale.pak deleted file mode 100644 index af99d4a..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/fr.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/gu.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/gu.lproj/locale.pak deleted file mode 100644 index 3f6e3ac..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/gu.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/he.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/he.lproj/locale.pak deleted file mode 100644 index 1cb6722..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/he.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/hi.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/hi.lproj/locale.pak deleted file mode 100644 index b531229..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/hi.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/hr.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/hr.lproj/locale.pak deleted file mode 100644 index 361d387..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/hr.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/hu.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/hu.lproj/locale.pak deleted file mode 100644 index 20e388d..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/hu.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/icudtl.dat b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/icudtl.dat deleted file mode 100644 index 331d2f3..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/icudtl.dat and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/id.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/id.lproj/locale.pak deleted file mode 100644 index 47e9b75..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/id.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/it.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/it.lproj/locale.pak deleted file mode 100644 index 435a600..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/it.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ja.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ja.lproj/locale.pak deleted file mode 100644 index 8bafe92..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ja.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/kn.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/kn.lproj/locale.pak deleted file mode 100644 index dac9982..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/kn.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ko.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ko.lproj/locale.pak deleted file mode 100644 index 7dde953..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ko.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/lt.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/lt.lproj/locale.pak deleted file mode 100644 index ca06fe2..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/lt.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/lv.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/lv.lproj/locale.pak deleted file mode 100644 index ffb14e2..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/lv.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ml.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ml.lproj/locale.pak deleted file mode 100644 index 3c9bb9c..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ml.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/mr.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/mr.lproj/locale.pak deleted file mode 100644 index 13b5698..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/mr.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ms.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ms.lproj/locale.pak deleted file mode 100644 index 146332e..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ms.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/nb.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/nb.lproj/locale.pak deleted file mode 100644 index b405f82..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/nb.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/nl.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/nl.lproj/locale.pak deleted file mode 100644 index 716a839..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/nl.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/pl.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/pl.lproj/locale.pak deleted file mode 100644 index 91fbb44..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/pl.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/pt_BR.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/pt_BR.lproj/locale.pak deleted file mode 100644 index 5cf41aa..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/pt_BR.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/pt_PT.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/pt_PT.lproj/locale.pak deleted file mode 100644 index 6ed69b6..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/pt_PT.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/resources.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/resources.pak deleted file mode 100644 index d7bd7ce..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/resources.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ro.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ro.lproj/locale.pak deleted file mode 100644 index 3ea3348..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ro.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ru.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ru.lproj/locale.pak deleted file mode 100644 index 0853325..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ru.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/sk.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/sk.lproj/locale.pak deleted file mode 100644 index 98fc5ea..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/sk.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/sl.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/sl.lproj/locale.pak deleted file mode 100644 index f274550..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/sl.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/sr.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/sr.lproj/locale.pak deleted file mode 100644 index c6ec470..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/sr.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/sv.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/sv.lproj/locale.pak deleted file mode 100644 index ad592b5..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/sv.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/sw.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/sw.lproj/locale.pak deleted file mode 100644 index 0f0f141..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/sw.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ta.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ta.lproj/locale.pak deleted file mode 100644 index 08c14a2..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ta.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/te.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/te.lproj/locale.pak deleted file mode 100644 index e30eca7..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/te.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/th.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/th.lproj/locale.pak deleted file mode 100644 index a6f833c..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/th.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/tr.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/tr.lproj/locale.pak deleted file mode 100644 index 81f5c1f..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/tr.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/uk.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/uk.lproj/locale.pak deleted file mode 100644 index 267b1b4..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/uk.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ur.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ur.lproj/locale.pak deleted file mode 100644 index f50be88..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/ur.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/v8_context_snapshot.arm64.bin b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/v8_context_snapshot.arm64.bin deleted file mode 100644 index 15392b9..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/v8_context_snapshot.arm64.bin and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/v8_context_snapshot.x86_64.bin b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/v8_context_snapshot.x86_64.bin deleted file mode 100644 index 1997004..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/v8_context_snapshot.x86_64.bin and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/vi.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/vi.lproj/locale.pak deleted file mode 100644 index 81e1c04..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/vi.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/zh_CN.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/zh_CN.lproj/locale.pak deleted file mode 100644 index 49a1fd4..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/zh_CN.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/zh_TW.lproj/locale.pak b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/zh_TW.lproj/locale.pak deleted file mode 100644 index a215172..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/zh_TW.lproj/locale.pak and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/_CodeSignature/CodeResources b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/_CodeSignature/CodeResources deleted file mode 100644 index c6c48de..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/A/_CodeSignature/CodeResources +++ /dev/null @@ -1,1239 +0,0 @@ - - - - - files - - Resources/Info.plist - - TqQXbntg1IsdKKtqp1fr2Gvr20Y= - - Resources/MainMenu.nib - - 8vZwWbxqzsKMQ1nd2hqwWHK4HT8= - - Resources/af.lproj/locale.pak - - hash - - uLnyXkJjrmUp0xNL8YpYvL/Q3hs= - - optional - - - Resources/am.lproj/locale.pak - - hash - - 1G9kNpIMn2XaarV0gQsgqwkexEc= - - optional - - - Resources/ar.lproj/locale.pak - - hash - - iNWDg+STNyErbabe8gLvXsk/X7I= - - optional - - - Resources/bg.lproj/locale.pak - - hash - - fjbPLQHt0TjTdrG9pg8lDEdDeHw= - - optional - - - Resources/bn.lproj/locale.pak - - hash - - cviz3zlSE//ujT5vudiHktJ6Nc0= - - optional - - - Resources/ca.lproj/locale.pak - - hash - - u/kzcf5MQhvQ2g1dFBcxtmg+7/c= - - optional - - - Resources/chrome_100_percent.pak - - UYbD+Ms1havacqPmXB1kBJR16O4= - - Resources/chrome_200_percent.pak - - o24x1fjlNi482fnoMsVYu6Fhv0g= - - Resources/cs.lproj/locale.pak - - hash - - Sey/fJYU+uMRX2sMRNseWp+mPuY= - - optional - - - Resources/da.lproj/locale.pak - - hash - - fg2FHkG/jObup0w+nVwa6iTC2CA= - - optional - - - Resources/de.lproj/locale.pak - - hash - - JZ75GFOQVIOFA5q38Wk7YNUjj54= - - optional - - - Resources/el.lproj/locale.pak - - hash - - LVaRCu5VW4Uw5gm1slo0IsXRRIU= - - optional - - - Resources/en.lproj/locale.pak - - hash - - frk4UciuzgRLccBN6zptbDzqeXY= - - optional - - - Resources/en_GB.lproj/locale.pak - - hash - - 3oL7jyiq1XQfpMCaa1C6s97siY4= - - optional - - - Resources/es.lproj/locale.pak - - hash - - LawDuQIQUnQP9W+uC7pmcCIgr1s= - - optional - - - Resources/es_419.lproj/locale.pak - - hash - - KWkdpHhefc2omgqvCjJhfxS29Iw= - - optional - - - Resources/et.lproj/locale.pak - - hash - - Lf0RCGbEXQm31wVtCmMuF5m3Omk= - - optional - - - Resources/fa.lproj/locale.pak - - hash - - XKFbVDOTC3BSx/QRgei7p9m8TzI= - - optional - - - Resources/fi.lproj/locale.pak - - hash - - IaOPo6RgWzrWOT8EF+uEzukJ1bw= - - optional - - - Resources/fil.lproj/locale.pak - - hash - - R8A8LXB+yfkOSITIpIDtv38w4aw= - - optional - - - Resources/fr.lproj/locale.pak - - hash - - sO1m1q29+cAp4NJbIFSamaGY4u4= - - optional - - - Resources/gu.lproj/locale.pak - - hash - - Dmad7raX4JDjyFhtqXIqYDQpwzo= - - optional - - - Resources/he.lproj/locale.pak - - hash - - zZcAvsjF2lIDfFKreQvV55FpTxk= - - optional - - - Resources/hi.lproj/locale.pak - - hash - - YFACpuRnMOxgWpn6LwWnJAQhRg8= - - optional - - - Resources/hr.lproj/locale.pak - - hash - - 9Jc1M8tPrXCHAo5eurz+/TLXfio= - - optional - - - Resources/hu.lproj/locale.pak - - hash - - oJsvFgEDeUe432FtpWEYi3uO3u4= - - optional - - - Resources/icudtl.dat - - mfVFvDloeMelPpinkBfZUxr3wfU= - - Resources/id.lproj/locale.pak - - hash - - DTURYzUINsoKrOsKeHU63nI3PVA= - - optional - - - Resources/it.lproj/locale.pak - - hash - - 955SlLJOLvv/5WFhYR9oOgKhYfc= - - optional - - - Resources/ja.lproj/locale.pak - - hash - - CUdAInx9LvmTwbUgKyTR4T+qQCg= - - optional - - - Resources/kn.lproj/locale.pak - - hash - - ty1gLR7HQ5quoo2jB0qWsjQoerw= - - optional - - - Resources/ko.lproj/locale.pak - - hash - - /p8k9IiiNJYq6kH6vzPol5QK6lc= - - optional - - - Resources/lt.lproj/locale.pak - - hash - - mRfoMpud27mcp5f9KBn8EAq/uW0= - - optional - - - Resources/lv.lproj/locale.pak - - hash - - 9T+IN+XMJJ4bDFPqVBLrfxMn8Y8= - - optional - - - Resources/ml.lproj/locale.pak - - hash - - ZyrOVvIbCdEbOrWikQ6bqJyfljs= - - optional - - - Resources/mr.lproj/locale.pak - - hash - - bhH+oSUXaRL49rVWfhcyD5OiwHE= - - optional - - - Resources/ms.lproj/locale.pak - - hash - - JhQ/cdZ+YEPbamZAJ/dDGiI86Ew= - - optional - - - Resources/nb.lproj/locale.pak - - hash - - bgk5Cn027npevVNcoExGTygV17c= - - optional - - - Resources/nl.lproj/locale.pak - - hash - - 636vQ/LNfHWBDhUPu4ZJaUoLKXc= - - optional - - - Resources/pl.lproj/locale.pak - - hash - - U1w1vKLIVX/J6ny/Y3JKjziE0WE= - - optional - - - Resources/pt_BR.lproj/locale.pak - - hash - - EKItyqCeVD6OWbvotXh7V8lp6J8= - - optional - - - Resources/pt_PT.lproj/locale.pak - - hash - - 4hGnG4ENQSE6kcq1xzT6pBXb8AU= - - optional - - - Resources/resources.pak - - UKFXVkCvpdF9QLvVvbalQgqH57w= - - Resources/ro.lproj/locale.pak - - hash - - zSigNqBssu8l2uG7QpCUN3MyCeg= - - optional - - - Resources/ru.lproj/locale.pak - - hash - - xVI4HWV7x4qPWXj0ok6jFis9JzE= - - optional - - - Resources/sk.lproj/locale.pak - - hash - - zNRgYO8OkT2cwXVU5H4nQiulh9o= - - optional - - - Resources/sl.lproj/locale.pak - - hash - - XARQinw0cgmGhIcs2idgknoHM/g= - - optional - - - Resources/sr.lproj/locale.pak - - hash - - EgXT+eZCnGW9mdyhM0HC/nzv8mc= - - optional - - - Resources/sv.lproj/locale.pak - - hash - - RuUvjJp4tev1SduyYg8BTKBO3vg= - - optional - - - Resources/sw.lproj/locale.pak - - hash - - GGU8FloO8uA+kol/Zg/IA1VPF2c= - - optional - - - Resources/ta.lproj/locale.pak - - hash - - o0f0PbKTACR6RG92u/u+KOpm0ms= - - optional - - - Resources/te.lproj/locale.pak - - hash - - cxGQ9nP5XPW/MQ1x74rNcSB6VYw= - - optional - - - Resources/th.lproj/locale.pak - - hash - - dDSQ1gB/1nxK6f3v6gv76UNEebI= - - optional - - - Resources/tr.lproj/locale.pak - - hash - - FJa5LOIwVLZCaf0cfbWI4QLzHhE= - - optional - - - Resources/uk.lproj/locale.pak - - hash - - 1RMDJpx1mEoZZ593Y/hxCs1MPzo= - - optional - - - Resources/ur.lproj/locale.pak - - hash - - gGPa9bDCNwvnqSk2qFqf+ppCYtc= - - optional - - - Resources/v8_context_snapshot.arm64.bin - - CwjdPJoZJVEhuxTMA3ft6eQR+Dk= - - Resources/v8_context_snapshot.x86_64.bin - - 9JQv+XlvUPg0plQcHxUOI+WSSB0= - - Resources/vi.lproj/locale.pak - - hash - - MXqHvNp7IF1KiYXNG7Yd+g3tYUg= - - optional - - - Resources/zh_CN.lproj/locale.pak - - hash - - Xq4qqGmD6abczzWArpxi3K7G3So= - - optional - - - Resources/zh_TW.lproj/locale.pak - - hash - - hnRwriOnfoRBPbEkbvRCVmrlu8w= - - optional - - - - files2 - - Helpers/chrome_crashpad_handler - - cdhash - - rWCzaVHe8Jtp0vOPt3TJX7w9BsI= - - requirement - cdhash H"ad60b36951def09b69d2f38fb774c95fbc3d06c2" or cdhash H"a6779207c71637fd07adf2c744b0f2aeca97a5a2" - - Libraries/libEGL.dylib - - hash2 - - FKwK2aLmQ8e8NraoMWc3wkUOaT0JvBxTd4Q4DETRuII= - - - Libraries/libGLESv2.dylib - - hash2 - - 8nmHsjOMxm1gwK0kW7Noa+aDtqno5bQuYbxp6rgPHD4= - - - Libraries/libffmpeg.dylib - - hash2 - - 5Sk1zSTBLgpzOWyLEVBLRStFjfw296f9AC0C2Y8kxhI= - - - Libraries/libvk_swiftshader.dylib - - hash2 - - /6hHaO3OOcL81BqYU7KThUti8DOUhl57bv1MxhCO+Rc= - - - Libraries/vk_swiftshader_icd.json - - hash2 - - 1xfZFeMefCeUi4CzarNOLYl4iBFMXH0K+DX5PrU+WPU= - - - Resources/Info.plist - - hash2 - - hUAC9bc3Hlkk2Ji2Voe+TthQXFTnILU9q/L73YXJLn0= - - - Resources/MainMenu.nib - - hash2 - - SyFo3i1tmgmyD6qiMTnV8l9zsllWcd4lhy0ZG2k52Bk= - - - Resources/af.lproj/locale.pak - - hash2 - - b7GfRaCCyeJZpuxGSFHTyEn8BSpJrWJqATWUQJPAZYs= - - optional - - - Resources/am.lproj/locale.pak - - hash2 - - Zq9I33YjjSQaqhfsfZBd448L2pxUoTbMwYq6X6l/394= - - optional - - - Resources/ar.lproj/locale.pak - - hash2 - - ubNuKgcgfa0UklPEELNMTY38lm1oXa0wgWGpQwwMSL4= - - optional - - - Resources/bg.lproj/locale.pak - - hash2 - - pId/jBiHtUAW1bsy8WwFJBaj2ljU4v5bngfHw2qpltE= - - optional - - - Resources/bn.lproj/locale.pak - - hash2 - - ZMHpB7InP09xCX/Nw73hX5O0ro8TBAU26xVPHBeSPAg= - - optional - - - Resources/ca.lproj/locale.pak - - hash2 - - Seuvl3kzEbusP+KajY15fg7xWYRKVB3dn8y6qBNIdk8= - - optional - - - Resources/chrome_100_percent.pak - - hash2 - - oJ9r4Nt+nM4RGEpEEeTfTeC85Hi93z8fuGZYqO2uCTw= - - - Resources/chrome_200_percent.pak - - hash2 - - Gjg5EcvNcSfWX9QFH5YZI6qFhIvyBkffoGUrJUjC7wA= - - - Resources/cs.lproj/locale.pak - - hash2 - - tsY5+H64yFfzHl0kFXC39JMNMrIo9k38ggM4N9+6aEk= - - optional - - - Resources/da.lproj/locale.pak - - hash2 - - VDLIBdynzj19GB+7BjQk7ovGETL/Nbdrvs5Pn/ZAHAg= - - optional - - - Resources/de.lproj/locale.pak - - hash2 - - 6vYnrBrM1UIgdAXMzUo3srjAKfUB3yPXtSzRsYy/W0o= - - optional - - - Resources/el.lproj/locale.pak - - hash2 - - tJpmQK1fnvp2Tg8UPLTk6586PtsmoapNYK7eoBGOF4g= - - optional - - - Resources/en.lproj/locale.pak - - hash2 - - zLtPEhS6H1/7kBMTrYX9pSf1PI1agPs2RUIWemLtlD0= - - optional - - - Resources/en_GB.lproj/locale.pak - - hash2 - - qOezodiWNsOrR47q94Nklvg9w7rd6tqxDkzUZ6eSv8w= - - optional - - - Resources/es.lproj/locale.pak - - hash2 - - KyeeLI4/ZByUFuWId6FQg845r8VScfTAW1zootqHt7I= - - optional - - - Resources/es_419.lproj/locale.pak - - hash2 - - SfhOU67I1hw6sycwnxNN0MPA6iCCcITEQfKCZQEP32Y= - - optional - - - Resources/et.lproj/locale.pak - - hash2 - - eGQHuhzmgmtA+7scGociyufuYGPu5fES9ZsyW9/7v6Y= - - optional - - - Resources/fa.lproj/locale.pak - - hash2 - - 9JsV8UJnLBDw11vfZROiqeRlKUR2niAVC+vy1zaKk30= - - optional - - - Resources/fi.lproj/locale.pak - - hash2 - - Mj5zUvRRjznJshTAPz9zjhjxL+Yv+lTqcAWUoP+R5PQ= - - optional - - - Resources/fil.lproj/locale.pak - - hash2 - - r/a44ILXVRDDmIWK9nAxO4N7sdYw2X8A28HkgqFNyY4= - - optional - - - Resources/fr.lproj/locale.pak - - hash2 - - hgo7gjbAKP8gwbR5RDSCcXWIojy3Z14RHkwskVc7+7U= - - optional - - - Resources/gu.lproj/locale.pak - - hash2 - - fL/GiOOBK7bls4AgkMiV1zSzMWXXYCJi3QsqM8nGGro= - - optional - - - Resources/he.lproj/locale.pak - - hash2 - - 19wwaKX8ARW4Y4JCcMe0M4+vHIxzx3WgZqLOs9zPAJU= - - optional - - - Resources/hi.lproj/locale.pak - - hash2 - - U/IRYWclk1EucAgotwKP4qfKU35p4fUY2jggoPHpNrI= - - optional - - - Resources/hr.lproj/locale.pak - - hash2 - - aTkwMEbR/8gTqPRBal7RQnHF89zbj6O+cJl5khMrBn8= - - optional - - - Resources/hu.lproj/locale.pak - - hash2 - - YDXiHX7VY61PE8ndxBLDGcI6kDkIFX++a8EgYjdVqtM= - - optional - - - Resources/icudtl.dat - - hash2 - - mumMBsuw6kPFzWtXJTEMAIxl5GByQhoRGMuI4d6ai5I= - - - Resources/id.lproj/locale.pak - - hash2 - - b51SOKsMym5QMfoDfFHCqE0L7mKeS7GGB6D5fTSEWEc= - - optional - - - Resources/it.lproj/locale.pak - - hash2 - - 5LvKrmbkLz2XpKQd+MMvGWRLDZKsvFfLnAgANmVI0Zo= - - optional - - - Resources/ja.lproj/locale.pak - - hash2 - - wXmygo7h3K/QiJu5CcIsHm7AhyeGWXVthmX3yaNYjj0= - - optional - - - Resources/kn.lproj/locale.pak - - hash2 - - ebHatBwAnX4vlMZg45yqfgwfuFuBHFMqsGhNSA5pxcI= - - optional - - - Resources/ko.lproj/locale.pak - - hash2 - - WlvLF8PoKnMrK0SwWkQ+hf4aJW+MTi6DIeTVkkuxAh4= - - optional - - - Resources/lt.lproj/locale.pak - - hash2 - - a3qY0eI/hlar/8IaIUIv5vREd5snQ1Au3iu1BczIMlw= - - optional - - - Resources/lv.lproj/locale.pak - - hash2 - - KsuG9cn1XgSqADmPiao56MMkg4zCIqZkIljVVUKdC6w= - - optional - - - Resources/ml.lproj/locale.pak - - hash2 - - 2hwpdo1oyywj0tiIUiCNuuVlUmDR91n30BbrDx/KyB8= - - optional - - - Resources/mr.lproj/locale.pak - - hash2 - - NAm5P6mXmjUuko+MJlhIPOxDBwD8INSJ9pZeAu6U0io= - - optional - - - Resources/ms.lproj/locale.pak - - hash2 - - 73w9m9hcA4KaOpY3bMTzG+SQuBQzBVj7CfILe2jWyjc= - - optional - - - Resources/nb.lproj/locale.pak - - hash2 - - zOusBIXhxyk8MskhaHDObBo5OfL1gaGNSCYOEWZSXi0= - - optional - - - Resources/nl.lproj/locale.pak - - hash2 - - 7LTx+opI2GOMHBDKVefKbIBUc8LDDlC8ms0R2jK8pbc= - - optional - - - Resources/pl.lproj/locale.pak - - hash2 - - /xv685UbyymR25GE4nOKRPbzFDY23DtF6c0cWFVKRlA= - - optional - - - Resources/pt_BR.lproj/locale.pak - - hash2 - - pSw5mKLf8tnJvsTIE/ttJFn+9DXA/xZJkYRwIuNMGnw= - - optional - - - Resources/pt_PT.lproj/locale.pak - - hash2 - - F13pVZdBjZjVmQdXe+G5/KrXL7jY7ueQpgMZmVGEq8w= - - optional - - - Resources/resources.pak - - hash2 - - xRWxpplaxZPFtNvuXq3h2brk36mKyl7y8FkAh+hs5v8= - - - Resources/ro.lproj/locale.pak - - hash2 - - DVhBqnk3Kkmt35wQ3vDgr0DiXbyY4fVm5XMLUj51VkU= - - optional - - - Resources/ru.lproj/locale.pak - - hash2 - - hdw8aohBya0S/HGzn+sf8DgxXVqHRYnKQhCIFV2HHmg= - - optional - - - Resources/sk.lproj/locale.pak - - hash2 - - A1PGLkKMl62WUa8lsE0k62Q+q1aE/pj3eMROMfWKvlg= - - optional - - - Resources/sl.lproj/locale.pak - - hash2 - - +CQeVZezi9HPwCanb19jut7ORk4soH/R2sFsg/OcD/c= - - optional - - - Resources/sr.lproj/locale.pak - - hash2 - - +pT55NXnWvj1Dfj5NJZWI2Rz+7Oi0+BnYC18b3+5v8E= - - optional - - - Resources/sv.lproj/locale.pak - - hash2 - - XRGhwsNie/XpaHCv1EXObK54Ej2vhOThVIEehc5lNGE= - - optional - - - Resources/sw.lproj/locale.pak - - hash2 - - ZW7rA+yT3So2WP13DISS8Rgbb1jrPyDzDfAifFxLxV0= - - optional - - - Resources/ta.lproj/locale.pak - - hash2 - - 1/a5jwxxQXCNJ8ngbgdhCjKoB5jbetIQBHgNbQsysR0= - - optional - - - Resources/te.lproj/locale.pak - - hash2 - - HEej8jUpRW0ZibtFTt3UuoBX2SwEs4KxBxcPiTb4Meo= - - optional - - - Resources/th.lproj/locale.pak - - hash2 - - zA6ACCZkNsbvJji/lX1gkOsKREFwjXTWvfa3dL8OMWE= - - optional - - - Resources/tr.lproj/locale.pak - - hash2 - - PVi4G0wjINt9AGIee3Pk2JVIKZDhG4tpxXHC9vJcNuk= - - optional - - - Resources/uk.lproj/locale.pak - - hash2 - - AeMF1eJWSA1MJb8wZs6TefNL6Ed0rnc5856rd4qvfdo= - - optional - - - Resources/ur.lproj/locale.pak - - hash2 - - OdNP8g+QrDX+Nr1rwt4z1ZdWd0IUTARNVwl8j3KzAJ8= - - optional - - - Resources/v8_context_snapshot.arm64.bin - - hash2 - - T5bXv9epVXoW4tCcW9WY5OGyoxGrE0gufz6032RjTzM= - - - Resources/v8_context_snapshot.x86_64.bin - - hash2 - - JDW169IZzPniykCGbwRQYHmbfzoovFf3/me3PfIm3h0= - - - Resources/vi.lproj/locale.pak - - hash2 - - 59Oy1w1/QESk0H9jlkpNiumXzoJkgddgOqv+voFbSfA= - - optional - - - Resources/zh_CN.lproj/locale.pak - - hash2 - - /HVnepCZJuoZ+dFYZxE86aD2T5LbCaqa2nwGAJzuoMU= - - optional - - - Resources/zh_TW.lproj/locale.pak - - hash2 - - wNEqSvQuMLfe4+4D6O+nbNpxEEykT81dHrwrZP7jBkI= - - optional - - - - rules - - ^Resources/ - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^version.plist$ - - - rules2 - - .*\.dSYM($|/) - - weight - 11 - - ^(.*/)?\.DS_Store$ - - omit - - weight - 2000 - - ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ - - nested - - weight - 10 - - ^.* - - ^Info\.plist$ - - omit - - weight - 20 - - ^PkgInfo$ - - omit - - weight - 20 - - ^Resources/ - - weight - 20 - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^[^/]+$ - - nested - - weight - 10 - - ^embedded\.provisionprofile$ - - weight - 20 - - ^version\.plist$ - - weight - 20 - - - - diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/Current b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/Current deleted file mode 120000 index 8c7e5a6..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Electron Framework.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (GPU).app/Contents/Info.plist b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (GPU).app/Contents/Info.plist deleted file mode 100644 index 08a055e..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (GPU).app/Contents/Info.plist +++ /dev/null @@ -1,47 +0,0 @@ - - - - - CFBundleDisplayName - KV Clearnup Helper (GPU) - CFBundleExecutable - KV Clearnup Helper (GPU) - CFBundleIdentifier - com.kv.clearnup.helper.GPU - CFBundleName - Electron Helper (GPU) - CFBundlePackageType - APPL - CFBundleVersion - 0.0.0 - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTSDKBuild - 23F73 - DTSDKName - macosx14.5 - DTXcode - 1540 - DTXcodeBuild - 15F31d - LSEnvironment - - MallocNanoZone - 0 - - LSUIElement - - NSSupportsAutomaticGraphicsSwitching - - ElectronAsarIntegrity - - Resources/app.asar - - algorithm - SHA256 - hash - 7f0ca3c6fae4ccfe2d088e243546c0f695b844fbf714bd59e8c6111fb873f334 - - - - \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (GPU).app/Contents/MacOS/KV Clearnup Helper (GPU) b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (GPU).app/Contents/MacOS/KV Clearnup Helper (GPU) deleted file mode 100755 index 79a9374..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (GPU).app/Contents/MacOS/KV Clearnup Helper (GPU) and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (GPU).app/Contents/PkgInfo b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (GPU).app/Contents/PkgInfo deleted file mode 100644 index bd04210..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (GPU).app/Contents/PkgInfo +++ /dev/null @@ -1 +0,0 @@ -APPL???? \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (GPU).app/Contents/_CodeSignature/CodeResources b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (GPU).app/Contents/_CodeSignature/CodeResources deleted file mode 100644 index d5d0fd7..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (GPU).app/Contents/_CodeSignature/CodeResources +++ /dev/null @@ -1,115 +0,0 @@ - - - - - files - - files2 - - rules - - ^Resources/ - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^version.plist$ - - - rules2 - - .*\.dSYM($|/) - - weight - 11 - - ^(.*/)?\.DS_Store$ - - omit - - weight - 2000 - - ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ - - nested - - weight - 10 - - ^.* - - ^Info\.plist$ - - omit - - weight - 20 - - ^PkgInfo$ - - omit - - weight - 20 - - ^Resources/ - - weight - 20 - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^[^/]+$ - - nested - - weight - 10 - - ^embedded\.provisionprofile$ - - weight - 20 - - ^version\.plist$ - - weight - 20 - - - - diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (Plugin).app/Contents/Info.plist b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (Plugin).app/Contents/Info.plist deleted file mode 100644 index d69bc7e..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (Plugin).app/Contents/Info.plist +++ /dev/null @@ -1,47 +0,0 @@ - - - - - CFBundleDisplayName - KV Clearnup Helper (Plugin) - CFBundleExecutable - KV Clearnup Helper (Plugin) - CFBundleIdentifier - com.kv.clearnup.helper.Plugin - CFBundleName - Electron Helper (Plugin) - CFBundlePackageType - APPL - CFBundleVersion - 0.0.0 - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTSDKBuild - 23F73 - DTSDKName - macosx14.5 - DTXcode - 1540 - DTXcodeBuild - 15F31d - LSEnvironment - - MallocNanoZone - 0 - - LSUIElement - - NSSupportsAutomaticGraphicsSwitching - - ElectronAsarIntegrity - - Resources/app.asar - - algorithm - SHA256 - hash - 7f0ca3c6fae4ccfe2d088e243546c0f695b844fbf714bd59e8c6111fb873f334 - - - - \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (Plugin).app/Contents/MacOS/KV Clearnup Helper (Plugin) b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (Plugin).app/Contents/MacOS/KV Clearnup Helper (Plugin) deleted file mode 100755 index 2a5d2da..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (Plugin).app/Contents/MacOS/KV Clearnup Helper (Plugin) and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (Plugin).app/Contents/PkgInfo b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (Plugin).app/Contents/PkgInfo deleted file mode 100644 index bd04210..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (Plugin).app/Contents/PkgInfo +++ /dev/null @@ -1 +0,0 @@ -APPL???? \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (Plugin).app/Contents/_CodeSignature/CodeResources b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (Plugin).app/Contents/_CodeSignature/CodeResources deleted file mode 100644 index d5d0fd7..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (Plugin).app/Contents/_CodeSignature/CodeResources +++ /dev/null @@ -1,115 +0,0 @@ - - - - - files - - files2 - - rules - - ^Resources/ - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^version.plist$ - - - rules2 - - .*\.dSYM($|/) - - weight - 11 - - ^(.*/)?\.DS_Store$ - - omit - - weight - 2000 - - ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ - - nested - - weight - 10 - - ^.* - - ^Info\.plist$ - - omit - - weight - 20 - - ^PkgInfo$ - - omit - - weight - 20 - - ^Resources/ - - weight - 20 - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^[^/]+$ - - nested - - weight - 10 - - ^embedded\.provisionprofile$ - - weight - 20 - - ^version\.plist$ - - weight - 20 - - - - diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (Renderer).app/Contents/Info.plist b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (Renderer).app/Contents/Info.plist deleted file mode 100644 index e20b375..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (Renderer).app/Contents/Info.plist +++ /dev/null @@ -1,47 +0,0 @@ - - - - - CFBundleDisplayName - KV Clearnup Helper (Renderer) - CFBundleExecutable - KV Clearnup Helper (Renderer) - CFBundleIdentifier - com.kv.clearnup.helper.Renderer - CFBundleName - Electron Helper (Renderer) - CFBundlePackageType - APPL - CFBundleVersion - 0.0.0 - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTSDKBuild - 23F73 - DTSDKName - macosx14.5 - DTXcode - 1540 - DTXcodeBuild - 15F31d - LSEnvironment - - MallocNanoZone - 0 - - LSUIElement - - NSSupportsAutomaticGraphicsSwitching - - ElectronAsarIntegrity - - Resources/app.asar - - algorithm - SHA256 - hash - 7f0ca3c6fae4ccfe2d088e243546c0f695b844fbf714bd59e8c6111fb873f334 - - - - \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (Renderer).app/Contents/MacOS/KV Clearnup Helper (Renderer) b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (Renderer).app/Contents/MacOS/KV Clearnup Helper (Renderer) deleted file mode 100755 index 78f3617..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (Renderer).app/Contents/MacOS/KV Clearnup Helper (Renderer) and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (Renderer).app/Contents/PkgInfo b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (Renderer).app/Contents/PkgInfo deleted file mode 100644 index bd04210..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (Renderer).app/Contents/PkgInfo +++ /dev/null @@ -1 +0,0 @@ -APPL???? \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (Renderer).app/Contents/_CodeSignature/CodeResources b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (Renderer).app/Contents/_CodeSignature/CodeResources deleted file mode 100644 index d5d0fd7..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper (Renderer).app/Contents/_CodeSignature/CodeResources +++ /dev/null @@ -1,115 +0,0 @@ - - - - - files - - files2 - - rules - - ^Resources/ - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^version.plist$ - - - rules2 - - .*\.dSYM($|/) - - weight - 11 - - ^(.*/)?\.DS_Store$ - - omit - - weight - 2000 - - ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ - - nested - - weight - 10 - - ^.* - - ^Info\.plist$ - - omit - - weight - 20 - - ^PkgInfo$ - - omit - - weight - 20 - - ^Resources/ - - weight - 20 - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^[^/]+$ - - nested - - weight - 10 - - ^embedded\.provisionprofile$ - - weight - 20 - - ^version\.plist$ - - weight - 20 - - - - diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper.app/Contents/Info.plist b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper.app/Contents/Info.plist deleted file mode 100644 index 5ac88d6..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper.app/Contents/Info.plist +++ /dev/null @@ -1,47 +0,0 @@ - - - - - CFBundleDisplayName - KV Clearnup Helper - CFBundleExecutable - KV Clearnup Helper - CFBundleIdentifier - com.kv.clearnup.helper - CFBundleName - Electron Helper - CFBundlePackageType - APPL - CFBundleVersion - 0.0.0 - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTSDKBuild - 23F73 - DTSDKName - macosx14.5 - DTXcode - 1540 - DTXcodeBuild - 15F31d - LSEnvironment - - MallocNanoZone - 0 - - LSUIElement - - NSSupportsAutomaticGraphicsSwitching - - ElectronAsarIntegrity - - Resources/app.asar - - algorithm - SHA256 - hash - 7f0ca3c6fae4ccfe2d088e243546c0f695b844fbf714bd59e8c6111fb873f334 - - - - \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper.app/Contents/MacOS/KV Clearnup Helper b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper.app/Contents/MacOS/KV Clearnup Helper deleted file mode 100755 index 8599fa2..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper.app/Contents/MacOS/KV Clearnup Helper and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper.app/Contents/PkgInfo b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper.app/Contents/PkgInfo deleted file mode 100644 index bd04210..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper.app/Contents/PkgInfo +++ /dev/null @@ -1 +0,0 @@ -APPL???? \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper.app/Contents/_CodeSignature/CodeResources b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper.app/Contents/_CodeSignature/CodeResources deleted file mode 100644 index d5d0fd7..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/KV Clearnup Helper.app/Contents/_CodeSignature/CodeResources +++ /dev/null @@ -1,115 +0,0 @@ - - - - - files - - files2 - - rules - - ^Resources/ - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^version.plist$ - - - rules2 - - .*\.dSYM($|/) - - weight - 11 - - ^(.*/)?\.DS_Store$ - - omit - - weight - 2000 - - ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ - - nested - - weight - 10 - - ^.* - - ^Info\.plist$ - - omit - - weight - 20 - - ^PkgInfo$ - - omit - - weight - 20 - - ^Resources/ - - weight - 20 - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^[^/]+$ - - nested - - weight - 10 - - ^embedded\.provisionprofile$ - - weight - 20 - - ^version\.plist$ - - weight - 20 - - - - diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Mantle.framework/Mantle b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Mantle.framework/Mantle deleted file mode 120000 index b3583be..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Mantle.framework/Mantle +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Mantle \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Mantle.framework/Resources b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Mantle.framework/Resources deleted file mode 120000 index 953ee36..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Mantle.framework/Resources +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Resources \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Mantle.framework/Versions/A/Mantle b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Mantle.framework/Versions/A/Mantle deleted file mode 100755 index 794e14d..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Mantle.framework/Versions/A/Mantle and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Mantle.framework/Versions/A/Resources/Info.plist b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Mantle.framework/Versions/A/Resources/Info.plist deleted file mode 100644 index ef8a79c..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Mantle.framework/Versions/A/Resources/Info.plist +++ /dev/null @@ -1,46 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - Mantle - CFBundleIdentifier - org.mantle.Mantle - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - Mantle - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 0.0.0 - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTSDKBuild - 23F73 - DTSDKName - macosx14.5 - DTXcode - 1540 - DTXcodeBuild - 15F31d - NSPrincipalClass - - ElectronAsarIntegrity - - Resources/app.asar - - algorithm - SHA256 - hash - 7f0ca3c6fae4ccfe2d088e243546c0f695b844fbf714bd59e8c6111fb873f334 - - - - \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Mantle.framework/Versions/A/_CodeSignature/CodeResources b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Mantle.framework/Versions/A/_CodeSignature/CodeResources deleted file mode 100644 index e99a38e..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Mantle.framework/Versions/A/_CodeSignature/CodeResources +++ /dev/null @@ -1,128 +0,0 @@ - - - - - files - - Resources/Info.plist - - 1SitqB/dnhjTXHPD/zCqRnNFS0Q= - - - files2 - - Resources/Info.plist - - hash2 - - IMC6VNIxvhAA+f76ODakmcnl0lEAAOiRYVtxQB5XlkE= - - - - rules - - ^Resources/ - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^version.plist$ - - - rules2 - - .*\.dSYM($|/) - - weight - 11 - - ^(.*/)?\.DS_Store$ - - omit - - weight - 2000 - - ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ - - nested - - weight - 10 - - ^.* - - ^Info\.plist$ - - omit - - weight - 20 - - ^PkgInfo$ - - omit - - weight - 20 - - ^Resources/ - - weight - 20 - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^[^/]+$ - - nested - - weight - 10 - - ^embedded\.provisionprofile$ - - weight - 20 - - ^version\.plist$ - - weight - 20 - - - - diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Mantle.framework/Versions/Current b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Mantle.framework/Versions/Current deleted file mode 120000 index 8c7e5a6..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Mantle.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/ReactiveObjC.framework/ReactiveObjC b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/ReactiveObjC.framework/ReactiveObjC deleted file mode 120000 index 976beb8..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/ReactiveObjC.framework/ReactiveObjC +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/ReactiveObjC \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/ReactiveObjC.framework/Resources b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/ReactiveObjC.framework/Resources deleted file mode 120000 index 953ee36..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/ReactiveObjC.framework/Resources +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Resources \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/ReactiveObjC.framework/Versions/A/ReactiveObjC b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/ReactiveObjC.framework/Versions/A/ReactiveObjC deleted file mode 100755 index 62fca0a..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/ReactiveObjC.framework/Versions/A/ReactiveObjC and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/ReactiveObjC.framework/Versions/A/Resources/Info.plist b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/ReactiveObjC.framework/Versions/A/Resources/Info.plist deleted file mode 100644 index 57f4040..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/ReactiveObjC.framework/Versions/A/Resources/Info.plist +++ /dev/null @@ -1,48 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ReactiveObjC - CFBundleIdentifier - com.electron.reactive - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ReactiveObjC - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.1.0 - CFBundleSignature - ???? - CFBundleVersion - 0.0.0 - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTSDKBuild - 23F73 - DTSDKName - macosx14.5 - DTXcode - 1540 - DTXcodeBuild - 15F31d - NSHumanReadableCopyright - Copyright © 2014 GitHub. All rights reserved. - NSPrincipalClass - - ElectronAsarIntegrity - - Resources/app.asar - - algorithm - SHA256 - hash - 7f0ca3c6fae4ccfe2d088e243546c0f695b844fbf714bd59e8c6111fb873f334 - - - - \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/ReactiveObjC.framework/Versions/A/_CodeSignature/CodeResources b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/ReactiveObjC.framework/Versions/A/_CodeSignature/CodeResources deleted file mode 100644 index bcf4b57..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/ReactiveObjC.framework/Versions/A/_CodeSignature/CodeResources +++ /dev/null @@ -1,128 +0,0 @@ - - - - - files - - Resources/Info.plist - - Rb0laQaPy5l2bE1UtBSqQIhi6S8= - - - files2 - - Resources/Info.plist - - hash2 - - gJvjff/oD9mtZx0px5pdh/j5ka7+m/gndIhyOiViT64= - - - - rules - - ^Resources/ - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^version.plist$ - - - rules2 - - .*\.dSYM($|/) - - weight - 11 - - ^(.*/)?\.DS_Store$ - - omit - - weight - 2000 - - ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ - - nested - - weight - 10 - - ^.* - - ^Info\.plist$ - - omit - - weight - 20 - - ^PkgInfo$ - - omit - - weight - 20 - - ^Resources/ - - weight - 20 - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^[^/]+$ - - nested - - weight - 10 - - ^embedded\.provisionprofile$ - - weight - 20 - - ^version\.plist$ - - weight - 20 - - - - diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/ReactiveObjC.framework/Versions/Current b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/ReactiveObjC.framework/Versions/Current deleted file mode 120000 index 8c7e5a6..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/ReactiveObjC.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Squirrel.framework/Resources b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Squirrel.framework/Resources deleted file mode 120000 index 953ee36..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Squirrel.framework/Resources +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Resources \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Squirrel.framework/Squirrel b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Squirrel.framework/Squirrel deleted file mode 120000 index af91e72..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Squirrel.framework/Squirrel +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Squirrel \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Squirrel.framework/Versions/A/Resources/Info.plist b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Squirrel.framework/Versions/A/Resources/Info.plist deleted file mode 100644 index e3eee67..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Squirrel.framework/Versions/A/Resources/Info.plist +++ /dev/null @@ -1,50 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - Squirrel - CFBundleIconFile - - CFBundleIdentifier - com.github.Squirrel - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - Squirrel - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTSDKBuild - 23F73 - DTSDKName - macosx14.5 - DTXcode - 1540 - DTXcodeBuild - 15F31d - NSHumanReadableCopyright - Copyright © 2013 GitHub. All rights reserved. - NSPrincipalClass - - ElectronAsarIntegrity - - Resources/app.asar - - algorithm - SHA256 - hash - 7f0ca3c6fae4ccfe2d088e243546c0f695b844fbf714bd59e8c6111fb873f334 - - - - \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Squirrel.framework/Versions/A/Resources/ShipIt b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Squirrel.framework/Versions/A/Resources/ShipIt deleted file mode 100755 index 9df9e1b..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Squirrel.framework/Versions/A/Resources/ShipIt and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Squirrel.framework/Versions/A/Squirrel b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Squirrel.framework/Versions/A/Squirrel deleted file mode 100755 index 118985f..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Squirrel.framework/Versions/A/Squirrel and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Squirrel.framework/Versions/A/_CodeSignature/CodeResources b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Squirrel.framework/Versions/A/_CodeSignature/CodeResources deleted file mode 100644 index 9ac9dea..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Squirrel.framework/Versions/A/_CodeSignature/CodeResources +++ /dev/null @@ -1,139 +0,0 @@ - - - - - files - - Resources/Info.plist - - zHF2ldB93J91yZhGOpPseCf4ypk= - - Resources/ShipIt - - GepvZGI740GJCUfzWV+ykktTpns= - - - files2 - - Resources/Info.plist - - hash2 - - 4VRy3K6EnbixB4cCZ8s77xrV7ArSLUrI9i//wTe7kas= - - - Resources/ShipIt - - hash2 - - iILKjdy8ACtCJ5GFT6utpjxLUT6ODiEEdWdut33knOI= - - - - rules - - ^Resources/ - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^version.plist$ - - - rules2 - - .*\.dSYM($|/) - - weight - 11 - - ^(.*/)?\.DS_Store$ - - omit - - weight - 2000 - - ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ - - nested - - weight - 10 - - ^.* - - ^Info\.plist$ - - omit - - weight - 20 - - ^PkgInfo$ - - omit - - weight - 20 - - ^Resources/ - - weight - 20 - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^[^/]+$ - - nested - - weight - 10 - - ^embedded\.provisionprofile$ - - weight - 20 - - ^version\.plist$ - - weight - 20 - - - - diff --git a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Squirrel.framework/Versions/Current b/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Squirrel.framework/Versions/Current deleted file mode 120000 index 8c7e5a6..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Frameworks/Squirrel.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Info.plist b/release/mac-universal/KV Clearnup.app/Contents/Info.plist deleted file mode 100644 index 282f8c7..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/Info.plist +++ /dev/null @@ -1,113 +0,0 @@ - - - - - CFBundleDisplayName - KV Clearnup - CFBundleExecutable - KV Clearnup - CFBundleIconFile - icon.icns - CFBundleIdentifier - com.kv.clearnup - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - KV Clearnup - CFBundlePackageType - APPL - CFBundleShortVersionString - 0.0.0 - CFBundleVersion - 0.0.0 - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTSDKBuild - 23F73 - DTSDKName - macosx14.5 - DTXcode - 1540 - DTXcodeBuild - 15F31d - LSApplicationCategoryType - public.app-category.utilities - LSEnvironment - - MallocNanoZone - 0 - - LSMinimumSystemVersion - 11.0 - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - NSAllowsLocalNetworking - - NSExceptionDomains - - 127.0.0.1 - - NSIncludesSubdomains - - NSTemporaryExceptionAllowsInsecureHTTPLoads - - NSTemporaryExceptionAllowsInsecureHTTPSLoads - - NSTemporaryExceptionMinimumTLSVersion - 1.0 - NSTemporaryExceptionRequiresForwardSecrecy - - - localhost - - NSIncludesSubdomains - - NSTemporaryExceptionAllowsInsecureHTTPLoads - - NSTemporaryExceptionAllowsInsecureHTTPSLoads - - NSTemporaryExceptionMinimumTLSVersion - 1.0 - NSTemporaryExceptionRequiresForwardSecrecy - - - - - NSBluetoothAlwaysUsageDescription - This app needs access to Bluetooth - NSBluetoothPeripheralUsageDescription - This app needs access to Bluetooth - NSCameraUsageDescription - This app needs access to the camera - NSHighResolutionCapable - - NSHumanReadableCopyright - Copyright © 2026 KV Clearnup - NSMainNibFile - MainMenu - NSMicrophoneUsageDescription - This app needs access to the microphone - NSPrefersDisplaySafeAreaCompatibilityMode - - NSPrincipalClass - AtomApplication - NSQuitAlwaysKeepsWindows - - NSRequiresAquaSystemAppearance - - NSSupportsAutomaticGraphicsSwitching - - ElectronAsarIntegrity - - Resources/app.asar - - algorithm - SHA256 - hash - 7f0ca3c6fae4ccfe2d088e243546c0f695b844fbf714bd59e8c6111fb873f334 - - - - \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/MacOS/KV Clearnup b/release/mac-universal/KV Clearnup.app/Contents/MacOS/KV Clearnup deleted file mode 100755 index cc07605..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/MacOS/KV Clearnup and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/PkgInfo b/release/mac-universal/KV Clearnup.app/Contents/PkgInfo deleted file mode 100644 index bd04210..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/PkgInfo +++ /dev/null @@ -1 +0,0 @@ -APPL???? \ No newline at end of file diff --git a/release/mac-universal/KV Clearnup.app/Contents/Resources/app.asar b/release/mac-universal/KV Clearnup.app/Contents/Resources/app.asar deleted file mode 100644 index 35b1c6e..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Resources/app.asar and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Resources/backend b/release/mac-universal/KV Clearnup.app/Contents/Resources/backend deleted file mode 100755 index 556d0eb..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Resources/backend and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/Resources/icon.icns b/release/mac-universal/KV Clearnup.app/Contents/Resources/icon.icns deleted file mode 100644 index 0987f3c..0000000 Binary files a/release/mac-universal/KV Clearnup.app/Contents/Resources/icon.icns and /dev/null differ diff --git a/release/mac-universal/KV Clearnup.app/Contents/_CodeSignature/CodeResources b/release/mac-universal/KV Clearnup.app/Contents/_CodeSignature/CodeResources deleted file mode 100644 index b8959b5..0000000 --- a/release/mac-universal/KV Clearnup.app/Contents/_CodeSignature/CodeResources +++ /dev/null @@ -1,222 +0,0 @@ - - - - - files - - Resources/app.asar - - 3E4NBlgLF8xYIpiaDANckRVkJts= - - Resources/backend - - tgXcl7zkiY03xL9BxmqUoyft9LY= - - Resources/icon.icns - - 0knYBwLUSbcAvSzTOejyMuj4S+g= - - - files2 - - Frameworks/Electron Framework.framework - - cdhash - - +G3Z5EQLkYSK05Cv+dDu4tJjG7A= - - requirement - cdhash H"f86dd9e4440b91848ad390aff9d0eee2d2631bb0" or cdhash H"b770374e1cf0db4a32ccb81f59686302339ce180" - - Frameworks/KV Clearnup Helper (GPU).app - - cdhash - - 3t/jbGLpxB178o7KCW+6YpVyb48= - - requirement - cdhash H"dedfe36c62e9c41d7bf28eca096fba6295726f8f" or cdhash H"7db464d6d757074323804e601c7275bf8311ea94" - - Frameworks/KV Clearnup Helper (Plugin).app - - cdhash - - A5lYkaAm6Ek+46V5lEQ6pXt7qbU= - - requirement - cdhash H"03995891a026e8493ee3a57994443aa57b7ba9b5" or cdhash H"c75cc4122bb4d16ca675bf9fec8d89ece1d18f7a" - - Frameworks/KV Clearnup Helper (Renderer).app - - cdhash - - C8cisYwZo2DhV/ZqfJ0SEIO+xQc= - - requirement - cdhash H"0bc722b18c19a360e157f66a7c9d121083bec507" or cdhash H"3f8b4fa64892cd06172cf013f5b06b7519724248" - - Frameworks/KV Clearnup Helper.app - - cdhash - - D76hNsJwVdeTXBgMjD4Ya5fiIrU= - - requirement - cdhash H"0fbea136c27055d7935c180c8c3e186b97e222b5" or cdhash H"2bb1c9f23dbbc5365bb7c20e6a428d459ad7753a" - - Frameworks/Mantle.framework - - cdhash - - E2lm7bxb3J6eGfKzcqh/cmzMNko= - - requirement - cdhash H"136966edbc5bdc9e9e19f2b372a87f726ccc364a" or cdhash H"21247369a68afbe5c9c1018c1b0ea8ae3bd1e360" - - Frameworks/ReactiveObjC.framework - - cdhash - - T5jCG+g3/ZU7nJASElesO8C3WCw= - - requirement - cdhash H"4f98c21be837fd953b9c90121257ac3bc0b7582c" or cdhash H"494bb89662caad0e931ef2f9f7b5509b863682e0" - - Frameworks/Squirrel.framework - - cdhash - - 9cbVY8ptyT9Hm4R1G6ARyUDGM1w= - - requirement - cdhash H"f5c6d563ca6dc93f479b84751ba011c940c6335c" or cdhash H"d12afd36b964427d380ce3c15b0ff5bc76c50eb9" - - Resources/app.asar - - hash2 - - /nYTAZdUBn/dBBvRYkoG8dJsO1J0NMCXQkFMuV4YocI= - - - Resources/backend - - hash2 - - oPjj3umWCEnBCcq8QSjR3wSe/EQLneV3Qm6G8Rb8MBg= - - - Resources/icon.icns - - hash2 - - XE1qZNONcRxYXNgiC7VCOzRs/I6KOyUvi9rdNvJ/Snw= - - - - rules - - ^Resources/ - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^version.plist$ - - - rules2 - - .*\.dSYM($|/) - - weight - 11 - - ^(.*/)?\.DS_Store$ - - omit - - weight - 2000 - - ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ - - nested - - weight - 10 - - ^.* - - ^Info\.plist$ - - omit - - weight - 20 - - ^PkgInfo$ - - omit - - weight - 20 - - ^Resources/ - - weight - 20 - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^[^/]+$ - - nested - - weight - 10 - - ^embedded\.provisionprofile$ - - weight - 20 - - ^version\.plist$ - - weight - 20 - - - - diff --git a/scripts/check-pnpm.js b/scripts/check-pnpm.js old mode 100755 new mode 100644 diff --git a/src/App.css b/src/App.css old mode 100755 new mode 100644 diff --git a/src/App.tsx b/src/App.tsx old mode 100755 new mode 100644 diff --git a/src/api/client.ts b/src/api/client.ts index 524322d..cf1e882 100644 --- a/src/api/client.ts +++ b/src/api/client.ts @@ -7,6 +7,7 @@ export interface ScanResult { } export interface DiskUsage { + name: string; totalGB: string; usedGB: string; freeGB: string; @@ -23,6 +24,12 @@ export interface CategorySizes { apps: number; photos: number; icloud: number; + archives?: number; + virtual_machines?: number; + games?: number; + ai?: number; + docker?: number; + cache?: number; } export interface SystemInfo { @@ -42,13 +49,14 @@ export interface AppInfo { name: string; path: string; bundleID: string; + uninstallString?: string; size: number; icon?: string; } export interface AssociatedFile { path: string; - type: 'cache' | 'config' | 'log' | 'data'; + type: 'cache' | 'config' | 'log' | 'data' | 'registry'; size: number; } @@ -58,7 +66,7 @@ export interface AppDetails extends AppInfo { } export const API = { - getDiskUsage: async (): Promise => { + getDiskUsage: async (): Promise => { try { const res = await fetch(`${API_BASE}/disk-usage`); if (!res.ok) throw new Error("Failed to fetch disk usage"); @@ -83,7 +91,7 @@ export const API = { getCategorySizes: async (): Promise => { try { - const res = await fetch(`${API_BASE}/scan/sizes`); + const res = await fetch(`${API_BASE}/scan/sizes?t=${Date.now()}`); return await res.json(); } catch { return { documents: 0, downloads: 0, desktop: 0, music: 0, movies: 0, system: 0, trash: 0, apps: 0, photos: 0, icloud: 0 }; @@ -165,10 +173,10 @@ export const API = { return res.json(); }, - getAppDetails: async (path: string): Promise => { + getAppDetails: async (path: string, bundleID?: string): Promise => { const res = await fetch(`${API_BASE}/apps/details`, { method: 'POST', - body: JSON.stringify({ path }), + body: JSON.stringify({ path, bundleID }), }); return res.json(); }, @@ -181,6 +189,14 @@ export const API = { if (!res.ok) throw new Error("Failed to delete files"); }, + uninstallApp: async (cmd: string): Promise => { + const res = await fetch(`${API_BASE}/apps/uninstall`, { + method: 'POST', + body: JSON.stringify({ cmd }), + }); + if (!res.ok) throw new Error("Failed to launch uninstaller"); + }, + getAppIcon: async (path: string): Promise => { // Fallback or use Electron bridge directly if (window.electronAPI?.getAppIcon) { diff --git a/src/assets/react.svg b/src/assets/react.svg old mode 100755 new mode 100644 diff --git a/src/components/Dashboard.tsx b/src/components/Dashboard.tsx old mode 100755 new mode 100644 index 178003c..ace32ea --- a/src/components/Dashboard.tsx +++ b/src/components/Dashboard.tsx @@ -1,3 +1,4 @@ + import { useState, useEffect } from 'react'; import { API } from '../api/client'; import { useToast } from './ui'; @@ -6,7 +7,7 @@ import type { DiskUsage, ScanResult, SystemInfo } from '../api/client'; export function Dashboard() { const [scanResults, setScanResults] = useState([]); const [scanTitle, setScanTitle] = useState(""); - const [storageData, setStorageData] = useState({ usedGB: '0', totalGB: '0', freeGB: '0' }); + const [diskUsage, setDiskUsage] = useState([]); const [systemInfo, setSystemInfo] = useState(null); const [activeScanType, setActiveScanType] = useState(''); @@ -25,7 +26,13 @@ export function Dashboard() { apps: -1, photos: -1, icloud: -1, - trash: -1 + trash: -1, + archives: -1, + virtual_machines: -1, + games: -1, + ai: -1, + docker: -1, + cache: -1 }); const isCategoriesScanned = categorySizes.documents !== -1; @@ -36,20 +43,18 @@ export function Dashboard() { const refreshDiskUsage = async () => { const usage = await API.getDiskUsage(); if (usage) { - setStorageData(usage); - // Update Tray Title + setDiskUsage(usage); + // Update Tray Title with total free space from all drives + const totalFree = usage.reduce((acc, drive) => acc + parseFloat(drive.freeGB), 0); if (window.electronAPI && window.electronAPI.updateTrayTitle) { - window.electronAPI.updateTrayTitle(`${usage.freeGB} GB Free`) + window.electronAPI.updateTrayTitle(`${totalFree.toFixed(2)} GB Free`) .catch(e => console.error("Tray error", e)); } - - // Update Tray Icon with Graph - REMOVED } }; // Dynamic Tray Icon removed per user request - const scanCategories = async () => { setIsScanning(true); try { @@ -65,7 +70,13 @@ export function Dashboard() { trash: sizes.trash, apps: sizes.apps, photos: sizes.photos, - icloud: sizes.icloud + icloud: sizes.icloud, + archives: sizes.archives || 0, + virtual_machines: sizes.virtual_machines || 0, + games: sizes.games || 0, + ai: sizes.ai || 0, + docker: sizes.docker || 0, + cache: sizes.cache || 0 }); } } catch (e) { @@ -79,22 +90,33 @@ export function Dashboard() { useEffect(() => { refreshDiskUsage(); API.getSystemInfo().then(setSystemInfo); - API.getCategorySizes().then(setCategorySizes); + API.getCategorySizes().then((sizes) => { + if (sizes) { + setCategorySizes({ + documents: sizes.documents, + downloads: sizes.downloads, + desktop: sizes.desktop, + music: sizes.music, + movies: sizes.movies, + system: sizes.system, + trash: sizes.trash, + apps: sizes.apps, + photos: sizes.photos, + icloud: sizes.icloud, + archives: sizes.archives || 0, + virtual_machines: sizes.virtual_machines || 0, + games: sizes.games || 0, + ai: sizes.ai || 0, + docker: sizes.docker || 0, + cache: sizes.cache || 0 + }); + } + }); // Auto-refresh disk usage every 30 seconds const interval = setInterval(refreshDiskUsage, 30000); return () => clearInterval(interval); }, []); - // Ensure Tray is updated whenever storageData changes - useEffect(() => { - if (storageData.totalGB !== '0') { - if (window.electronAPI?.updateTrayTitle) { - window.electronAPI.updateTrayTitle(`${storageData.freeGB} GB Free`); - } - // Icon update removed - } - }, [storageData]); - // Helper to run a scan and show results const runScan = async (type: string, title: string) => { setIsScanning(true); @@ -139,7 +161,7 @@ export function Dashboard() { const handlePurge = async (itemPath: string) => { const confirmed = await toast.confirm( - `Delete "${itemPath.split('/').pop()}"?`, + `Delete "${itemPath.split('/').pop()}" ? `, 'This action cannot be undone.' ); if (!confirmed) return; @@ -152,7 +174,7 @@ export function Dashboard() { const handlePurgeAll = async () => { const confirmed = await toast.confirm( - `Delete all ${scanResults.length} items?`, + `Delete all ${scanResults.length} items ? `, 'This will permanently remove all scanned files.' ); if (!confirmed) return; @@ -170,11 +192,6 @@ export function Dashboard() { return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + " " + sizes[i]; }; - // Calculate bar width percentages - const total = parseFloat(storageData.totalGB) || 1; - const used = parseFloat(storageData.usedGB) || 0; - const usedPercent = (used / total) * 100; - return (
@@ -185,30 +202,64 @@ export function Dashboard() {

Storage

{systemInfo && ( -
+
{systemInfo.model} + {/* Responsive Info Items */} + {/* Chip - Hide on mobile, show on md */} + {systemInfo.chip && systemInfo.chip !== 'Unknown' && ( + <> + +
+ + + + + + + + + + + + + + {systemInfo.chip + .replace('12th Gen ', '') + .replace('13th Gen ', '') + .replace('14th Gen ', '') + .replace('Intel(R) Core(TM) ', '') + .replace('Intel(R) ', '') + .replace('Core(TM) ', '') + .replace('Processor', '') + .trim()} + +
+ + )} + + {/* Memory - Hide on mobile */} + {systemInfo.memory && systemInfo.memory !== 'Unknown' && ( + <> + + {systemInfo.memory} + + )} + + {/* OS - Always Show */} -
- - - - - - - - - - - {systemInfo.chip} -
- - {systemInfo.memory} - -
- - - - {systemInfo.os.replace('macOS ', '')} +
+ {systemInfo.os.includes('Windows') ? ( + + + + ) : ( + + + + )} + + {systemInfo.os.replace('macOS ', '').replace('Microsoft Windows', 'Win').replace('Windows', 'Win')} +
)} @@ -216,7 +267,7 @@ export function Dashboard() {
{/* Flash & Deep Clean Hero - Side by Side */} -
+
{/* Flash Clean Card */}
- {/* Storage Bar Section - Glass Container */} -
-
-

Macintosh HD

- - {storageData.usedGB} GB of {storageData.totalGB} GB used - -
+ {/* Storage Bars Section - Render for each drive */} +
+ {diskUsage.map((drive, index) => { + const total = parseFloat(drive.totalGB); + const used = parseFloat(drive.usedGB); + const usedPercent = total > 0 ? (used / total) * 100 : 0; + const isSystemDrive = drive.name.includes("(C:)") || drive.name === "Macintosh HD"; - {/* The Bar - Enhanced with inner glow */} -
- {/* Applications Segment */} -
- {/* Photos Segment */} -
- {/* System Data Segment */} -
- {/* macOS Segment */} -
-
+ // Calculate segments if system drive and categories are scanned (not -1) + const isCategoriesReady = categorySizes.documents !== -1; + let segments: { label: string; size: number; color: string; legendColor: string }[] = []; - {/* Legend */} -
- - - - - -
+ if (isSystemDrive && isCategoriesReady) { + const toGB = (bytes: number) => bytes / (1024 * 1024 * 1024); + + const appsGB = toGB(categorySizes.apps); + const docsGB = toGB(categorySizes.documents + categorySizes.downloads + categorySizes.desktop); + const mediaGB = toGB(categorySizes.music + categorySizes.movies + categorySizes.photos); + const trashGB = toGB(categorySizes.trash); + // System/Other is the remainder of Used - Known Categories + const knownUsed = appsGB + docsGB + mediaGB + trashGB; + const otherGB = Math.max(0, used - knownUsed); + + segments = [ + { label: 'Apps', size: appsGB, color: 'from-[#FF5147] to-[#FF3B30]', legendColor: 'bg-[#FF3B30]' }, + { label: 'Documents', size: docsGB, color: 'from-[#FFD60A] to-[#FFCC00]', legendColor: 'bg-[#FFCC00]' }, + { label: 'Media', size: mediaGB, color: 'from-[#BF5AF2] to-[#AF52DE]', legendColor: 'bg-[#AF52DE]' }, + { label: 'Trash', size: trashGB, color: 'from-[#8E8E93] to-[#636366]', legendColor: 'bg-[#8E8E93]' }, + { label: 'System', size: otherGB, color: 'from-[#C7C7CC] to-[#AEAEB2]', legendColor: 'bg-[#C7C7CC]' }, + ]; + } + + return ( +
+
+

+ {drive.name} +

+ + {drive.usedGB} GB of {drive.totalGB} GB used + +
+ + {/* The Bar */} +
+ {isSystemDrive && segments.length > 0 ? ( + segments.map((seg, i) => { + const width = total > 0 ? (seg.size / total) * 100 : 0; + if (width < 0.5) return null; // Hide tiny segments + return ( +
+ ); + }) + ) : ( + // Generic Bar for non-system drives +
+ )} +
+ + {/* Legend for System Drive */} + {isSystemDrive && segments.length > 0 && ( +
+ {segments.map((seg, i) => seg.size > 0.1 && ( +
+
+ {seg.label} +
+ ))} +
+ )} +
+ ); + })}
@@ -392,6 +483,14 @@ export function Dashboard() { actionIcon description="Personal documents folder" /> + } + label="Archives" + size={categorySizes.archives !== undefined && categorySizes.archives >= 0 ? formatBytes(categorySizes.archives) : "Not Scanned"} + onClick={() => runScan('archives', 'Archives')} + actionIcon + description="Compressed files (.zip, .rar, .7z)" + /> } label="Downloads" @@ -424,6 +523,46 @@ export function Dashboard() { actionIcon description="Movies folder & video files" /> + } + label="Disk Images" + size={categorySizes.virtual_machines !== undefined && categorySizes.virtual_machines >= 0 ? formatBytes(categorySizes.virtual_machines) : "Not Scanned"} + onClick={() => runScan('vms', 'Disk Images')} + actionIcon + description="ISOs, VM disks, & installers" + /> + } + label="Games" + size={categorySizes.games !== undefined && categorySizes.games >= 0 ? formatBytes(categorySizes.games) : "Not Scanned"} + onClick={() => runScan('games', 'Games Libraries')} + actionIcon + description="Steam, Epic, EA, Ubisoft" + /> + } + label="AI Models" + size={categorySizes.ai !== undefined && categorySizes.ai >= 0 ? formatBytes(categorySizes.ai) : "Not Scanned"} + onClick={() => runScan('ai', 'AI Tools')} + actionIcon + description="ComfyUI, WebUI, Checkpoints" + /> + } + label="Docker" + size={categorySizes.docker !== undefined && categorySizes.docker >= 0 ? formatBytes(categorySizes.docker) : "Not Scanned"} + onClick={() => runScan('docker', 'Docker Data')} + actionIcon + description="Docker Desktop disk usage" + /> + } + label="System Cache" + size={categorySizes.cache !== undefined && categorySizes.cache >= 0 ? formatBytes(categorySizes.cache) : "Not Scanned"} + onClick={() => runScan('cache', 'Cache & Temp')} + actionIcon + description="Browser & System temporary files" + /> } label="iCloud Drive" @@ -550,11 +689,11 @@ export function Dashboard() { else next.add(item.path); setSelectedItems(next); }} - className={`p-4 border-b border-black/5 flex items-center gap-4 cursor-pointer transition-colors ${selectedItems.has(item.path) ? 'bg-blue-50/50' : 'hover:bg-white/60' - }`} + className={`p - 4 border - b border - black / 5 flex items - center gap - 4 cursor - pointer transition - colors ${selectedItems.has(item.path) ? 'bg-blue-50/50' : 'hover:bg-white/60' + } `} > -
+
{selectedItems.has(item.path) && }
@@ -649,7 +788,7 @@ export function Dashboard() { toast.addToast({ type: 'success', title: 'Deep Clean Complete', - message: `Removed ${deletedCount} items (${formatBytes(deletedSize)})` + message: `Removed ${deletedCount} items(${formatBytes(deletedSize)})` }); }} className="flex-1 py-3 bg-red-500 text-white rounded-[var(--radius-lg)] font-semibold shadow-lg hover:shadow-red-500/30 hover:bg-red-600 transition-all active:scale-[0.98]" @@ -748,21 +887,12 @@ export function Dashboard() { ); } -function LegendItem({ color, label }: { color: string, label: string }) { - return ( -
-
- {label} -
- ); -} - function CategoryRow({ icon, label, size, onClick, actionIcon, highlight, description }: any) { return (
{/* Icon container - fixed size for alignment */} @@ -777,7 +907,7 @@ function CategoryRow({ icon, label, size, onClick, actionIcon, highlight, descri
- + {size === '—' ? 'Scan' : size} {actionIcon && ( @@ -954,6 +1084,112 @@ const Icons = { ), + Archives: () => ( + + + + + + + + + + + + + + + ), + + VirtualMachines: () => ( + + + + + + + + + + + + + + ), + + Games: () => ( + + + + + + + + + + + + + + + + + + ), + + AI: () => ( + + + + + + + + + + + + + + + + ), + + Docker: () => ( + + + + + + + + + + + + + + + ), + + Cache: () => ( + + + + + + + + + + + + + + + + ), + Movies: () => ( diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx old mode 100755 new mode 100644 diff --git a/src/components/Settings.tsx b/src/components/Settings.tsx old mode 100755 new mode 100644 diff --git a/src/components/Uninstaller/AppDetails.tsx b/src/components/Uninstaller/AppDetails.tsx index 280bec4..ef02b53 100644 --- a/src/components/Uninstaller/AppDetails.tsx +++ b/src/components/Uninstaller/AppDetails.tsx @@ -27,7 +27,7 @@ export function AppDetailsView({ app, onBack, onUninstall }: Props) { const loadDetails = async () => { try { setLoading(true); - const data = await API.getAppDetails(app.path); + const data = await API.getAppDetails(app.path, app.bundleID); setDetails(data); // Select all by default @@ -69,6 +69,7 @@ export function AppDetailsView({ app, onBack, onUninstall }: Props) { case 'config': return ; case 'cache': return ; case 'log': return ; + case 'registry': return ; default: return ; } }; @@ -76,6 +77,30 @@ export function AppDetailsView({ app, onBack, onUninstall }: Props) { const handleAction = async (action: 'uninstall' | 'reset' | 'cache') => { if (!details) return; + // Special handling for Uninstall with official uninstaller + if (action === 'uninstall' && details.uninstallString) { + const confirmed = await toast.confirm( + `Run Uninstaller?`, + `This will launch the official uninstaller for ${details.name}.` + ); + if (!confirmed) return; + + try { + setProcessing(true); + await API.uninstallApp(details.uninstallString); + toast.addToast({ type: 'success', title: 'Success', message: 'Uninstaller launched' }); + // We don't automatically close the view or reload apps because the uninstaller is external + // But we can go back + onBack(); + } catch (error) { + console.error(error); + toast.addToast({ type: 'error', title: 'Error', message: 'Failed to launch uninstaller' }); + } finally { + setProcessing(false); + } + return; + } + let filesToDelete: string[] = []; if (action === 'uninstall') { diff --git a/src/components/Uninstaller/AppsView.tsx b/src/components/Uninstaller/AppsView.tsx index 4716d56..025fe63 100644 --- a/src/components/Uninstaller/AppsView.tsx +++ b/src/components/Uninstaller/AppsView.tsx @@ -134,7 +134,7 @@ export function AppsView() { {sortedApps.map((app) => ( {sortedApps.map((app) => (