Release Archive Tools 0.1.0

This commit is contained in:
2026-09-01 02:42:42 +02:00
commit a49ec6b17a
77 changed files with 11528 additions and 0 deletions
+67
View File
@@ -0,0 +1,67 @@
import { useEffect, useRef } from "react";
export function HelpDialog({
open,
onClose,
}: {
open: boolean;
onClose: () => void;
}) {
const dialog = useRef<HTMLDialogElement>(null);
useEffect(() => {
const node = dialog.current;
if (!node) return;
if (open && !node.open) node.showModal();
if (!open && node.open) node.close();
}, [open]);
return (
<dialog
ref={dialog}
className="help-dialog"
onClose={onClose}
onCancel={onClose}
aria-labelledby="help-title"
>
<div className="dialog-heading">
<div>
<p className="eyebrow">Local-first help</p>
<h2 id="help-title">About Archive Tools</h2>
</div>
<button type="button" onClick={onClose} aria-label="Close help">
×
</button>
</div>
<div className="help-copy">
<p>
Inspect ZIP/ZIP64, TAR/USTAR/PAX, gzip and tar.gz files without
uploading them.
</p>
<h3>Safe repackaging</h3>
<p>
Select regular entries and Archive Tools verifies their content before
placing it in a newly created ZIP. It never restores archive paths
directly onto your filesystem.
</p>
<h3>Intentional boundaries</h3>
<p>
Encryption, split ZIPs, nested archive expansion, GNU TAR extensions,
symlinks, hardlinks, device nodes and FIFOs are unsupported. Unsafe
paths, duplicates, excessive sizes and suspicious compression ratios
are blocked.
</p>
<h3>Previews and comparison</h3>
<p>
Plain UTF-8 text, bounded hexadecimal data and static JPEG/PNG/WebP
images can be previewed. Comparisons use normalized path, type,
expanded size and CRC-32.
</p>
<h3>Deterministic creation</h3>
<p>
Creation sorts files by path and normalizes timestamps, ownership and
permissions. ZIP compression is pinned to a fixed implementation and
level.
</p>
</div>
</dialog>
);
}