spb/trouve-ka Public
Trouve-KA — moteur de recherche web indépendant, Québec-first. Crawler distribué, index OpenSearch, ranking bilingue, galerie d'images. En prod : www.trouve-ka.com
Python 76.8%
TypeScript 15.7%
SQL 3.9%
Shell 1.4%
CSS 1.3%
Dockerfile 0.7%
1/**2 * Trouve-KA — formulaire de jeton d'administration3 * Author: Simon-Pierre Boucher4 * Contact: contact@spboucher.ai5 */67"use client";89import Link from "next/link";10import { useState, type FormEvent } from "react";11import { Button } from "@/components/ui/button";12import { Card, CardContent } from "@/components/ui/card";13import { Input } from "@/components/ui/input";14import { Wordmark } from "@/components/wordmark";1516interface TokenFormProps {17 onSubmit: (token: string) => void;18 expired?: boolean;19}2021export function TokenForm({ onSubmit, expired = false }: TokenFormProps) {22 const [value, setValue] = useState("");2324 function handleSubmit(event: FormEvent) {25 event.preventDefault();26 const token = value.trim();27 if (token) onSubmit(token);28 }2930 return (31 <main32 id="contenu"33 className="flex flex-1 items-center justify-center px-4 py-16"34 >35 <Card className="w-full max-w-sm">36 <CardContent className="p-6">37 <Link href="/" className="group inline-block rounded-sm">38 <Wordmark className="text-[19px]" />39 </Link>40 <h1 className="mt-4 text-base font-bold text-ink">Administration</h1>41 <p className="mt-1 text-sm text-ink-2">42 Entrez le jeton d'administration pour accéder au dashboard du43 robot.44 </p>45 {expired ? (46 <p role="alert" className="mt-3 text-sm font-medium text-danger">47 Jeton invalide ou expiré. Entrez-le de nouveau.48 </p>49 ) : null}50 <form onSubmit={handleSubmit} className="mt-4 space-y-3">51 <label htmlFor="jeton-admin" className="sr-only">52 Jeton d'administration53 </label>54 <Input55 id="jeton-admin"56 type="password"57 autoComplete="off"58 placeholder="Jeton d'administration"59 value={value}60 onChange={(event) => setValue(event.target.value)}61 required62 />63 <Button type="submit" className="w-full">64 Accéder65 </Button>66 </form>67 <p className="mt-4 text-xs text-ink-3">68 Le jeton est conservé uniquement pour la durée de la session du69 navigateur.70 </p>71 </CardContent>72 </Card>73 </main>74 );75}76