diff --git a/bun.lock b/bun.lock index ed2d5f2..215934f 100644 --- a/bun.lock +++ b/bun.lock @@ -8,6 +8,7 @@ "@fontsource/lexend": "5.2.11", "@tailwindcss/vite": "4.1.18", "@tauri-apps/api": "2.10.1", + "@tauri-apps/plugin-clipboard-manager": "2.3.2", "react": "19.2.4", "react-dom": "19.2.4", "tailwindcss": "4.1.18", @@ -267,6 +268,8 @@ "@tauri-apps/cli-win32-x64-msvc": ["@tauri-apps/cli-win32-x64-msvc@2.10.0", "", { "os": "win32", "cpu": "x64" }, "sha512-NTpyQxkpzGmU6ceWBTY2xRIEaS0ZLbVx1HE1zTA3TY/pV3+cPoPPOs+7YScr4IMzXMtOw7tLw5LEXo5oIG3qaQ=="], + "@tauri-apps/plugin-clipboard-manager": ["@tauri-apps/plugin-clipboard-manager@2.3.2", "", { "dependencies": { "@tauri-apps/api": "^2.8.0" } }, "sha512-CUlb5Hqi2oZbcZf4VUyUH53XWPPdtpw43EUpCza5HWZJwxEoDowFzNUDt1tRUXA8Uq+XPn17Ysfptip33sG4eQ=="], + "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], "@types/babel__generator": ["@types/babel__generator@7.27.0", "", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg=="], diff --git a/package.json b/package.json index 9cdd686..a6fa5c3 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "@fontsource/lexend": "5.2.11", "@tailwindcss/vite": "4.1.18", "@tauri-apps/api": "2.10.1", + "@tauri-apps/plugin-clipboard-manager": "2.3.2", "react": "19.2.4", "react-dom": "19.2.4", "tailwindcss": "4.1.18" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 96035ca..0ced30f 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -16,3 +16,4 @@ tauri-build = { version = "2.5.5", features = [] } tauri = { version = "2.10.2", features = [] } serde = { version = "1.0.228", features = ["derive"] } serde_json = "1.0.149" +tauri-plugin-clipboard-manager = "2.3.2" diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json index b9ec4c1..0672ff0 100644 --- a/src-tauri/capabilities/default.json +++ b/src-tauri/capabilities/default.json @@ -2,8 +2,12 @@ "$schema": "../gen/schemas/desktop-schema.json", "identifier": "default", "description": "Capability for the main window", - "windows": ["main"], + "windows": [ + "main" + ], "permissions": [ - "core:default" + "core:default", + "clipboard-manager:default", + "clipboard-manager:allow-write-text" ] -} +} \ No newline at end of file diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 41900e7..5a8c784 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -1,6 +1,7 @@ #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { tauri::Builder::default() + .plugin(tauri_plugin_clipboard_manager::init()) .invoke_handler(tauri::generate_handler![]) .run(tauri::generate_context!()) .expect("error while running tauri application"); diff --git a/src/App.tsx b/src/App.tsx index 87405c5..ac19dbb 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,6 +1,7 @@ import { useState, useEffect, useCallback } from 'react' import '@fontsource/lexend' import './App.css' +import { writeText } from '@tauri-apps/plugin-clipboard-manager' function App () { const [password, setPassword] = useState('') @@ -34,8 +35,9 @@ function App () { ) }, [length, useUpper, useLower, useNumbers, useSymbols]) - const copyToClipboard = () => { - navigator.clipboard.writeText(password) + const copyToClipboard = async () => { + if (password.trim().length == 0) return + await writeText(password) setCopied(true) setTimeout(() => setCopied(false), 1000) }