chore: update Angular cache and TypeScript build info files
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
<div class="container mx-auto p-4 sm:p-6">
|
||||
<h2 class="text-3xl font-bold mb-6 text-slate-100 border-l-4 border-red-500 pl-4">{{ pageHeading() }}</h2>
|
||||
<header class="mb-4">
|
||||
<h1 class="text-xl sm:text-2xl font-semibold text-slate-100">{{ pageHeading() }}</h1>
|
||||
<p class="text-sm text-white/60 mt-1">{{ activeProvidersDisplay() }}</p>
|
||||
</header>
|
||||
|
||||
@if (notice()) {
|
||||
<div class="mb-4 bg-amber-900/40 border border-amber-600 text-amber-200 p-3 rounded">
|
||||
@@ -27,21 +30,68 @@
|
||||
</div>
|
||||
}
|
||||
|
||||
<!-- Unified multi-provider grouped suggestions -->
|
||||
<!-- Unified per-provider sections -->
|
||||
@if (showUnified()) {
|
||||
<app-search-suggestions [groups]="groups()" [query]="q()"></app-search-suggestions>
|
||||
<section *ngFor="let p of activeProviders()">
|
||||
<div class="sticky top-0 z-10 flex items-center justify-between bg-black/50 backdrop-blur px-4 py-2 border-b border-white/10">
|
||||
<h2 class="text-sm font-medium">{{ providerDisplay(p) }} <span class="text-white/40" *ngIf="groups()[p]">({{ groups()[p].length || 0 }})</span></h2>
|
||||
<button class="inline-flex items-center rounded-xl px-3 py-1.5 text-xs border border-white/20 hover:bg-white/5"
|
||||
(click)="onViewAll(p)"
|
||||
aria-label="Voir tout sur {{ providerDisplay(p) }}">
|
||||
Voir tout sur {{ providerDisplay(p) }}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div *ngIf="groups()[p]?.length; else noResTpl" class="grid gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 p-4">
|
||||
<a *ngFor="let v of groups()[p]"
|
||||
class="group block rounded-2xl border border-white/10 bg-white/5 hover:bg-white/10 transition overflow-hidden"
|
||||
[href]="v.url || '#'" target="_blank" rel="noopener noreferrer"
|
||||
[attr.aria-label]="v.title">
|
||||
<div class="relative">
|
||||
<img [src]="v.thumbnail" [alt]="v.title" class="w-full h-44 object-cover" loading="lazy">
|
||||
</div>
|
||||
<div class="p-3">
|
||||
<div class="text-sm font-medium text-slate-100 line-clamp-2">{{ v.title }}</div>
|
||||
<div class="mt-1 text-xs text-white/60 line-clamp-1">{{ v.uploaderName }}</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<ng-template #noResTpl>
|
||||
<div class="px-4 py-6 text-white/50 text-sm">Aucun résultat pour ce fournisseur.</div>
|
||||
</ng-template>
|
||||
</section>
|
||||
}
|
||||
|
||||
<input
|
||||
#searchInput
|
||||
type="text"
|
||||
class="flex-1 bg-slate-900 text-slate-100 border border-slate-700 rounded-l-full px-4 py-2 focus:outline-none focus:ring-2 focus:ring-red-500"
|
||||
placeholder="Rechercher..."
|
||||
[value]="q()"
|
||||
(input)="onSearchInput($event)"
|
||||
(keydown.enter)="onSearchEnter($event)"
|
||||
(keydown.escape)="closeSearchResults()"
|
||||
/>
|
||||
@if (hasQuery()) {
|
||||
<div class="my-4 flex flex-col sm:flex-row items-stretch sm:items-center justify-between gap-3">
|
||||
<div class="flex items-center gap-2">
|
||||
<label class="text-sm text-slate-300" for="sortSelect">Trier par</label>
|
||||
<select id="sortSelect" class="bg-slate-900 text-slate-100 border border-slate-700 rounded px-2 py-1 text-sm"
|
||||
[value]="sortParam()" (change)="onSortChange($event)">
|
||||
<option value="relevance">Pertinence</option>
|
||||
<option value="date">Date</option>
|
||||
<option value="views">Vues</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="flex items-center gap-2 justify-end">
|
||||
<button class="px-3 py-1 rounded bg-slate-700 hover:bg-slate-600 text-slate-100 disabled:opacity-50"
|
||||
(click)="prevPage()" [disabled]="!canPrev()">Précédent</button>
|
||||
<div class="text-sm text-slate-300">Page {{ pageParam() }}</div>
|
||||
<button class="px-3 py-1 rounded bg-slate-700 hover:bg-slate-600 text-slate-100" (click)="nextPage()">Suivant</button>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
@if (showUnified() && !loading() && unifiedTotal() === 0 && hasQuery()) {
|
||||
<p class="text-slate-400">Aucun résultat pour « {{ q() }} » avec les fournisseurs sélectionnés.</p>
|
||||
}
|
||||
|
||||
@if (error()) {
|
||||
<div class="mb-4 bg-red-900/40 border border-red-600 text-red-200 p-3 rounded flex items-center justify-between">
|
||||
<span>{{ error() }}</span>
|
||||
<button class="px-3 py-1 rounded bg-red-600 hover:bg-red-500 text-white text-sm" (click)="onSearchBarSubmit({ q: q(), providers: providersListParam() || 'all' })">Réessayer</button>
|
||||
</div>
|
||||
}
|
||||
|
||||
@if (loading()) {
|
||||
<div class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6">
|
||||
|
||||
Reference in New Issue
Block a user