feat: publication pages — design moderne + modération IA + signalement
Some checks failed
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled

Page publique (/p/[slug]):
- Design éditorial moderne (Source Serif 4 + Inter, couleurs Momento)
- KaTeX rendu côté serveur (plus de 3184089 en brut)
- Callouts colorés, toggles, colonnes, code blocks rendus correctement
- Barre sticky avec logo + bouton Signaler
- Temps de lecture estimé
- Footer Momento
- Responsive

Modération:
- content-moderation.service.ts — IA classe safe/flagged/blocked
- Sera appelée automatiquement à la publication

Signalement:
- Page /p/[slug]/report — formulaire de signalement public
- API /api/notes/report — stocke notification au propriétaire + admins
- 8 motifs: illegal, haine, violence, sexuel, harcèlement, copyright, spam, autre

i18n: FR/EN
This commit is contained in:
Antigravity
2026-06-19 22:11:51 +00:00
parent 1d614dd9c0
commit a6cdcba76f
5 changed files with 359 additions and 47 deletions

View File

@@ -5,6 +5,7 @@ import { Globe, X, Copy, Check, Loader2, ExternalLink } from 'lucide-react'
import { useLanguage } from '@/lib/i18n'
import { toast } from 'sonner'
import { cn } from '@/lib/utils'
import { copyTextToClipboard } from '@/lib/editor/copy-text-to-clipboard'
interface PublishDialogProps {
open: boolean
@@ -65,11 +66,9 @@ export function PublishDialog({ open, onClose, noteId, noteTitle, isPublic: init
finally { setLoading(false) }
}
const copyLink = () => {
navigator.clipboard.writeText(publicUrl)
setCopied(true)
setTimeout(() => setCopied(false), 2000)
toast.success('Lien copié !')
const copyLink = async () => {
const ok = await copyTextToClipboard(publicUrl)
if (ok) { setCopied(true); setTimeout(() => setCopied(false), 2000); toast.success('Lien copié !') }
}
return (