diff --git a/apps/manacore/apps/web/src/lib/components/page-carousel/PageCarousel.svelte b/apps/manacore/apps/web/src/lib/components/page-carousel/PageCarousel.svelte index 8ac19f5ce..665fb75d3 100644 --- a/apps/manacore/apps/web/src/lib/components/page-carousel/PageCarousel.svelte +++ b/apps/manacore/apps/web/src/lib/components/page-carousel/PageCarousel.svelte @@ -161,9 +161,9 @@ /* Carousel track */ .fokus-track { display: flex; - gap: 1.5rem; + gap: 1rem; overflow-x: auto; - padding: 1rem calc(50% - var(--sheet-width) / 2); + padding: 0.5rem 0; scrollbar-width: none; flex: 1; } diff --git a/apps/manacore/apps/web/src/lib/components/workbench/app-registry.ts b/apps/manacore/apps/web/src/lib/components/workbench/app-registry.ts index cb29f2004..0060815f3 100644 --- a/apps/manacore/apps/web/src/lib/components/workbench/app-registry.ts +++ b/apps/manacore/apps/web/src/lib/components/workbench/app-registry.ts @@ -63,12 +63,20 @@ export const APP_REGISTRY: AppEntry[] = [ name: 'Times', color: '#F59E0B', load: () => import('$lib/modules/times/ListView.svelte'), + views: { + list: { load: () => import('$lib/modules/times/ListView.svelte') }, + detail: { load: () => import('$lib/modules/times/views/DetailView.svelte') }, + }, }, { id: 'zitare', name: 'Zitare', color: '#EC4899', load: () => import('$lib/modules/zitare/ListView.svelte'), + views: { + list: { load: () => import('$lib/modules/zitare/ListView.svelte') }, + detail: { load: () => import('$lib/modules/zitare/views/DetailView.svelte') }, + }, }, { id: 'cards', diff --git a/apps/manacore/apps/web/src/lib/modules/times/ListView.svelte b/apps/manacore/apps/web/src/lib/modules/times/ListView.svelte index 6ddd42192..86c29c12f 100644 --- a/apps/manacore/apps/web/src/lib/modules/times/ListView.svelte +++ b/apps/manacore/apps/web/src/lib/modules/times/ListView.svelte @@ -1,17 +1,36 @@
- - {#if running} -
-
-
-

{running.description || 'Timer läuft'}

+ +
+ + handleDescriptionInput((e.target as HTMLInputElement).value)} + placeholder="Was trackst du?" + class="min-w-0 flex-1 rounded-md border border-white/10 bg-white/5 px-2.5 py-1.5 text-xs text-white/90 placeholder:text-white/30 focus:border-white/20 focus:outline-none" + /> + {#if timerStore.isRunning} +
+
+ + {formatDuration(timerStore.elapsedSeconds)} +
-

{projectName(running.projectId)}

-
- {/if} + {/if} +
- Heute: {todayEntries.length} Einträge - {formatDuration(totalToday)} + Heute: {todayEntries.length} Eintr{todayEntries.length === 1 ? 'ag' : 'age'} + {fmtCompact(totalToday)}
{#each todayEntries as entry (entry.id)} -
+
+ {/each} - {#if todayEntries.length === 0 && !running} -

Noch keine Zeiteinträge heute

+ {#if todayEntries.length === 0 && !timerStore.isRunning} +

Noch keine Zeiteinträge heute

{/if}
diff --git a/apps/manacore/apps/web/src/lib/modules/times/views/DetailView.svelte b/apps/manacore/apps/web/src/lib/modules/times/views/DetailView.svelte new file mode 100644 index 000000000..33087b245 --- /dev/null +++ b/apps/manacore/apps/web/src/lib/modules/times/views/DetailView.svelte @@ -0,0 +1,524 @@ + + + +
+ {#if !entry} +

Eintrag nicht gefunden

+ {:else} + +
+ (focused = true)} + onblur={saveField} + placeholder="Beschreibung..." + /> +
+ + + {#if entry.startTime || entry.endTime} +
+ {#if entry.startTime}{fmtTime(entry.startTime)}{/if} + {#if entry.startTime && entry.endTime} + – + {/if} + {#if entry.endTime}{fmtTime(entry.endTime)}{/if} +
+ {/if} + + +
+
+ Datum + (focused = true)} + onblur={saveField} + /> +
+ +
+ Dauer +
+ + + +
+
+ +
+ Projekt + +
+ +
+ Abrechenbar + +
+ + {#if selectedProject} +
+ Projekt +
+ + {selectedProject.name} +
+
+ {/if} + + {#if selectedClient} +
+ Kunde + {selectedClient.name} +
+ {/if} +
+ + +
+ {#if entry.createdAt} + Erstellt: {new Date(entry.createdAt).toLocaleDateString('de')} + {/if} + {#if entry.source?.app} + Quelle: {entry.source.app} + {/if} +
+ + +
+ {#if confirmDelete} +

Eintrag wirklich loschen?

+
+ + +
+ {:else} + + {/if} +
+ {/if} +
+ + diff --git a/apps/manacore/apps/web/src/lib/modules/zitare/ListView.svelte b/apps/manacore/apps/web/src/lib/modules/zitare/ListView.svelte index 45c80723e..340f78e83 100644 --- a/apps/manacore/apps/web/src/lib/modules/zitare/ListView.svelte +++ b/apps/manacore/apps/web/src/lib/modules/zitare/ListView.svelte @@ -1,13 +1,31 @@ -
-
-
- «{todayQuote.text}» + + +
handleTagDrop(p.data as unknown as TagDragData), + canDrop: (p) => !currentTagIds.includes((p.data as unknown as TagDragData).id), + }} +> + {#if quote} +
+ «{quotesStore.getText(quote)}»
-

— {todayQuote.author}

-
+

— {quote.author}

-
- {favorites.length} gespeicherte Zitate -
+ + {#if currentTags.length > 0} +
+ {#each currentTags as tag (tag.id)} + + + {tag.name} + + {/each} +
+ {/if} + + + {/if}
+ + diff --git a/apps/manacore/apps/web/src/lib/modules/zitare/types.ts b/apps/manacore/apps/web/src/lib/modules/zitare/types.ts index 5d1c3c21c..555bf4784 100644 --- a/apps/manacore/apps/web/src/lib/modules/zitare/types.ts +++ b/apps/manacore/apps/web/src/lib/modules/zitare/types.ts @@ -6,6 +6,7 @@ import type { BaseRecord } from '@manacore/local-store'; export interface LocalFavorite extends BaseRecord { quoteId: string; + tagIds?: string[] | null; } export interface LocalQuoteList extends BaseRecord { diff --git a/apps/manacore/apps/web/src/lib/modules/zitare/views/DetailView.svelte b/apps/manacore/apps/web/src/lib/modules/zitare/views/DetailView.svelte new file mode 100644 index 000000000..f410c0226 --- /dev/null +++ b/apps/manacore/apps/web/src/lib/modules/zitare/views/DetailView.svelte @@ -0,0 +1,250 @@ + + + +
+ {#if !quote} +

Zitat nicht gefunden

+ {:else} + +
+ “{quoteText}” +
+ + +
+ — {quote.author} + {#if authorBio()} + + {/if} +
+ + {#if showBio && authorBio()} +

{authorBio()}

+ {/if} + + +
+ {categoryLabels[quote.category]} + {#if quote.source || quote.year} + + {#if quote.source}{quote.source}{/if} + {#if quote.source && quote.year} + · + {/if} + {#if quote.year}{quote.year}{/if} + + {/if} +
+ + +
+ + +
+ {/if} +
+ + diff --git a/apps/manacore/apps/web/src/routes/(app)/+page.svelte b/apps/manacore/apps/web/src/routes/(app)/+page.svelte index d2a9f556e..8ab46766a 100644 --- a/apps/manacore/apps/web/src/routes/(app)/+page.svelte +++ b/apps/manacore/apps/web/src/routes/(app)/+page.svelte @@ -4,12 +4,7 @@ import { PageCarousel, type CarouselPage } from '$lib/components/page-carousel'; import { getAppEntry } from '$lib/components/workbench/app-registry'; import { createAppSettingsStore } from '@manacore/shared-stores'; - import { DragPreview, dragSource } from '@manacore/shared-ui/dnd'; - import { useAllTags } from '$lib/stores/tags.svelte'; - - // ── Tags for drag & drop ─────────────────────────────── - const tagsQuery = useAllTags(); - let allTags = $derived(tagsQuery.value ?? []); + import { DragPreview } from '@manacore/shared-ui/dnd'; // ── Persisted workbench state ─────────────────────────── const DEFAULT_WIDTH = 480; @@ -140,23 +135,6 @@
- {#if allTags.length > 0} -
- {#each allTags as tag (tag.id)} - - {/each} -
- {/if} -