Files
projectsend/resources/views/app.blade.php
T
ignacionelson 6e47d76ba6 ProjectSend 2.0.0
Client file sharing, rebuilt from the ground up: a private area per
client, resumable uploads, folders, groups and categories, sharing with
expiry dates and download limits, comments, file versions, an activity
log, a REST API, and sixteen languages.

This repository begins here. ProjectSend 2 was developed privately, and
that development history is not published — the previous generation
remains available, with its own history, at projectsend/legacy.

Free software under the GNU General Public License v2, or (at your
option) any later version.
2026-08-14 01:38:12 -03:00

68 lines
3.4 KiB
PHP

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
@if($page['props']['noindex'] ?? false)
<meta name="robots" content="noindex">
@endif
{{-- Name only, never the version: this tag is served to anyone
who asks, and publishing the exact release tells a scanner
which advisories apply to this installation. What it buys
is ecosystem visibility surveys like BuiltWith count
ProjectSend installs from this and nothing else. --}}
@if(app(\App\Modules\Platform\Attribution\Attribution::class)->visible())
<meta name="generator" content="ProjectSend">
@endif
<title inertia>{{ config('app.name', 'ProjectSend') }}</title>
{{-- Which cookie holds this installation's CSRF token. Named after
the installation rather than the framework, so a neighbouring
Laravel app on the same hostname cannot overwrite it — and
there is nothing on the client that could work the name out. --}}
<meta name="xsrf-cookie" content="{{ \App\Http\Middleware\ValidateCsrfToken::cookieName() }}">
<link rel="icon" href="/favicon.ico" sizes="48x48">
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="preconnect" href="https://fonts.bunny.net">
<link href="https://fonts.bunny.net/css?family=instrument-sans:400,500,600" rel="stylesheet" />
@routes
@viteReactRefresh
@php
// A page component may be shipped by an installed package
// under vendor/<vendor>/<name>/resources/js/pages/ instead of
// this app's own resources/js/pages/. This must stay in step
// with the client-side glob in resources/js/app.tsx — they
// are two halves of one lookup, and when they disagreed the
// page built cleanly, type-checked cleanly, and then answered
// 500 with "Unable to locate file in Vite manifest".
$pageComponentPath = "resources/js/pages/{$page['component']}.tsx";
if (! file_exists(base_path($pageComponentPath))) {
$packageMatch = glob(base_path("vendor/*/*/resources/js/pages/{$page['component']}.tsx"))[0] ?? null;
if ($packageMatch !== null) {
$pageComponentPath = ltrim(str_replace(base_path(), '', $packageMatch), '/');
}
}
@endphp
@vite(['resources/js/app.tsx', $pageComponentPath])
@inertiaHead
{{-- Operator-authored snippets (Community only). Raw by design
see CustomAssetsBridge, which returns '' unless the edition
grants the capability and the module is actually installed.
This is the one root view for all three surfaces (public,
portal, staff), so it is the only place they need wiring. --}}
{!! app(\App\Modules\Platform\CustomAssets\CustomAssetsBridge::class)->render('head') !!}
</head>
<body class="font-sans antialiased">
{!! app(\App\Modules\Platform\CustomAssets\CustomAssetsBridge::class)->render('body_top') !!}
@inertia
{!! app(\App\Modules\Platform\CustomAssets\CustomAssetsBridge::class)->render('body_bottom') !!}
</body>
</html>