Files
Momento/memento-note/components/note-editor/note-metadata-section.tsx
Antigravity 3b2570d981
Some checks failed
CI / Deploy production (on server) (push) Has been cancelled
CI / Lint, Unit Tests & Build (push) Has been cancelled
chore(ci): correct Gitea runner to runs-on ubuntu-24.04 and feat(billing): implement US-3.7 billing/subscription UX
2026-05-28 21:39:08 +00:00

64 lines
2.1 KiB
TypeScript

'use client'
import { useNoteEditorContext } from './note-editor-context'
import { LabelBadge } from '../label-badge'
import { GhostTags } from '../ghost-tags'
import { InlinePaywall } from '@/components/settings/inline-paywall'
import { cn } from '@/lib/utils'
export function NoteMetadataSection() {
const { state, actions, readOnly, globalLabels } = useNoteEditorContext()
const getLabelType = (name: string): 'ai' | 'user' => {
const found = globalLabels.find(l => l.name.toLowerCase() === name.toLowerCase())
return (found as any)?.type === 'ai' ? 'ai' : 'user'
}
return (
<div className="space-y-4">
{/* Labels */}
{state.labels.length > 0 && (
<div className="flex flex-wrap gap-2">
{state.labels.map((label) => (
<LabelBadge
key={label}
label={label}
type={getLabelType(label)}
onRemove={() => actions.handleRemoveLabel(label)}
/>
))}
</div>
)}
{/* Ghost Tags - only show in dialog mode */}
{!readOnly && !state.isMarkdown && (
state.quotaExceededFeature === 'auto_tag' ? (
<InlinePaywall
feature="auto_tag"
onDismiss={() => actions.setQuotaExceededFeature(null)}
/>
) : (
<GhostTags
suggestions={state.filteredSuggestions}
addedTags={state.labels}
isAnalyzing={state.isAnalyzingSuggestions}
onSelectTag={actions.handleSelectGhostTag}
onDismissTag={actions.handleDismissGhostTag}
/>
)
)}
{/* Color indicator */}
<div className="flex items-center gap-2">
<span className="text-xs text-foreground/50">Color:</span>
<div className={cn('w-4 h-4 rounded-full', state.colorClasses?.bg || 'bg-gray-100')} />
</div>
{/* Size indicator */}
<div className="flex items-center gap-2">
<span className="text-xs text-foreground/50">Size:</span>
<span className="text-xs capitalize">{state.size}</span>
</div>
</div>
)
}