feat(credits): solde IA unique (option M), packs Stripe et polish billing
Un pot de crédits global (BASIC 100 / PRO 1 000 / BUSINESS 4 000) remplace les seaux par fonction côté débit. Packs one-shot S/M/L, admin sans seaux legacy, usage multi-features, hints de coût, anti-flash thème et hydratation admin. Inclut aussi le pipeline slides renforcé et la page publique polishée.
This commit is contained in:
@@ -40,7 +40,7 @@ import {
|
||||
import { useSearchModal } from '@/context/search-modal-context'
|
||||
import { useLanguage } from '@/lib/i18n'
|
||||
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
||||
import { applyDocumentTheme } from '@/lib/apply-document-theme'
|
||||
import { persistThemePreference } from '@/lib/apply-document-theme'
|
||||
import { getAllNotes, getTrashCount, getNotesWithReminders, toggleReminderDone, getInboxCount } from '@/app/actions/notes'
|
||||
import { NOTE_CHANGE_EVENT, type NoteChangeEvent } from '@/lib/note-change-sync'
|
||||
import { useNotebooks } from '@/context/notebooks-context'
|
||||
@@ -676,9 +676,9 @@ export function Sidebar({ className, user }: { className?: string; user?: any })
|
||||
const toggleTheme = useCallback(() => {
|
||||
const next = !isDark
|
||||
setIsDark(next)
|
||||
const theme = next ? 'dark' : 'light'
|
||||
localStorage.setItem('theme-preference', theme)
|
||||
applyDocumentTheme(theme)
|
||||
// Cookie + localStorage : le serveur doit connaître le dark, sinon flash clair
|
||||
// à chaque changement de page (layout racine réécrit <html>).
|
||||
persistThemePreference(next ? 'dark' : 'light')
|
||||
}, [isDark])
|
||||
const [deletingNotebook, setDeletingNotebook] = useState<Notebook | null>(null)
|
||||
const [isDeleting, setIsDeleting] = useState(false)
|
||||
|
||||
Reference in New Issue
Block a user