Release 2.3.0
A share can now hold a private text (a password, a key, a short note) with its files or on its own. The upload page's new "Private text" card takes up to 100 KB; the browser encrypts the text and sends it through the same chunk pipeline as a file, flagged is_text on share_files, so it gets the share's password, expiry, download limit and cleanup. The recipient sees the text only after pressing "Show text", which counts as their download, so a messenger link preview cannot use up a share limited to one download. The text is left out of the file list, the ZIP and the file counts; the admin dashboard marks shares that hold one with "Text". The website gains a Private text feature card and a fifth phone screenshot; every screenshot is retaken. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
202813a1e6
commit
f9a7839ad3
@@ -74,7 +74,7 @@ test('every file the pages, their stylesheets and the README refer to exists', f
|
||||
test('the screenshots are all there, for both themes and both widths', function () {
|
||||
$expected = collect([
|
||||
'desktop' => ['01-upload', '02-share-created', '03-qr-code', '04-download', '05-admin-dashboard', '06-admin-settings'],
|
||||
'phone' => ['01-upload', '02-password', '03-download', '04-qr-code'],
|
||||
'phone' => ['01-upload', '02-password', '03-download', '04-qr-code', '05-private-text'],
|
||||
])->flatMap(fn (array $names, string $device): array => collect(['light', 'dark'])
|
||||
->crossJoin($names, $device === 'desktop' ? [1600, 800] : [1080, 540])
|
||||
->map(fn (array $shot): string => "{$device}/{$shot[0]}/{$shot[1]}-{$shot[2]}.webp")
|
||||
|
||||
Reference in New Issue
Block a user