mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 18:41:08 +02:00
feat(calendar, todo): add shared help pages
Add help pages to Calendar and Todo web apps using the shared help system: - Calendar: FAQ (events, recurring, sharing, sync, privacy), features, shortcuts, contact — with DE/EN/FR/IT/ES content support - Todo: FAQ (quick add syntax, projects, kanban, recurring, privacy), features, shortcuts, contact — with DE/EN content Both apps follow the Contacts reference implementation pattern. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
37b061f7e6
commit
dd5c0d502f
7 changed files with 1261 additions and 486 deletions
|
|
@ -52,6 +52,8 @@
|
|||
"@manacore/shared-feedback-service": "workspace:*",
|
||||
"@manacore/shared-feedback-ui": "workspace:*",
|
||||
"@manacore/shared-i18n": "workspace:*",
|
||||
"@manacore/shared-help-types": "workspace:*",
|
||||
"@manacore/shared-help-ui": "workspace:*",
|
||||
"@manacore/shared-icons": "workspace:*",
|
||||
"@manacore/shared-profile-ui": "workspace:*",
|
||||
"@manacore/shared-splitscreen": "workspace:*",
|
||||
|
|
|
|||
225
apps/calendar/apps/web/src/lib/content/help/index.ts
Normal file
225
apps/calendar/apps/web/src/lib/content/help/index.ts
Normal file
|
|
@ -0,0 +1,225 @@
|
|||
/**
|
||||
* Help content for Calendar app
|
||||
*/
|
||||
|
||||
import type { HelpContent } from '@manacore/shared-help-types';
|
||||
|
||||
export function getCalendarHelpContent(locale: string): HelpContent {
|
||||
const isDE = locale === 'de';
|
||||
const isFR = locale === 'fr';
|
||||
const isIT = locale === 'it';
|
||||
const isES = locale === 'es';
|
||||
|
||||
function t(de: string, en: string, fr?: string, it?: string, es?: string): string {
|
||||
if (isDE) return de;
|
||||
if (isFR) return fr ?? en;
|
||||
if (isIT) return it ?? en;
|
||||
if (isES) return es ?? en;
|
||||
return en;
|
||||
}
|
||||
|
||||
return {
|
||||
faq: [
|
||||
{
|
||||
id: 'faq-create-event',
|
||||
question: t(
|
||||
'Wie erstelle ich einen Termin?',
|
||||
'How do I create an event?',
|
||||
'Comment créer un événement ?',
|
||||
'Come creo un evento?',
|
||||
'¿Cómo creo un evento?'
|
||||
),
|
||||
answer: t(
|
||||
'<p>Du kannst Termine auf verschiedene Arten erstellen:</p><ul><li><strong>Schnelleingabe</strong>: Nutze die Eingabeleiste oben — tippe z.B. "Meeting morgen 14-16 Uhr @Arbeit"</li><li><strong>Klick & Ziehen</strong>: Klicke und ziehe in der Wochenansicht, um einen Zeitraum auszuwählen</li><li><strong>Neuer Termin</strong>: Klicke auf das + Symbol für das vollständige Formular</li></ul>',
|
||||
'<p>You can create events in several ways:</p><ul><li><strong>Quick input</strong>: Use the input bar at the top — type e.g. "Meeting tomorrow 2-4pm @Work"</li><li><strong>Click & drag</strong>: Click and drag in the week view to select a time range</li><li><strong>New event</strong>: Click the + icon for the full form</li></ul>'
|
||||
),
|
||||
category: 'features',
|
||||
order: 1,
|
||||
language: isDE ? 'de' : isFR ? 'fr' : isIT ? 'it' : isES ? 'es' : 'en',
|
||||
tags: isDE ? ['termin', 'erstellen', 'neu'] : ['event', 'create', 'new'],
|
||||
},
|
||||
{
|
||||
id: 'faq-recurring',
|
||||
question: t(
|
||||
'Wie erstelle ich wiederkehrende Termine?',
|
||||
'How do I create recurring events?'
|
||||
),
|
||||
answer: t(
|
||||
'<p>Öffne einen Termin und setze die <strong>Wiederholung</strong>. Unterstützte Optionen:</p><ul><li>Täglich, wöchentlich, monatlich, jährlich</li><li>Bestimmte Wochentage (z.B. Mo, Mi, Fr)</li><li>Alle X Wochen/Monate</li><li>Enddatum oder Anzahl der Wiederholungen</li></ul><p>In der Schnelleingabe kannst du auch "wöchentlich", "täglich" oder "jeden Montag" eingeben.</p>',
|
||||
'<p>Open an event and set the <strong>recurrence</strong>. Supported options:</p><ul><li>Daily, weekly, monthly, yearly</li><li>Specific weekdays (e.g. Mon, Wed, Fri)</li><li>Every X weeks/months</li><li>End date or number of occurrences</li></ul><p>In the quick input, you can also type "weekly", "daily", or "every Monday".</p>'
|
||||
),
|
||||
category: 'features',
|
||||
order: 2,
|
||||
language: isDE ? 'de' : 'en',
|
||||
tags: isDE ? ['wiederkehrend', 'wiederholung', 'serie'] : ['recurring', 'repeat', 'series'],
|
||||
},
|
||||
{
|
||||
id: 'faq-share-calendar',
|
||||
question: t(
|
||||
'Wie teile ich einen Kalender mit anderen?',
|
||||
'How do I share a calendar with others?'
|
||||
),
|
||||
answer: t(
|
||||
'<p>Gehe zu <strong>Einstellungen > Freigabe</strong> und wähle den Kalender aus. Du kannst:</p><ul><li><strong>Per E-Mail</strong> einladen (Lese- oder Schreibzugriff)</li><li><strong>Per Link</strong> teilen (mit optionalem Ablaufdatum)</li><li>Berechtigungen nachträglich ändern oder entziehen</li></ul>',
|
||||
'<p>Go to <strong>Settings > Sharing</strong> and select the calendar. You can:</p><ul><li><strong>Invite by email</strong> (read or write access)</li><li><strong>Share by link</strong> (with optional expiration)</li><li>Change or revoke permissions later</li></ul>'
|
||||
),
|
||||
category: 'features',
|
||||
order: 3,
|
||||
language: isDE ? 'de' : 'en',
|
||||
tags: isDE ? ['teilen', 'freigabe', 'einladen'] : ['share', 'invite', 'permissions'],
|
||||
},
|
||||
{
|
||||
id: 'faq-sync',
|
||||
question: t('Kann ich externe Kalender synchronisieren?', 'Can I sync external calendars?'),
|
||||
answer: t(
|
||||
'<p>Ja! Gehe zu <strong>Einstellungen > Sync</strong>. Unterstützte Quellen:</p><ul><li><strong>CalDAV</strong>: Nextcloud, Radicale, etc.</li><li><strong>iCal URL</strong>: Jeder öffentliche Kalender-Feed</li><li><strong>Google Kalender</strong> (über CalDAV)</li><li><strong>Apple Kalender</strong> (über CalDAV)</li></ul><p>Die Synchronisation erfolgt automatisch im eingestellten Intervall.</p>',
|
||||
'<p>Yes! Go to <strong>Settings > Sync</strong>. Supported sources:</p><ul><li><strong>CalDAV</strong>: Nextcloud, Radicale, etc.</li><li><strong>iCal URL</strong>: Any public calendar feed</li><li><strong>Google Calendar</strong> (via CalDAV)</li><li><strong>Apple Calendar</strong> (via CalDAV)</li></ul><p>Synchronization happens automatically at the configured interval.</p>'
|
||||
),
|
||||
category: 'technical',
|
||||
order: 4,
|
||||
language: isDE ? 'de' : 'en',
|
||||
tags: isDE
|
||||
? ['sync', 'caldav', 'google', 'apple', 'extern']
|
||||
: ['sync', 'caldav', 'google', 'apple', 'external'],
|
||||
},
|
||||
{
|
||||
id: 'faq-privacy',
|
||||
question: t('Wie werden meine Daten geschützt?', 'How is my data protected?'),
|
||||
answer: t(
|
||||
'<p>Deine Daten sind sicher:</p><ul><li><strong>Verschlüsselung</strong>: Alle Daten werden bei der Übertragung (TLS) verschlüsselt</li><li><strong>DSGVO-konform</strong>: Wir halten uns an die EU-Datenschutzverordnung</li><li><strong>Kein Datenverkauf</strong>: Deine Kalender-Daten werden nie an Dritte verkauft</li><li><strong>Export</strong>: Du kannst jederzeit alle Kalender als iCal exportieren</li></ul>',
|
||||
'<p>Your data is secure:</p><ul><li><strong>Encryption</strong>: All data is encrypted in transit (TLS)</li><li><strong>GDPR Compliant</strong>: We follow EU data protection regulations</li><li><strong>No Data Selling</strong>: Your calendar data is never sold to third parties</li><li><strong>Export</strong>: You can export all calendars as iCal anytime</li></ul>'
|
||||
),
|
||||
category: 'privacy',
|
||||
order: 5,
|
||||
language: isDE ? 'de' : 'en',
|
||||
featured: true,
|
||||
tags: isDE ? ['datenschutz', 'dsgvo', 'sicherheit'] : ['privacy', 'gdpr', 'security'],
|
||||
},
|
||||
],
|
||||
features: [
|
||||
{
|
||||
id: 'feature-calendars',
|
||||
title: t('Mehrere Kalender', 'Multiple Calendars'),
|
||||
description: t(
|
||||
'Erstelle farbcodierte Kalender für Arbeit, Privat und mehr',
|
||||
'Create color-coded calendars for work, personal, and more'
|
||||
),
|
||||
icon: '📅',
|
||||
category: 'core',
|
||||
highlights: t(
|
||||
'Farbcodierung,Ein-/Ausblenden,Standard-Kalender',
|
||||
'Color coding,Show/hide,Default calendar'
|
||||
).split(','),
|
||||
content: '',
|
||||
order: 1,
|
||||
language: isDE ? 'de' : 'en',
|
||||
},
|
||||
{
|
||||
id: 'feature-views',
|
||||
title: t('Flexible Ansichten', 'Flexible Views'),
|
||||
description: t(
|
||||
'Wechsle zwischen Tag-, Wochen-, Monats- und Agenda-Ansicht',
|
||||
'Switch between day, week, month, and agenda views'
|
||||
),
|
||||
icon: '👁️',
|
||||
category: 'core',
|
||||
highlights: t(
|
||||
'Wochenansicht,Monatsansicht,Agenda-Liste,Tagesansicht',
|
||||
'Week view,Month view,Agenda list,Day view'
|
||||
).split(','),
|
||||
content: '',
|
||||
order: 2,
|
||||
language: isDE ? 'de' : 'en',
|
||||
},
|
||||
{
|
||||
id: 'feature-recurring',
|
||||
title: t('Wiederkehrende Termine', 'Recurring Events'),
|
||||
description: t(
|
||||
'Erstelle Serien mit flexiblen Wiederholungsregeln',
|
||||
'Create series with flexible recurrence rules'
|
||||
),
|
||||
icon: '🔄',
|
||||
category: 'advanced',
|
||||
highlights: t(
|
||||
'RFC 5545 RRULE,Ausnahmen,Enddatum oder Anzahl',
|
||||
'RFC 5545 RRULE,Exceptions,End date or count'
|
||||
).split(','),
|
||||
content: '',
|
||||
order: 3,
|
||||
language: isDE ? 'de' : 'en',
|
||||
},
|
||||
{
|
||||
id: 'feature-sharing',
|
||||
title: t('Kalender teilen', 'Calendar Sharing'),
|
||||
description: t(
|
||||
'Teile Kalender mit Lese- oder Schreibzugriff',
|
||||
'Share calendars with read or write access'
|
||||
),
|
||||
icon: '🤝',
|
||||
category: 'advanced',
|
||||
highlights: t(
|
||||
'E-Mail-Einladung,Link-Freigabe,Berechtigungen',
|
||||
'Email invitation,Link sharing,Permissions'
|
||||
).split(','),
|
||||
content: '',
|
||||
order: 4,
|
||||
language: isDE ? 'de' : 'en',
|
||||
},
|
||||
],
|
||||
shortcuts: [
|
||||
{
|
||||
id: 'shortcuts-navigation',
|
||||
category: 'navigation',
|
||||
title: 'Navigation',
|
||||
language: isDE ? 'de' : 'en',
|
||||
order: 1,
|
||||
shortcuts: [
|
||||
{
|
||||
shortcut: 'Cmd/Ctrl + 1',
|
||||
action: t('Kalender öffnen', 'Open Calendar'),
|
||||
},
|
||||
{
|
||||
shortcut: 'Cmd/Ctrl + 2',
|
||||
action: t('Aufgaben öffnen', 'Open Tasks'),
|
||||
},
|
||||
{
|
||||
shortcut: 'Cmd/Ctrl + 3',
|
||||
action: t('Einstellungen öffnen', 'Open Settings'),
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'shortcuts-calendar',
|
||||
category: 'app-specific',
|
||||
title: t('Kalender', 'Calendar'),
|
||||
language: isDE ? 'de' : 'en',
|
||||
order: 2,
|
||||
shortcuts: [
|
||||
{
|
||||
shortcut: 'Enter / Space',
|
||||
action: t('Event/Task öffnen', 'Open event/task'),
|
||||
},
|
||||
{
|
||||
shortcut: 'Esc',
|
||||
action: t('Drag/Resize abbrechen', 'Cancel drag/resize'),
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
gettingStarted: [],
|
||||
changelog: [],
|
||||
contact: {
|
||||
id: 'contact-support',
|
||||
title: t('Support kontaktieren', 'Contact Support'),
|
||||
content: t(
|
||||
'<p>Unser Support-Team hilft dir bei allen Fragen rund um den Kalender.</p>',
|
||||
'<p>Our support team is here to help you with any calendar-related questions.</p>'
|
||||
),
|
||||
language: isDE ? 'de' : 'en',
|
||||
order: 1,
|
||||
supportEmail: 'support@mana.how',
|
||||
documentationUrl: 'https://mana.how/docs',
|
||||
responseTime: t('Normalerweise innerhalb von 24 Stunden', 'Usually within 24 hours'),
|
||||
},
|
||||
};
|
||||
}
|
||||
177
apps/calendar/apps/web/src/routes/(app)/help/+page.svelte
Normal file
177
apps/calendar/apps/web/src/routes/(app)/help/+page.svelte
Normal file
|
|
@ -0,0 +1,177 @@
|
|||
<script lang="ts">
|
||||
import { goto } from '$app/navigation';
|
||||
import { locale } from 'svelte-i18n';
|
||||
import { HelpPage } from '@manacore/shared-help-ui';
|
||||
import type { HelpPageTranslations } from '@manacore/shared-help-ui';
|
||||
import { getCalendarHelpContent } from '$lib/content/help/index.js';
|
||||
|
||||
const content = $derived(getCalendarHelpContent($locale ?? 'de'));
|
||||
|
||||
const translations: HelpPageTranslations = $derived(
|
||||
$locale === 'de'
|
||||
? {
|
||||
title: 'Hilfe & Support',
|
||||
subtitle: 'Finde Antworten und lerne den Kalender kennen',
|
||||
searchPlaceholder: 'Hilfe durchsuchen...',
|
||||
sections: {
|
||||
faq: 'FAQ',
|
||||
features: 'Features',
|
||||
shortcuts: 'Tastenkürzel',
|
||||
gettingStarted: 'Erste Schritte',
|
||||
changelog: 'Änderungen',
|
||||
contact: 'Kontakt',
|
||||
},
|
||||
search: {
|
||||
noResults: 'Keine Ergebnisse für "{query}"',
|
||||
resultsCount: '{count} Ergebnisse',
|
||||
searching: 'Suche...',
|
||||
},
|
||||
faq: {
|
||||
noItems: 'Keine häufigen Fragen verfügbar.',
|
||||
allCategories: 'Alle',
|
||||
categories: {
|
||||
general: 'Allgemein',
|
||||
account: 'Konto',
|
||||
billing: 'Abrechnung',
|
||||
features: 'Funktionen',
|
||||
technical: 'Technisch',
|
||||
privacy: 'Datenschutz',
|
||||
},
|
||||
},
|
||||
features: {
|
||||
noItems: 'Keine Features verfügbar.',
|
||||
comingSoon: 'Demnächst',
|
||||
learnMore: 'Mehr erfahren',
|
||||
},
|
||||
shortcuts: {
|
||||
noItems: 'Keine Tastenkürzel verfügbar.',
|
||||
columns: {
|
||||
shortcut: 'Kürzel',
|
||||
action: 'Aktion',
|
||||
description: 'Beschreibung',
|
||||
},
|
||||
},
|
||||
gettingStarted: {
|
||||
noItems: 'Keine Anleitungen verfügbar.',
|
||||
estimatedTime: 'Geschätzte Zeit',
|
||||
difficulty: {
|
||||
beginner: 'Einsteiger',
|
||||
intermediate: 'Fortgeschritten',
|
||||
advanced: 'Experte',
|
||||
},
|
||||
},
|
||||
changelog: {
|
||||
noItems: 'Keine Änderungen verfügbar.',
|
||||
showAll: 'Alle Versionen anzeigen',
|
||||
types: { major: 'Hauptversion', minor: 'Nebenversion', patch: 'Patch', beta: 'Beta' },
|
||||
labels: {
|
||||
features: 'Neue Funktionen',
|
||||
improvements: 'Verbesserungen',
|
||||
bugFixes: 'Fehlerbehebungen',
|
||||
},
|
||||
},
|
||||
contact: {
|
||||
noInfo: 'Keine Kontaktinformationen verfügbar.',
|
||||
email: 'E-Mail senden',
|
||||
responseTime: 'Antwortzeit',
|
||||
},
|
||||
common: {
|
||||
back: 'Zurück',
|
||||
showMore: 'Mehr anzeigen',
|
||||
showLess: 'Weniger anzeigen',
|
||||
},
|
||||
}
|
||||
: {
|
||||
title: 'Help & Support',
|
||||
subtitle: 'Find answers and learn how to use Calendar',
|
||||
searchPlaceholder: 'Search help...',
|
||||
sections: {
|
||||
faq: 'FAQ',
|
||||
features: 'Features',
|
||||
shortcuts: 'Shortcuts',
|
||||
gettingStarted: 'Getting Started',
|
||||
changelog: 'Changelog',
|
||||
contact: 'Contact',
|
||||
},
|
||||
search: {
|
||||
noResults: 'No results for "{query}"',
|
||||
resultsCount: '{count} results',
|
||||
searching: 'Searching...',
|
||||
},
|
||||
faq: {
|
||||
noItems: 'No frequently asked questions available.',
|
||||
allCategories: 'All',
|
||||
categories: {
|
||||
general: 'General',
|
||||
account: 'Account',
|
||||
billing: 'Billing',
|
||||
features: 'Features',
|
||||
technical: 'Technical',
|
||||
privacy: 'Privacy',
|
||||
},
|
||||
},
|
||||
features: {
|
||||
noItems: 'No features available.',
|
||||
comingSoon: 'Coming Soon',
|
||||
learnMore: 'Learn More',
|
||||
},
|
||||
shortcuts: {
|
||||
noItems: 'No keyboard shortcuts available.',
|
||||
columns: {
|
||||
shortcut: 'Shortcut',
|
||||
action: 'Action',
|
||||
description: 'Description',
|
||||
},
|
||||
},
|
||||
gettingStarted: {
|
||||
noItems: 'No guides available.',
|
||||
estimatedTime: 'Estimated time',
|
||||
difficulty: {
|
||||
beginner: 'Beginner',
|
||||
intermediate: 'Intermediate',
|
||||
advanced: 'Advanced',
|
||||
},
|
||||
},
|
||||
changelog: {
|
||||
noItems: 'No changelog available.',
|
||||
showAll: 'Show all releases',
|
||||
types: { major: 'Major', minor: 'Minor', patch: 'Patch', beta: 'Beta' },
|
||||
labels: {
|
||||
features: 'New Features',
|
||||
improvements: 'Improvements',
|
||||
bugFixes: 'Bug Fixes',
|
||||
},
|
||||
},
|
||||
contact: {
|
||||
noInfo: 'No contact information available.',
|
||||
email: 'Send email',
|
||||
responseTime: 'Response time',
|
||||
},
|
||||
common: {
|
||||
back: 'Back',
|
||||
showMore: 'Show more',
|
||||
showLess: 'Show less',
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
function handleBack() {
|
||||
goto('/');
|
||||
}
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>{translations.title} | Kalender</title>
|
||||
</svelte:head>
|
||||
|
||||
<HelpPage
|
||||
{content}
|
||||
appName="Kalender"
|
||||
appId="calendar"
|
||||
{translations}
|
||||
showBackButton
|
||||
onBack={handleBack}
|
||||
showGettingStarted={false}
|
||||
showChangelog={false}
|
||||
defaultSection="faq"
|
||||
/>
|
||||
|
|
@ -48,6 +48,8 @@
|
|||
"@manacore/shared-feedback-service": "workspace:*",
|
||||
"@manacore/shared-feedback-ui": "workspace:*",
|
||||
"@manacore/shared-i18n": "workspace:*",
|
||||
"@manacore/shared-help-types": "workspace:*",
|
||||
"@manacore/shared-help-ui": "workspace:*",
|
||||
"@manacore/shared-icons": "workspace:*",
|
||||
"@manacore/shared-profile-ui": "workspace:*",
|
||||
"@manacore/shared-splitscreen": "workspace:*",
|
||||
|
|
|
|||
189
apps/todo/apps/web/src/lib/content/help/index.ts
Normal file
189
apps/todo/apps/web/src/lib/content/help/index.ts
Normal file
|
|
@ -0,0 +1,189 @@
|
|||
/**
|
||||
* Help content for Todo app
|
||||
*/
|
||||
|
||||
import type { HelpContent } from '@manacore/shared-help-types';
|
||||
|
||||
export function getTodoHelpContent(locale: string): HelpContent {
|
||||
const isDE = locale === 'de';
|
||||
|
||||
return {
|
||||
faq: [
|
||||
{
|
||||
id: 'faq-quick-add',
|
||||
question: isDE ? 'Wie funktioniert die Schnelleingabe?' : 'How does quick add work?',
|
||||
answer: isDE
|
||||
? '<p>Die Schnelleingabe erkennt automatisch verschiedene Muster:</p><ul><li><strong>Priorität</strong>: <code>!!!</code> (dringend), <code>!!</code> (hoch), <code>!</code> (mittel)</li><li><strong>Projekt</strong>: <code>@Projektname</code></li><li><strong>Labels</strong>: <code>#label1 #label2</code></li><li><strong>Datum</strong>: heute, morgen, nächsten Montag, 15.12.</li><li><strong>Wiederholung</strong>: täglich, wöchentlich, monatlich</li><li><strong>Unteraufgaben</strong>: <code>Titel: Item1, Item2, Item3</code></li></ul><p>Beispiel: <code>Einkaufen: Milch, Brot morgen !! @Privat #wichtig</code></p>'
|
||||
: '<p>Quick add automatically recognizes various patterns:</p><ul><li><strong>Priority</strong>: <code>!!!</code> (urgent), <code>!!</code> (high), <code>!</code> (medium)</li><li><strong>Project</strong>: <code>@ProjectName</code></li><li><strong>Labels</strong>: <code>#label1 #label2</code></li><li><strong>Date</strong>: today, tomorrow, next Monday</li><li><strong>Recurrence</strong>: daily, weekly, monthly</li><li><strong>Subtasks</strong>: <code>Title: Item1, Item2, Item3</code></li></ul><p>Example: <code>Shopping: Milk, Bread tomorrow !! @Personal #important</code></p>',
|
||||
category: 'features',
|
||||
order: 1,
|
||||
language: isDE ? 'de' : 'en',
|
||||
featured: true,
|
||||
tags: isDE ? ['schnelleingabe', 'erstellen', 'syntax'] : ['quick-add', 'create', 'syntax'],
|
||||
},
|
||||
{
|
||||
id: 'faq-projects',
|
||||
question: isDE
|
||||
? 'Wie organisiere ich Aufgaben in Projekten?'
|
||||
: 'How do I organize tasks in projects?',
|
||||
answer: isDE
|
||||
? '<p>Projekte helfen dir, Aufgaben thematisch zu gruppieren:</p><ul><li>Erstelle Projekte über das <strong>+</strong> Symbol in der Seitenleiste</li><li>Weise jeder Aufgabe ein Projekt zu (oder lasse sie im Posteingang)</li><li>Jedes Projekt hat eine eigene Farbe zur visuellen Unterscheidung</li><li>Ziehe Aufgaben per Drag & Drop zwischen Projekten</li></ul>'
|
||||
: '<p>Projects help you group tasks by topic:</p><ul><li>Create projects via the <strong>+</strong> icon in the sidebar</li><li>Assign tasks to a project (or leave them in the inbox)</li><li>Each project has its own color for visual distinction</li><li>Drag and drop tasks between projects</li></ul>',
|
||||
category: 'features',
|
||||
order: 2,
|
||||
language: isDE ? 'de' : 'en',
|
||||
tags: isDE
|
||||
? ['projekte', 'organisation', 'sortierung']
|
||||
: ['projects', 'organize', 'sorting'],
|
||||
},
|
||||
{
|
||||
id: 'faq-kanban',
|
||||
question: isDE ? 'Was ist die Kanban-Ansicht?' : 'What is the Kanban view?',
|
||||
answer: isDE
|
||||
? '<p>Die Kanban-Ansicht zeigt deine Aufgaben als Karten in Spalten an. Du kannst:</p><ul><li>Aufgaben per Drag & Drop zwischen Spalten verschieben</li><li>Den Fortschritt visuell verfolgen</li><li>Spalten nach Priorität oder Status organisieren</li></ul><p>Wechsle mit <kbd>Ctrl+2</kbd> zur Kanban-Ansicht.</p>'
|
||||
: '<p>The Kanban view shows your tasks as cards in columns. You can:</p><ul><li>Drag and drop tasks between columns</li><li>Track progress visually</li><li>Organize columns by priority or status</li></ul><p>Switch to Kanban view with <kbd>Ctrl+2</kbd>.</p>',
|
||||
category: 'features',
|
||||
order: 3,
|
||||
language: isDE ? 'de' : 'en',
|
||||
tags: isDE ? ['kanban', 'board', 'ansicht'] : ['kanban', 'board', 'view'],
|
||||
},
|
||||
{
|
||||
id: 'faq-recurring',
|
||||
question: isDE
|
||||
? 'Wie erstelle ich wiederkehrende Aufgaben?'
|
||||
: 'How do I create recurring tasks?',
|
||||
answer: isDE
|
||||
? '<p>Du kannst Wiederholungen auf zwei Arten setzen:</p><ul><li><strong>Schnelleingabe</strong>: Tippe "täglich", "wöchentlich", "jeden Montag" oder "monatlich"</li><li><strong>Aufgaben-Detail</strong>: Öffne die Aufgabe und wähle eine Wiederholungsregel</li></ul><p>Wenn du eine wiederkehrende Aufgabe abhakst, wird automatisch die nächste Instanz erstellt.</p>'
|
||||
: '<p>You can set recurrence in two ways:</p><ul><li><strong>Quick add</strong>: Type "daily", "weekly", "every Monday", or "monthly"</li><li><strong>Task detail</strong>: Open the task and select a recurrence rule</li></ul><p>When you complete a recurring task, the next instance is automatically created.</p>',
|
||||
category: 'features',
|
||||
order: 4,
|
||||
language: isDE ? 'de' : 'en',
|
||||
tags: isDE ? ['wiederkehrend', 'wiederholung', 'serie'] : ['recurring', 'repeat', 'series'],
|
||||
},
|
||||
{
|
||||
id: 'faq-privacy',
|
||||
question: isDE ? 'Wie werden meine Daten geschützt?' : 'How is my data protected?',
|
||||
answer: isDE
|
||||
? '<p>Deine Daten sind sicher:</p><ul><li><strong>Verschlüsselung</strong>: Alle Daten werden bei der Übertragung (TLS) verschlüsselt</li><li><strong>DSGVO-konform</strong>: Wir halten uns an die EU-Datenschutzverordnung</li><li><strong>Kein Datenverkauf</strong>: Deine Aufgaben werden nie an Dritte verkauft</li><li><strong>Datenexport</strong>: Du kannst jederzeit alle Daten exportieren</li></ul>'
|
||||
: '<p>Your data is secure:</p><ul><li><strong>Encryption</strong>: All data is encrypted in transit (TLS)</li><li><strong>GDPR Compliant</strong>: We follow EU data protection regulations</li><li><strong>No Data Selling</strong>: Your tasks are never sold to third parties</li><li><strong>Data Export</strong>: You can export all your data anytime</li></ul>',
|
||||
category: 'privacy',
|
||||
order: 5,
|
||||
language: isDE ? 'de' : 'en',
|
||||
featured: true,
|
||||
tags: isDE ? ['datenschutz', 'dsgvo', 'sicherheit'] : ['privacy', 'gdpr', 'security'],
|
||||
},
|
||||
],
|
||||
features: [
|
||||
{
|
||||
id: 'feature-quick-add',
|
||||
title: isDE ? 'Schnelleingabe' : 'Quick Add',
|
||||
description: isDE
|
||||
? 'Erstelle Aufgaben in natürlicher Sprache'
|
||||
: 'Create tasks using natural language',
|
||||
icon: '⚡',
|
||||
category: 'core',
|
||||
highlights: isDE
|
||||
? ['Automatische Erkennung', 'Datum & Priorität', 'Projekte & Labels']
|
||||
: ['Auto-detection', 'Date & priority', 'Projects & labels'],
|
||||
content: '',
|
||||
order: 1,
|
||||
language: isDE ? 'de' : 'en',
|
||||
},
|
||||
{
|
||||
id: 'feature-kanban',
|
||||
title: 'Kanban Board',
|
||||
description: isDE
|
||||
? 'Visualisiere deine Aufgaben als Kanban-Board'
|
||||
: 'Visualize your tasks as a Kanban board',
|
||||
icon: '📋',
|
||||
category: 'core',
|
||||
highlights: isDE
|
||||
? ['Drag & Drop', 'Spalten nach Priorität', 'Visueller Fortschritt']
|
||||
: ['Drag & drop', 'Columns by priority', 'Visual progress'],
|
||||
content: '',
|
||||
order: 2,
|
||||
language: isDE ? 'de' : 'en',
|
||||
},
|
||||
{
|
||||
id: 'feature-projects',
|
||||
title: isDE ? 'Projekte' : 'Projects',
|
||||
description: isDE
|
||||
? 'Organisiere Aufgaben in farbcodierten Projekten'
|
||||
: 'Organize tasks in color-coded projects',
|
||||
icon: '📁',
|
||||
category: 'core',
|
||||
highlights: isDE
|
||||
? ['Farbcodierung', 'Drag & Drop', 'Archivierung']
|
||||
: ['Color coding', 'Drag & drop', 'Archiving'],
|
||||
content: '',
|
||||
order: 3,
|
||||
language: isDE ? 'de' : 'en',
|
||||
},
|
||||
{
|
||||
id: 'feature-recurring',
|
||||
title: isDE ? 'Wiederkehrende Aufgaben' : 'Recurring Tasks',
|
||||
description: isDE
|
||||
? 'Automatische Wiederholung mit flexiblen Regeln'
|
||||
: 'Automatic recurrence with flexible rules',
|
||||
icon: '🔄',
|
||||
category: 'advanced',
|
||||
highlights: isDE
|
||||
? ['Täglich/Wöchentlich/Monatlich', 'Bestimmte Wochentage', 'Auto-Erstellung']
|
||||
: ['Daily/Weekly/Monthly', 'Specific weekdays', 'Auto-creation'],
|
||||
content: '',
|
||||
order: 4,
|
||||
language: isDE ? 'de' : 'en',
|
||||
},
|
||||
],
|
||||
shortcuts: [
|
||||
{
|
||||
id: 'shortcuts-navigation',
|
||||
category: 'navigation',
|
||||
title: 'Navigation',
|
||||
language: isDE ? 'de' : 'en',
|
||||
order: 1,
|
||||
shortcuts: [
|
||||
{
|
||||
shortcut: 'Ctrl + 1',
|
||||
action: isDE ? 'Listen-Ansicht' : 'List view',
|
||||
},
|
||||
{
|
||||
shortcut: 'Ctrl + 2',
|
||||
action: isDE ? 'Kanban-Ansicht' : 'Kanban view',
|
||||
},
|
||||
{
|
||||
shortcut: 'Ctrl + 3',
|
||||
action: isDE ? 'Tags-Ansicht' : 'Tags view',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'shortcuts-general',
|
||||
category: 'general',
|
||||
title: isDE ? 'Allgemein' : 'General',
|
||||
language: isDE ? 'de' : 'en',
|
||||
order: 2,
|
||||
shortcuts: [
|
||||
{
|
||||
shortcut: 'F',
|
||||
action: isDE ? 'Immersive-Modus umschalten' : 'Toggle immersive mode',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
gettingStarted: [],
|
||||
changelog: [],
|
||||
contact: {
|
||||
id: 'contact-support',
|
||||
title: isDE ? 'Support kontaktieren' : 'Contact Support',
|
||||
content: isDE
|
||||
? '<p>Unser Support-Team hilft dir bei allen Fragen rund um Todo.</p>'
|
||||
: '<p>Our support team is here to help you with any task management questions.</p>',
|
||||
language: isDE ? 'de' : 'en',
|
||||
order: 1,
|
||||
supportEmail: 'support@mana.how',
|
||||
documentationUrl: 'https://mana.how/docs',
|
||||
responseTime: isDE ? 'Normalerweise innerhalb von 24 Stunden' : 'Usually within 24 hours',
|
||||
},
|
||||
};
|
||||
}
|
||||
177
apps/todo/apps/web/src/routes/(app)/help/+page.svelte
Normal file
177
apps/todo/apps/web/src/routes/(app)/help/+page.svelte
Normal file
|
|
@ -0,0 +1,177 @@
|
|||
<script lang="ts">
|
||||
import { goto } from '$app/navigation';
|
||||
import { locale } from 'svelte-i18n';
|
||||
import { HelpPage } from '@manacore/shared-help-ui';
|
||||
import type { HelpPageTranslations } from '@manacore/shared-help-ui';
|
||||
import { getTodoHelpContent } from '$lib/content/help/index.js';
|
||||
|
||||
const content = $derived(getTodoHelpContent($locale ?? 'de'));
|
||||
|
||||
const translations: HelpPageTranslations = $derived(
|
||||
$locale === 'de'
|
||||
? {
|
||||
title: 'Hilfe & Support',
|
||||
subtitle: 'Finde Antworten und lerne Todo kennen',
|
||||
searchPlaceholder: 'Hilfe durchsuchen...',
|
||||
sections: {
|
||||
faq: 'FAQ',
|
||||
features: 'Features',
|
||||
shortcuts: 'Tastenkürzel',
|
||||
gettingStarted: 'Erste Schritte',
|
||||
changelog: 'Änderungen',
|
||||
contact: 'Kontakt',
|
||||
},
|
||||
search: {
|
||||
noResults: 'Keine Ergebnisse für "{query}"',
|
||||
resultsCount: '{count} Ergebnisse',
|
||||
searching: 'Suche...',
|
||||
},
|
||||
faq: {
|
||||
noItems: 'Keine häufigen Fragen verfügbar.',
|
||||
allCategories: 'Alle',
|
||||
categories: {
|
||||
general: 'Allgemein',
|
||||
account: 'Konto',
|
||||
billing: 'Abrechnung',
|
||||
features: 'Funktionen',
|
||||
technical: 'Technisch',
|
||||
privacy: 'Datenschutz',
|
||||
},
|
||||
},
|
||||
features: {
|
||||
noItems: 'Keine Features verfügbar.',
|
||||
comingSoon: 'Demnächst',
|
||||
learnMore: 'Mehr erfahren',
|
||||
},
|
||||
shortcuts: {
|
||||
noItems: 'Keine Tastenkürzel verfügbar.',
|
||||
columns: {
|
||||
shortcut: 'Kürzel',
|
||||
action: 'Aktion',
|
||||
description: 'Beschreibung',
|
||||
},
|
||||
},
|
||||
gettingStarted: {
|
||||
noItems: 'Keine Anleitungen verfügbar.',
|
||||
estimatedTime: 'Geschätzte Zeit',
|
||||
difficulty: {
|
||||
beginner: 'Einsteiger',
|
||||
intermediate: 'Fortgeschritten',
|
||||
advanced: 'Experte',
|
||||
},
|
||||
},
|
||||
changelog: {
|
||||
noItems: 'Keine Änderungen verfügbar.',
|
||||
showAll: 'Alle Versionen anzeigen',
|
||||
types: { major: 'Hauptversion', minor: 'Nebenversion', patch: 'Patch', beta: 'Beta' },
|
||||
labels: {
|
||||
features: 'Neue Funktionen',
|
||||
improvements: 'Verbesserungen',
|
||||
bugFixes: 'Fehlerbehebungen',
|
||||
},
|
||||
},
|
||||
contact: {
|
||||
noInfo: 'Keine Kontaktinformationen verfügbar.',
|
||||
email: 'E-Mail senden',
|
||||
responseTime: 'Antwortzeit',
|
||||
},
|
||||
common: {
|
||||
back: 'Zurück',
|
||||
showMore: 'Mehr anzeigen',
|
||||
showLess: 'Weniger anzeigen',
|
||||
},
|
||||
}
|
||||
: {
|
||||
title: 'Help & Support',
|
||||
subtitle: 'Find answers and learn how to use Todo',
|
||||
searchPlaceholder: 'Search help...',
|
||||
sections: {
|
||||
faq: 'FAQ',
|
||||
features: 'Features',
|
||||
shortcuts: 'Shortcuts',
|
||||
gettingStarted: 'Getting Started',
|
||||
changelog: 'Changelog',
|
||||
contact: 'Contact',
|
||||
},
|
||||
search: {
|
||||
noResults: 'No results for "{query}"',
|
||||
resultsCount: '{count} results',
|
||||
searching: 'Searching...',
|
||||
},
|
||||
faq: {
|
||||
noItems: 'No frequently asked questions available.',
|
||||
allCategories: 'All',
|
||||
categories: {
|
||||
general: 'General',
|
||||
account: 'Account',
|
||||
billing: 'Billing',
|
||||
features: 'Features',
|
||||
technical: 'Technical',
|
||||
privacy: 'Privacy',
|
||||
},
|
||||
},
|
||||
features: {
|
||||
noItems: 'No features available.',
|
||||
comingSoon: 'Coming Soon',
|
||||
learnMore: 'Learn More',
|
||||
},
|
||||
shortcuts: {
|
||||
noItems: 'No keyboard shortcuts available.',
|
||||
columns: {
|
||||
shortcut: 'Shortcut',
|
||||
action: 'Action',
|
||||
description: 'Description',
|
||||
},
|
||||
},
|
||||
gettingStarted: {
|
||||
noItems: 'No guides available.',
|
||||
estimatedTime: 'Estimated time',
|
||||
difficulty: {
|
||||
beginner: 'Beginner',
|
||||
intermediate: 'Intermediate',
|
||||
advanced: 'Advanced',
|
||||
},
|
||||
},
|
||||
changelog: {
|
||||
noItems: 'No changelog available.',
|
||||
showAll: 'Show all releases',
|
||||
types: { major: 'Major', minor: 'Minor', patch: 'Patch', beta: 'Beta' },
|
||||
labels: {
|
||||
features: 'New Features',
|
||||
improvements: 'Improvements',
|
||||
bugFixes: 'Bug Fixes',
|
||||
},
|
||||
},
|
||||
contact: {
|
||||
noInfo: 'No contact information available.',
|
||||
email: 'Send email',
|
||||
responseTime: 'Response time',
|
||||
},
|
||||
common: {
|
||||
back: 'Back',
|
||||
showMore: 'Show more',
|
||||
showLess: 'Show less',
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
function handleBack() {
|
||||
goto('/');
|
||||
}
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>{translations.title} | Todo</title>
|
||||
</svelte:head>
|
||||
|
||||
<HelpPage
|
||||
{content}
|
||||
appName="Todo"
|
||||
appId="todo"
|
||||
{translations}
|
||||
showBackButton
|
||||
onBack={handleBack}
|
||||
showGettingStarted={false}
|
||||
showChangelog={false}
|
||||
defaultSection="faq"
|
||||
/>
|
||||
975
pnpm-lock.yaml
generated
975
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue