A lot of changes and make create project actually clone from premade templates

This commit is contained in:
Lncvrt committed 2025-08-15 19:42:30 -07:00
1 parent 3bb706a531
commit b0ae3a9978
8 files changed
+279 -162

No files matched your search

+3 -3
View File
@@ -22,14 +22,14 @@
"@fortawesome/fontawesome-svg-core": "7.0.0",
"@fortawesome/free-solid-svg-icons": "7.0.0",
"@fortawesome/react-fontawesome": "0.2.3",
"@tailwindcss/postcss": "4.1.11",
"@tailwindcss/postcss": "4.1.12",
"@tauri-apps/cli": "2.7.1",
"@types/node": "24.2.1",
"@types/node": "24.3.0",
"@types/react": "19.1.10",
"@types/react-dom": "19.1.7",
"eslint": "9.33.0",
"eslint-config-next": "15.4.6",
"tailwindcss": "4.1.11",
"tailwindcss": "4.1.12",
"typescript": "5.9.2"
}
}
+3
View File
@@ -17,6 +17,9 @@ serde = { version = "1.0.219", features = ["derive"] }
serde_json = "1.0.142"
tauri-plugin-dialog = "2.3.2"
tokio = "1.47.1"
reqwest = { version = "0.12.23", default-features = false, features = ["json", "rustls-tls"] }
zip = "4.3.0"
anyhow = "1.0.99"
[target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies]
tauri-plugin-single-instance = "2.3.2"
+2 -2
View File
@@ -3,8 +3,8 @@
"identifier": "default",
"description": "Capability for the main window",
"windows": [
"main",
"new_project_popup"
"projectmanager",
"newprojectpopup"
],
"permissions": [
"core:default",
+99 -28
View File
@@ -1,33 +1,103 @@
use tauri::Manager;
use serde_json::Value;
use std::{io::Cursor, path::Path};
use tauri::{AppHandle, Emitter};
use tauri_plugin_dialog::{DialogExt, MessageDialogKind};
use tokio::fs;
use zip::ZipArchive;
#[tauri::command]
async fn create_project(project_type: String, project_folder: String, project_name: String) {
let project_root: String = format!("{}/{}", project_folder, project_name);
async fn create_project(
app: AppHandle,
project_type: String,
project_folder: String,
project_name: String,
) {
let _ = app.emit("new_project_enable_creation_button", "false");
let _ = app.emit("new_project_update_message", "white:Creating project...");
let folder = Path::new(&project_folder);
let name = Path::new(&project_name);
let project_root = folder.join(name);
let _ = fs::create_dir(&project_root).await;
let project_type_str: &str = project_type.as_str();
match project_type_str {
"website" => {
let _ = fs::File::create(format!("{}/index.php", project_root)).await;
if project_type != "empty" {
let _ = app.emit("new_project_update_message", "white:Fetching templates...");
let url = format!(
"https://codefly-repo.lncvrt.xyz/php-fly/templates/mainfest.php?onlyLatest=true&template={}",
project_type
);
if let Ok(templates_res) = reqwest::get(url).await {
if let Ok(json) = templates_res.json::<Value>().await {
if let Some(templatedata) = json.get(&project_type) {
if let Some(latestdata) = templatedata.get("latest") {
if !latestdata.is_null() {
if let Some(latestdownloadurl) =
latestdata.get("download_url").and_then(|v| v.as_str())
{
let _ = app.emit(
"new_project_update_message",
"white:Downloading template...",
);
if let Ok(download_res) = reqwest::get(latestdownloadurl).await {
match download_res.bytes().await {
Ok(bytes) => {
let _ = app.emit(
"new_project_update_message",
"white:Unzipping template...",
);
let result = tokio::task::spawn_blocking(
move || -> anyhow::Result<()> {
let reader = Cursor::new(bytes);
let mut archive = ZipArchive::new(reader)?;
let _ = fs::write(
format!("{}/index.php", project_root),
"<h1>this will be updated later</h1>",
)
.await;
for i in 0..archive.len() {
let mut file = archive.by_index(i)?;
let outpath =
&project_root.join(file.name());
if file.is_dir() {
std::fs::create_dir_all(&outpath)?;
} else {
if let Some(parent) = outpath.parent() {
std::fs::create_dir_all(parent)?;
}
let mut outfile =
std::fs::File::create(&outpath)?;
std::io::copy(&mut file, &mut outfile)?;
}
}
Ok(())
},
)
.await;
match result {
Ok(inner) => {
if let Err(e) = inner {
eprintln!("unzip failed: {:?}", e);
}
}
Err(e) => {
eprintln!("task panicked: {:?}", e);
}
}
}
Err(_) => {}
}
} else {
eprintln!("failed to download file");
}
}
}
}
}
}
}
"webserver" => {
let _ = fs::write(
format!("{}/index.php", project_root),
"<h1>this will be updated later</h1>",
)
.await;
}
_ => {}
}
let _ = app.emit("new_project_enable_creation_button", "true");
let _ = app.emit("new_project_update_message", "");
}
#[cfg_attr(mobile, tauri::mobile_entry_point)]
@@ -35,21 +105,22 @@ pub fn run() {
tauri::Builder::default()
.plugin(tauri_plugin_dialog::init())
.plugin(tauri_plugin_single_instance::init(|app, _args, _cwd| {
let _ = app
.get_webview_window("main")
.expect("no main window")
.set_focus();
app.dialog()
.message("PHP Fly is already open!")
.kind(MessageDialogKind::Error)
.title("Warning")
.blocking_show();
}))
.invoke_handler(tauri::generate_handler![create_project])
.setup(|app| {
tauri::webview::WebviewWindowBuilder::new(
app,
"main",
"projectmanager",
tauri::WebviewUrl::App("projectmanager/projects".into()),
)
.resizable(false)
.maximizable(false)
.title("PHP Fly")
.title("PHP Fly: Project Manager")
.inner_size(800.0, 500.0)
.build()?;
Ok(())
+1 -1
View File
@@ -1,4 +1,4 @@
@import 'tailwindcss';
@import "tailwindcss";
.new-project-btn {
@apply w-50 h-15 bg-[rgb(54,54,72)] hover:bg-[rgb(72,72,96)];
+55 -5
View File
@@ -6,20 +6,48 @@ import './NewProject_page.css'
import { documentDir } from '@tauri-apps/api/path'
import { open } from '@tauri-apps/plugin-dialog'
import { invoke } from '@tauri-apps/api/core'
import { listen } from '@tauri-apps/api/event'
import { getCurrentWindow } from '@tauri-apps/api/window'
export default function NewProject_page () {
const [projectType, setProjectType] = useState<string>('empty')
const [projectFolder, setProjectFolder] = useState<string>('')
const [projectName, setProjectName] = useState<string>('')
const [loading, setLoading] = useState<boolean>(true)
const [creationButtonEnabled, setCreationButtonEnabled] =
useState<boolean>(true)
const [creationMessage, setCreationMessage] = useState<string>('')
useEffect(() => {
;(async () => {
const projPath = await documentDir()
setProjectFolder(projPath)
setLoading(false)
})()
}, [])
return (
const updateMessage = listen<string>('new_project_update_message', event =>
setCreationMessage(event.payload)
)
const enableCreationButton = listen<string>(
'new_project_enable_creation_button',
async event => {
getCurrentWindow().setClosable(event.payload == 'true')
setCreationButtonEnabled(event.payload == 'true')
}
)
return () => {
updateMessage.then(f => f())
enableCreationButton.then(f => f())
}
}, [setCreationMessage, setCreationButtonEnabled])
return loading ? (
<div className='flex justify-center items-center text-6xl h-screen w-screen'>
<p>Loading</p>
</div>
) : (
<>
<div className='justify-center mx-auto w-fit'>
<div className='text-center mt-2'>
@@ -72,9 +100,9 @@ export default function NewProject_page () {
</button>,
<button
key='webserverbutton'
onClick={() => setProjectType('webserver')}
onClick={() => setProjectType('web-server')}
className='projecttypebutton'
disabled={projectType == 'webserver'}
disabled={projectType == 'web-server'}
>
Web Server
</button>
@@ -83,7 +111,29 @@ export default function NewProject_page () {
/>
<div className='absolute left-1/2 transform -translate-x-1/2 bottom-0 mb-5'>
<button className='new-project-btn' onClick={async () => await invoke("create_project", { projectType, projectFolder, projectName })}>Create</button>
<p
className='text-center mb-2'
style={{
display: creationMessage == '' ? 'none' : 'block',
color:
creationMessage == '' ? 'white' : creationMessage.split(':')[0]
}}
>
{creationMessage == '' ? '' : creationMessage.split(':')[1]}
</p>
<button
className='new-project-btn'
onClick={async () =>
await invoke('create_project', {
projectType,
projectFolder,
projectName
})
}
disabled={!creationButtonEnabled}
>
Create
</button>
</div>
</div>
</>
+4 -4
View File
@@ -10,15 +10,15 @@ export default function ProjectManager_Projects () {
<button
onClick={async () => {
const windowExists = await WebviewWindow.getByLabel(
'new_project_popup'
'newprojectpopup'
)
if (windowExists) return
const mainWindow = await WebviewWindow.getByLabel('main')
const mainWindow = await WebviewWindow.getByLabel('projectmanager')
if (!mainWindow) return
const popup = new WebviewWindow('new_project_popup', {
const popup = new WebviewWindow('newprojectpopup', {
title: 'PHP Fly: New Project',
url: '/newproject',
width: 600,
width: 400,
height: 500,
resizable: false,
maximizable: false,
+112 -119
View File
@@ -7,15 +7,7 @@
resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30"
integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==
"@ampproject/remapping@^2.3.0":
version "2.3.0"
resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"
integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
dependencies:
"@jridgewell/gen-mapping" "^0.3.5"
"@jridgewell/trace-mapping" "^0.3.24"
"@emnapi/core@^1.4.3":
"@emnapi/core@^1.4.3", "@emnapi/core@^1.4.5":
version "1.4.5"
resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.4.5.tgz#bfbb0cbbbb9f96ec4e2c4fd917b7bbe5495ceccb"
integrity sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==
@@ -23,14 +15,14 @@
"@emnapi/wasi-threads" "1.0.4"
tslib "^2.4.0"
"@emnapi/runtime@^1.4.3", "@emnapi/runtime@^1.4.4":
"@emnapi/runtime@^1.4.3", "@emnapi/runtime@^1.4.4", "@emnapi/runtime@^1.4.5":
version "1.4.5"
resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.4.5.tgz#c67710d0661070f38418b6474584f159de38aba9"
integrity sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==
dependencies:
tslib "^2.4.0"
"@emnapi/wasi-threads@1.0.4", "@emnapi/wasi-threads@^1.0.2":
"@emnapi/wasi-threads@1.0.4", "@emnapi/wasi-threads@^1.0.4":
version "1.0.4"
resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz#703fc094d969e273b1b71c292523b2f792862bf4"
integrity sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==
@@ -302,6 +294,14 @@
"@jridgewell/sourcemap-codec" "^1.5.0"
"@jridgewell/trace-mapping" "^0.3.24"
"@jridgewell/remapping@^2.3.4":
version "2.3.5"
resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1"
integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==
dependencies:
"@jridgewell/gen-mapping" "^0.3.5"
"@jridgewell/trace-mapping" "^0.3.24"
"@jridgewell/resolve-uri@^3.1.0":
version "3.1.2"
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
@@ -320,7 +320,7 @@
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
"@napi-rs/wasm-runtime@^0.2.11":
"@napi-rs/wasm-runtime@^0.2.11", "@napi-rs/wasm-runtime@^0.2.12":
version "0.2.12"
resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz#3e78a8b96e6c33a6c517e1894efbd5385a7cb6f2"
integrity sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==
@@ -424,117 +424,117 @@
dependencies:
tslib "^2.8.0"
"@tailwindcss/node@4.1.11":
version "4.1.11"
resolved "https://registry.yarnpkg.com/@tailwindcss/node/-/node-4.1.11.tgz#d626af65fc9872e5e9d8884791d7e3856e945359"
integrity sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==
"@tailwindcss/node@4.1.12":
version "4.1.12"
resolved "https://registry.yarnpkg.com/@tailwindcss/node/-/node-4.1.12.tgz#9099c7c9a6b719b2cae265fecbb37e08ed3fd2a2"
integrity sha512-3hm9brwvQkZFe++SBt+oLjo4OLDtkvlE8q2WalaD/7QWaeM7KEJbAiY/LJZUaCs7Xa8aUu4xy3uoyX4q54UVdQ==
dependencies:
"@ampproject/remapping" "^2.3.0"
enhanced-resolve "^5.18.1"
jiti "^2.4.2"
"@jridgewell/remapping" "^2.3.4"
enhanced-resolve "^5.18.3"
jiti "^2.5.1"
lightningcss "1.30.1"
magic-string "^0.30.17"
source-map-js "^1.2.1"
tailwindcss "4.1.11"
tailwindcss "4.1.12"
"@tailwindcss/oxide-android-arm64@4.1.11":
version "4.1.11"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.11.tgz#1f387d8302f011b61c226deb0c3a1d2bd79c6915"
integrity sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==
"@tailwindcss/oxide-android-arm64@4.1.12":
version "4.1.12"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.12.tgz#27920fe61fa2743afe8a8ca296fa640b609d17d5"
integrity sha512-oNY5pq+1gc4T6QVTsZKwZaGpBb2N1H1fsc1GD4o7yinFySqIuRZ2E4NvGasWc6PhYJwGK2+5YT1f9Tp80zUQZQ==
"@tailwindcss/oxide-darwin-arm64@4.1.11":
version "4.1.11"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.11.tgz#acd35ffb7e4eae83d0a3fe2f8ea36cfcc9b21f7e"
integrity sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==
"@tailwindcss/oxide-darwin-arm64@4.1.12":
version "4.1.12"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.12.tgz#e8bd4798f26ec1d012bf0683aeb77449f71505cd"
integrity sha512-cq1qmq2HEtDV9HvZlTtrj671mCdGB93bVY6J29mwCyaMYCP/JaUBXxrQQQm7Qn33AXXASPUb2HFZlWiiHWFytw==
"@tailwindcss/oxide-darwin-x64@4.1.11":
version "4.1.11"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.11.tgz#a0022312993a3893d6ff0312d6e3c83c4636fef4"
integrity sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==
"@tailwindcss/oxide-darwin-x64@4.1.12":
version "4.1.12"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.12.tgz#8ddb7e5ddfd9b049ec84a2bda99f2b04a86859f5"
integrity sha512-6UCsIeFUcBfpangqlXay9Ffty9XhFH1QuUFn0WV83W8lGdX8cD5/+2ONLluALJD5+yJ7k8mVtwy3zMZmzEfbLg==
"@tailwindcss/oxide-freebsd-x64@4.1.11":
version "4.1.11"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.11.tgz#dd8e55eb0b88fe7995b8148c0e0ae5fa27092d22"
integrity sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==
"@tailwindcss/oxide-freebsd-x64@4.1.12":
version "4.1.12"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.12.tgz#da1c0b16b7a5f95a1e400f299a3ec94fb6fd40ac"
integrity sha512-JOH/f7j6+nYXIrHobRYCtoArJdMJh5zy5lr0FV0Qu47MID/vqJAY3r/OElPzx1C/wdT1uS7cPq+xdYYelny1ww==
"@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11":
version "4.1.11"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.11.tgz#02ee99090988847d3f13d277679012cbffcdde37"
integrity sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==
"@tailwindcss/oxide-linux-arm-gnueabihf@4.1.12":
version "4.1.12"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.12.tgz#34e558aa6e869c6fe9867cb78ed7ba651b9fcaa4"
integrity sha512-v4Ghvi9AU1SYgGr3/j38PD8PEe6bRfTnNSUE3YCMIRrrNigCFtHZ2TCm8142X8fcSqHBZBceDx+JlFJEfNg5zQ==
"@tailwindcss/oxide-linux-arm64-gnu@4.1.11":
version "4.1.11"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.11.tgz#4837559c102bebe65089879f6a0278ed473b4813"
integrity sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==
"@tailwindcss/oxide-linux-arm64-gnu@4.1.12":
version "4.1.12"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.12.tgz#0a00a8146ab6215f81b2d385056c991441bf390e"
integrity sha512-YP5s1LmetL9UsvVAKusHSyPlzSRqYyRB0f+Kl/xcYQSPLEw/BvGfxzbH+ihUciePDjiXwHh+p+qbSP3SlJw+6g==
"@tailwindcss/oxide-linux-arm64-musl@4.1.11":
version "4.1.11"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.11.tgz#bec465112a13a1383558ff36afdf28b8a8cb9021"
integrity sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==
"@tailwindcss/oxide-linux-arm64-musl@4.1.12":
version "4.1.12"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.12.tgz#b138f494068884ae0d8c343dc1904b22f5e98dc6"
integrity sha512-V8pAM3s8gsrXcCv6kCHSuwyb/gPsd863iT+v1PGXC4fSL/OJqsKhfK//v8P+w9ThKIoqNbEnsZqNy+WDnwQqCA==
"@tailwindcss/oxide-linux-x64-gnu@4.1.11":
version "4.1.11"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.11.tgz#f9e47e6aa67ff77f32f7412bc9698d4278e101bf"
integrity sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==
"@tailwindcss/oxide-linux-x64-gnu@4.1.12":
version "4.1.12"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.12.tgz#5b9d5f23b15cdb714639f5b9741c0df5d610f794"
integrity sha512-xYfqYLjvm2UQ3TZggTGrwxjYaLB62b1Wiysw/YE3Yqbh86sOMoTn0feF98PonP7LtjsWOWcXEbGqDL7zv0uW8Q==
"@tailwindcss/oxide-linux-x64-musl@4.1.11":
version "4.1.11"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.11.tgz#7d6e8adcfb9bc84d8e2e2e8781d661edb9e41ba8"
integrity sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==
"@tailwindcss/oxide-linux-x64-musl@4.1.12":
version "4.1.12"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.12.tgz#f68ec530d3ca6875ea9015bcd5dd0762ee5e2f5d"
integrity sha512-ha0pHPamN+fWZY7GCzz5rKunlv9L5R8kdh+YNvP5awe3LtuXb5nRi/H27GeL2U+TdhDOptU7T6Is7mdwh5Ar3A==
"@tailwindcss/oxide-wasm32-wasi@4.1.11":
version "4.1.11"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.11.tgz#a1762f4939c6ebaa824696fda2fd7db1b85fbed2"
integrity sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==
"@tailwindcss/oxide-wasm32-wasi@4.1.12":
version "4.1.12"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.12.tgz#9fd15a1ebde6076c42c445c5e305c31673ead965"
integrity sha512-4tSyu3dW+ktzdEpuk6g49KdEangu3eCYoqPhWNsZgUhyegEda3M9rG0/j1GV/JjVVsj+lG7jWAyrTlLzd/WEBg==
dependencies:
"@emnapi/core" "^1.4.3"
"@emnapi/runtime" "^1.4.3"
"@emnapi/wasi-threads" "^1.0.2"
"@napi-rs/wasm-runtime" "^0.2.11"
"@tybys/wasm-util" "^0.9.0"
"@emnapi/core" "^1.4.5"
"@emnapi/runtime" "^1.4.5"
"@emnapi/wasi-threads" "^1.0.4"
"@napi-rs/wasm-runtime" "^0.2.12"
"@tybys/wasm-util" "^0.10.0"
tslib "^2.8.0"
"@tailwindcss/oxide-win32-arm64-msvc@4.1.11":
version "4.1.11"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.11.tgz#70ba392dca0fa3707ebe27d2bd6ac3e69d35e3b7"
integrity sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==
"@tailwindcss/oxide-win32-arm64-msvc@4.1.12":
version "4.1.12"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.12.tgz#938bcc6a82e1120ea4fe2ce94be0a8cdf3ae92c7"
integrity sha512-iGLyD/cVP724+FGtMWslhcFyg4xyYyM+5F4hGvKA7eifPkXHRAUDFaimu53fpNg9X8dfP75pXx/zFt/jlNF+lg==
"@tailwindcss/oxide-win32-x64-msvc@4.1.11":
version "4.1.11"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.11.tgz#cdcb9eea9225a346c0695f67f621990b0534763f"
integrity sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==
"@tailwindcss/oxide-win32-x64-msvc@4.1.12":
version "4.1.12"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.12.tgz#b1ee2ed0ef2c4095ddec3684a1987e2b3613af36"
integrity sha512-NKIh5rzw6CpEodv/++r0hGLlfgT/gFN+5WNdZtvh6wpU2BpGNgdjvj6H2oFc8nCM839QM1YOhjpgbAONUb4IxA==
"@tailwindcss/oxide@4.1.11":
version "4.1.11"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide/-/oxide-4.1.11.tgz#569b668c99c337b7b8204bc5b6a833429755a05b"
integrity sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==
"@tailwindcss/oxide@4.1.12":
version "4.1.12"
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide/-/oxide-4.1.12.tgz#13a6f806aafa9c83629c9a04acd92031aef83f1c"
integrity sha512-gM5EoKHW/ukmlEtphNwaGx45fGoEmP10v51t9unv55voWh6WrOL19hfuIdo2FjxIaZzw776/BUQg7Pck++cIVw==
dependencies:
detect-libc "^2.0.4"
tar "^7.4.3"
optionalDependencies:
"@tailwindcss/oxide-android-arm64" "4.1.11"
"@tailwindcss/oxide-darwin-arm64" "4.1.11"
"@tailwindcss/oxide-darwin-x64" "4.1.11"
"@tailwindcss/oxide-freebsd-x64" "4.1.11"
"@tailwindcss/oxide-linux-arm-gnueabihf" "4.1.11"
"@tailwindcss/oxide-linux-arm64-gnu" "4.1.11"
"@tailwindcss/oxide-linux-arm64-musl" "4.1.11"
"@tailwindcss/oxide-linux-x64-gnu" "4.1.11"
"@tailwindcss/oxide-linux-x64-musl" "4.1.11"
"@tailwindcss/oxide-wasm32-wasi" "4.1.11"
"@tailwindcss/oxide-win32-arm64-msvc" "4.1.11"
"@tailwindcss/oxide-win32-x64-msvc" "4.1.11"
"@tailwindcss/oxide-android-arm64" "4.1.12"
"@tailwindcss/oxide-darwin-arm64" "4.1.12"
"@tailwindcss/oxide-darwin-x64" "4.1.12"
"@tailwindcss/oxide-freebsd-x64" "4.1.12"
"@tailwindcss/oxide-linux-arm-gnueabihf" "4.1.12"
"@tailwindcss/oxide-linux-arm64-gnu" "4.1.12"
"@tailwindcss/oxide-linux-arm64-musl" "4.1.12"
"@tailwindcss/oxide-linux-x64-gnu" "4.1.12"
"@tailwindcss/oxide-linux-x64-musl" "4.1.12"
"@tailwindcss/oxide-wasm32-wasi" "4.1.12"
"@tailwindcss/oxide-win32-arm64-msvc" "4.1.12"
"@tailwindcss/oxide-win32-x64-msvc" "4.1.12"
"@tailwindcss/postcss@4.1.11":
version "4.1.11"
resolved "https://registry.yarnpkg.com/@tailwindcss/postcss/-/postcss-4.1.11.tgz#4d844f7ff295c731ceab54934531bece7380ce0c"
integrity sha512-q/EAIIpF6WpLhKEuQSEVMZNMIY8KhWoAemZ9eylNAih9jxMGAYPPWBn3I9QL/2jZ+e7OEz/tZkX5HwbBR4HohA==
"@tailwindcss/postcss@4.1.12":
version "4.1.12"
resolved "https://registry.yarnpkg.com/@tailwindcss/postcss/-/postcss-4.1.12.tgz#ac2423c3cc69d673e2965c6d1413504a6398e415"
integrity sha512-5PpLYhCAwf9SJEeIsSmCDLgyVfdBhdBpzX1OJ87anT9IVR0Z9pjM0FNixCAUAHGnMBGB8K99SwAheXrT0Kh6QQ==
dependencies:
"@alloc/quick-lru" "^5.2.0"
"@tailwindcss/node" "4.1.11"
"@tailwindcss/oxide" "4.1.11"
"@tailwindcss/node" "4.1.12"
"@tailwindcss/oxide" "4.1.12"
postcss "^8.4.41"
tailwindcss "4.1.11"
tailwindcss "4.1.12"
"@tauri-apps/api@2.7.0", "@tauri-apps/api@^2.6.0":
version "2.7.0"
@@ -627,13 +627,6 @@
dependencies:
tslib "^2.4.0"
"@tybys/wasm-util@^0.9.0":
version "0.9.0"
resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355"
integrity sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==
dependencies:
tslib "^2.4.0"
"@types/estree@^1.0.6":
version "1.0.8"
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e"
@@ -649,10 +642,10 @@
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
"@types/node@24.2.1":
version "24.2.1"
resolved "https://registry.yarnpkg.com/@types/node/-/node-24.2.1.tgz#83e41543f0a518e006594bb394e2cd961de56727"
integrity sha512-DRh5K+ka5eJic8CjH7td8QpYEV6Zo10gfRkjHCO3weqZHWDtAaSTFtl4+VMqOJ4N5jcuhZ9/l+yy8rVgw7BQeQ==
"@types/node@24.3.0":
version "24.3.0"
resolved "https://registry.yarnpkg.com/@types/node/-/node-24.3.0.tgz#89b09f45cb9a8ee69466f18ee5864e4c3eb84dec"
integrity sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==
dependencies:
undici-types "~7.10.0"
@@ -1077,9 +1070,9 @@ callsites@^3.0.0:
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
caniuse-lite@^1.0.30001579:
version "1.0.30001734"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001734.tgz#f97e08599e2d75664543ae4b6ef25dc2183c5cc6"
integrity sha512-uhE1Ye5vgqju6OI71HTQqcBCZrvHugk0MjLak7Q+HfoBgoq5Bi+5YnwjP4fjDgrtYr/l8MVRBvzz9dPD4KyK0A==
version "1.0.30001735"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001735.tgz#ba658fd3fd24a4106fd68d5ce472a2c251494dbe"
integrity sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==
chalk@^4.0.0:
version "4.1.2"
@@ -1241,7 +1234,7 @@ emoji-regex@^9.2.2:
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
enhanced-resolve@^5.18.1:
enhanced-resolve@^5.18.3:
version "5.18.3"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz#9b5f4c5c076b8787c78fe540392ce76a88855b44"
integrity sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==
@@ -1636,9 +1629,9 @@ fastq@^1.6.0:
reusify "^1.0.4"
fdir@^6.4.4:
version "6.4.6"
resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.6.tgz#2b268c0232697063111bbf3f64810a2a741ba281"
integrity sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==
version "6.5.0"
resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350"
integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==
file-entry-cache@^8.0.0:
version "8.0.0"
@@ -2077,7 +2070,7 @@ iterator.prototype@^1.1.4:
has-symbols "^1.1.0"
set-function-name "^2.0.2"
jiti@^2.4.2:
jiti@^2.5.1:
version "2.5.1"
resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.5.1.tgz#bd099c1c2be1c59bbea4e5adcd127363446759d0"
integrity sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==
@@ -2890,10 +2883,10 @@ supports-preserve-symlinks-flag@^1.0.0:
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
tailwindcss@4.1.11:
version "4.1.11"
resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-4.1.11.tgz#799af3e98c19c5baaefafc6e0c16304a0e684854"
integrity sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==
tailwindcss@4.1.12:
version "4.1.12"
resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-4.1.12.tgz#7baeed5b5ac77370571c2baa72ee06e0050fc0a8"
integrity sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==
tapable@^2.2.0:
version "2.2.2"