feat(notes): liens internes, onglet Réseau, living blocks et consentement IA
Rend les liens entre notes visibles et persistants (sync NoteLink au save, auto-save, graphe réseau rafraîchi), ajoute living blocks, Memory Echo, recherche globale, consentement IA explicite et consolide les prototypes design en architectural-grid. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -50,23 +50,43 @@ export function UsageMeter({ className }: UsageMeterProps) {
|
||||
);
|
||||
}
|
||||
|
||||
const getPackLabel = () => {
|
||||
if (!data.tier) return t('usageMeter.packName');
|
||||
switch (data.tier) {
|
||||
case 'PRO': return t('usageMeter.packPro');
|
||||
case 'BUSINESS': return t('usageMeter.packBusiness');
|
||||
case 'ENTERPRISE': return t('usageMeter.packEnterprise');
|
||||
default: return t('usageMeter.packName');
|
||||
}
|
||||
};
|
||||
|
||||
const isProPlus = data.tier && data.tier !== 'BASIC';
|
||||
|
||||
// Features visibles dans l'UI (les features techniques comme expand/enrich sont cachées)
|
||||
const VISIBLE_FEATURES = new Set([
|
||||
'semantic_search',
|
||||
'auto_tag',
|
||||
'auto_title',
|
||||
'reformulate',
|
||||
'chat',
|
||||
'brainstorm_create', // Sera affiché comme "Sessions brainstorm"
|
||||
'suggest_charts',
|
||||
]);
|
||||
|
||||
const featureLabels: Record<string, string> = {
|
||||
semantic_search: t('usageMeter.featureSearch'),
|
||||
auto_tag: t('usageMeter.featureTags'),
|
||||
auto_title: t('usageMeter.featureTitles'),
|
||||
reformulate: t('usageMeter.featureReformulate'),
|
||||
chat: t('usageMeter.featureChat'),
|
||||
brainstorm_create: t('usageMeter.featureBrainstormCreate'),
|
||||
brainstorm_expand: t('usageMeter.featureBrainstormExpand'),
|
||||
brainstorm_enrich: t('usageMeter.featureBrainstormEnrich'),
|
||||
brainstorm_create: t('usageMeter.featureBrainstormSessions'), // Label simplifié
|
||||
suggest_charts: t('usageMeter.featureCharts'),
|
||||
};
|
||||
|
||||
const featureQuotas = Object.entries(data.quotas)
|
||||
.filter(([_, q]) => q.limit > 0)
|
||||
.filter(([key, q]) => q.limit > 0 && VISIBLE_FEATURES.has(key))
|
||||
.map(([key, quota]) => ({
|
||||
key,
|
||||
key: key === 'brainstorm_create' ? 'brainstorm_sessions' : key, // Renommer pour l'affichage
|
||||
label: featureLabels[key] || key,
|
||||
used: quota.used,
|
||||
limit: quota.limit,
|
||||
@@ -105,7 +125,7 @@ export function UsageMeter({ className }: UsageMeterProps) {
|
||||
: 'text-brand-accent fill-brand-accent/20'
|
||||
)}
|
||||
/>
|
||||
<span className="text-[11px] font-bold text-ink/70">{t('usageMeter.packName')}</span>
|
||||
<span className="text-[11px] font-bold text-ink/70">{getPackLabel()}</span>
|
||||
|
||||
{!isUnlimited && (
|
||||
<>
|
||||
|
||||
Reference in New Issue
Block a user