feat: NoteCard and public share page support nested checklist items

Update checklist preview parsers to detect 2-space child prefix and
render indented items with extra left padding.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Frederic Cabassut
2026-03-21 23:51:46 +01:00
committed by Fred Cabassut
co-authored by Claude Opus 4.6
parent b9b119567e
commit bdfd2404ef
2 changed files with 22 additions and 10 deletions
+11 -5
View File
@@ -16,6 +16,7 @@
interface ChecklistItem {
text: string;
checked: boolean;
indented: boolean;
}
interface Props {
@@ -38,10 +39,14 @@
const checklistItems = $derived<ChecklistItem[]>(
note.checklistMode
? note.content.split('\n').filter(l => l.trim()).map(line => ({
text: line.replace(/^- \[[ x]\] /, ''),
checked: line.startsWith('- [x] ')
}))
? note.content.split('\n').filter(l => l.trim()).map(line => {
const indented = line.startsWith(' - [');
return {
text: line.replace(/^ {0,2}- \[[ x]\] /, ''),
checked: line.includes('[x]'),
indented
};
})
: []
);
@@ -127,7 +132,8 @@
{#if note.checklistMode && checklistItems.length > 0}
<ul class="space-y-2 mb-6" data-testid="note-checklist-preview">
{#each sortedChecklistItems.slice(0, 8) as item}
<li class="flex items-start gap-2 text-sm {item.checked ? 'text-[var(--text-muted)] line-through' : 'text-[var(--text)]'}">
<li class="flex items-start gap-2 text-sm {item.indented ? 'pl-4 ' : ''}{item.checked ? 'text-[var(--text-muted)] line-through' : 'text-[var(--text)]'}"
data-testid={item.indented ? 'card-checklist-child' : undefined}>
<input
type="checkbox"
checked={item.checked}