fix: shift range from a pinned note in its folder; kanban fits the window; list toolbar; quick dump targets only select; aligned bullets; steady search field; browser voice waits 5 s
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 2m28s

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
sandrodachandClaude Opus 5.5 committed 2026-11-01 16:12:01 +01:00
1 parent 5a9c5bac37
commit e2b9daba75
26 files changed
+208 -138

No files matched your search

@@ -437,7 +437,7 @@ export const InstantCaptureBar: React.FC<InstantCaptureBarProps> = ({
<div>
<div className="flex items-center justify-between mb-1.5">
<span className="text-[11px] font-semibold uppercase tracking-wider text-muted">
Wohin damit? {content.trim() ? '(Klick speichert sofort oder wählt Ziel)' : '(Ziel für Eingabe wählen)'}
Wohin damit?
</span>
<span className="text-[11px] text-faint">
Standard: Quick Dump für späteres Swipen
@@ -450,9 +450,6 @@ export const InstantCaptureBar: React.FC<InstantCaptureBarProps> = ({
type="button"
onClick={() => {
setTarget('inbox');
if (content.trim()) {
executeCapture('inbox');
}
}}
className={`min-h-[36px] px-2.5 border rounded-btn flex items-center gap-1.5 text-left transition-colors cursor-pointer ${
target === 'inbox'
@@ -469,10 +466,6 @@ export const InstantCaptureBar: React.FC<InstantCaptureBarProps> = ({
type="button"
onClick={() => {
setTarget('task');
// With task lists the row below picks one (and saves); otherwise save right away
if (content.trim() && writableTaskLists.length === 0) {
executeCapture('task');
}
}}
className={`min-h-[36px] px-2.5 border rounded-btn flex items-center gap-1.5 text-left transition-colors cursor-pointer ${
target === 'task'
@@ -508,9 +501,6 @@ export const InstantCaptureBar: React.FC<InstantCaptureBarProps> = ({
type="button"
onClick={() => {
setTarget('document');
if (content.trim()) {
executeCapture('document');
}
}}
className={`min-h-[36px] px-2.5 border rounded-btn flex items-center gap-1.5 text-left transition-colors cursor-pointer ${
target === 'document'
@@ -539,9 +529,6 @@ export const InstantCaptureBar: React.FC<InstantCaptureBarProps> = ({
type="button"
onClick={() => {
setTargetTaskListId(tl.id);
if (content.trim()) {
executeCapture('task', undefined, tl.id);
}
}}
className={`min-h-[30px] px-2.5 border rounded-btn text-xs flex items-center gap-1.5 transition-colors cursor-pointer ${
isSelected
@@ -573,9 +560,6 @@ export const InstantCaptureBar: React.FC<InstantCaptureBarProps> = ({
onClick={() => {
setTarget('list_item');
setTargetListId(lst.id);
if (content.trim()) {
executeCapture('list_item', lst.id);
}
}}
className={`min-h-[30px] px-2.5 border rounded-btn text-xs flex items-center gap-1.5 transition-colors cursor-pointer ${
isSelected
@@ -24,7 +24,7 @@ describe('InstantCaptureBar', () => {
sessionStorage.clear();
});
it('shows the list row that fits the target and saves into the chosen task list', async () => {
it('shows the list row that fits the target and saves into the chosen task list on send', async () => {
await act(async () => {
render(<InstantCaptureBar onCaptured={() => {}} lists={lists} defaultShowOptions />);
});
@@ -38,8 +38,11 @@ describe('InstantCaptureBar', () => {
expect(captureThought).not.toHaveBeenCalled();
expect(screen.queryByText('Wocheneinkauf')).toBeNull();
expect(screen.queryByText('Fremd')).toBeNull();
// Picking the list only selects it as well; saving takes the send button (or Enter)
fireEvent.click(screen.getByRole('button', { name: /Homelab/ }));
expect(captureThought).not.toHaveBeenCalled();
await act(async () => {
fireEvent.click(screen.getByRole('button', { name: /Homelab/ }));
fireEvent.submit(screen.getByRole('textbox').closest('form')!);
});
expect(captureThought).toHaveBeenCalledWith('Backup prüfen', 'normal', 'manual', '', {
target: 'task',