feat: Notion-like rich text editor with TipTap, 4 note types, slash commands & bubble menu
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 1m33s

This commit is contained in:
2026-05-01 01:11:03 +02:00
parent 7053e242d2
commit 1345403a31
31 changed files with 3222 additions and 150 deletions

View File

@@ -201,7 +201,17 @@
"confirmDeleteTitle": "Delete note",
"leftShare": "Share removed",
"dismissed": "Note dismissed from recent",
"generalNotes": "General Notes"
"generalNotes": "General Notes",
"noteType": "نوع الملاحظة",
"typeText": "نص",
"typeMarkdown": "ماركداون",
"typeRichText": "نص منسق",
"typeChecklist": "قائمة مراجعة",
"richTextPlaceholder": "اكتب ملاحظة...",
"switchTypeTitle": "تغيير نوع الملاحظة؟",
"switchTypeWarning": "قد يفقد بعض التنسيق عند التحويل إلى {type}.",
"switchTypeContentPreserved": "سيتم الحفاظ على المحتوى كنص عادي.",
"switchType": "تحويل إلى {type}"
},
"pagination": {
"previous": "←",

View File

@@ -201,7 +201,17 @@
"confirmDeleteTitle": "Delete note",
"leftShare": "Share removed",
"dismissed": "Note dismissed from recent",
"generalNotes": "General Notes"
"generalNotes": "General Notes",
"noteType": "Notiztyp",
"typeText": "Text",
"typeMarkdown": "Markdown",
"typeRichText": "Rich Text",
"typeChecklist": "Checkliste",
"richTextPlaceholder": "Notiz erstellen...",
"switchTypeTitle": "Notiztyp ändern?",
"switchTypeWarning": "Formatierung kann beim Wechsel zu {type} verloren gehen.",
"switchTypeContentPreserved": "Dein Inhalt wird als Klartext erhalten.",
"switchType": "Wechseln zu {type}"
},
"pagination": {
"previous": "←",

View File

@@ -201,7 +201,17 @@
"confirmDeleteTitle": "Delete note",
"leftShare": "Share removed",
"dismissed": "Note dismissed from recent",
"generalNotes": "General Notes"
"generalNotes": "General Notes",
"noteType": "Note type",
"typeText": "Text",
"typeMarkdown": "Markdown",
"typeRichText": "Rich Text",
"typeChecklist": "Checklist",
"richTextPlaceholder": "Take a note...",
"switchTypeTitle": "Switch note type?",
"switchTypeWarning": "Some formatting may be lost when switching to {type}.",
"switchTypeContentPreserved": "Your content will be preserved as plain text.",
"switchType": "Switch to {type}"
},
"pagination": {
"previous": "←",

View File

@@ -201,7 +201,17 @@
"confirmDeleteTitle": "Delete note",
"leftShare": "Share removed",
"dismissed": "Note dismissed from recent",
"generalNotes": "General Notes"
"generalNotes": "General Notes",
"noteType": "Tipo de nota",
"typeText": "Texto",
"typeMarkdown": "Markdown",
"typeRichText": "Texto enriquecido",
"typeChecklist": "Lista de tareas",
"richTextPlaceholder": "Escribe una nota...",
"switchTypeTitle": "¿Cambiar tipo de nota?",
"switchTypeWarning": "Se puede perder formato al cambiar a {type}.",
"switchTypeContentPreserved": "Tu contenido se preservará como texto plano.",
"switchType": "Cambiar a {type}"
},
"pagination": {
"previous": "←",

View File

@@ -201,7 +201,17 @@
"confirmDeleteTitle": "Delete note",
"leftShare": "Share removed",
"dismissed": "Note dismissed from recent",
"generalNotes": "General Notes"
"generalNotes": "General Notes",
"noteType": "نوع یادداشت",
"typeText": "متن",
"typeMarkdown": "مارکداون",
"typeRichText": "متن غنی",
"typeChecklist": "چک‌لیست",
"richTextPlaceholder": "یادداشتی بنویسید...",
"switchTypeTitle": "نوع یادداشت تغییر کند؟",
"switchTypeWarning": "هنگام تغییر به {type} ممکن است برخی قالب‌بندی‌ها از بین بروند.",
"switchTypeContentPreserved": "محتوای شما به عنوان متن ساده حفظ می‌شود.",
"switchType": "تغییر به {type}"
},
"pagination": {
"previous": "←",

View File

@@ -201,7 +201,17 @@
"confirmDeleteTitle": "Supprimer la note",
"leftShare": "Partage retiré",
"dismissed": "Note retirée des récentes",
"generalNotes": "Notes générales"
"generalNotes": "Notes générales",
"noteType": "Type de note",
"typeText": "Texte",
"typeMarkdown": "Markdown",
"typeRichText": "Texte riche",
"typeChecklist": "Liste de tâches",
"richTextPlaceholder": "Prenez une note...",
"switchTypeTitle": "Changer le type de note ?",
"switchTypeWarning": "Certaines mises en forme peuvent être perdues lors du passage en {type}.",
"switchTypeContentPreserved": "Votre contenu sera préservé en texte brut.",
"switchType": "Passer en {type}"
},
"pagination": {
"previous": "←",

View File

@@ -201,7 +201,17 @@
"confirmDeleteTitle": "Delete note",
"leftShare": "Share removed",
"dismissed": "Note dismissed from recent",
"generalNotes": "General Notes"
"generalNotes": "General Notes",
"noteType": "नोट प्रकार",
"typeText": "पाठ",
"typeMarkdown": "मार्कडाउन",
"typeRichText": "रिच टेक्स्ट",
"typeChecklist": "चेकलिस्ट",
"richTextPlaceholder": "एक नोट लिखें...",
"switchTypeTitle": "नोट प्रकार बदलें?",
"switchTypeWarning": "{type} में बदलने पर कुछ फ़ॉर्मेटिंग खो सकती है।",
"switchTypeContentPreserved": "आपकी सामग्री सादे पाठ के रूप में संरक्षित रहेगी।",
"switchType": "{type} में बदलें"
},
"pagination": {
"previous": "←",

View File

@@ -201,7 +201,17 @@
"confirmDeleteTitle": "Delete note",
"leftShare": "Share removed",
"dismissed": "Note dismissed from recent",
"generalNotes": "General Notes"
"generalNotes": "General Notes",
"noteType": "Tipo di nota",
"typeText": "Testo",
"typeMarkdown": "Markdown",
"typeRichText": "Testo formattato",
"typeChecklist": "Lista di controllo",
"richTextPlaceholder": "Prendi una nota...",
"switchTypeTitle": "Cambiare tipo di nota?",
"switchTypeWarning": "Alcune formattazioni potrebbero andare perse con {type}.",
"switchTypeContentPreserved": "Il contenuto sarà preservato come testo semplice.",
"switchType": "Passa a {type}"
},
"pagination": {
"previous": "←",

View File

@@ -201,7 +201,17 @@
"confirmDeleteTitle": "Delete note",
"leftShare": "Share removed",
"dismissed": "Note dismissed from recent",
"generalNotes": "General Notes"
"generalNotes": "General Notes",
"noteType": "ノートタイプ",
"typeText": "テキスト",
"typeMarkdown": "Markdown",
"typeRichText": "リッチテキスト",
"typeChecklist": "チェックリスト",
"richTextPlaceholder": "メモを取る...",
"switchTypeTitle": "ノートタイプを切り替えますか?",
"switchTypeWarning": "{type} に切り替えると書式が失われる場合があります。",
"switchTypeContentPreserved": "内容はプレーンテキストとして保持されます。",
"switchType": "{type} に切り替え"
},
"pagination": {
"previous": "←",

View File

@@ -201,7 +201,17 @@
"confirmDeleteTitle": "Delete note",
"leftShare": "Share removed",
"dismissed": "Note dismissed from recent",
"generalNotes": "General Notes"
"generalNotes": "General Notes",
"noteType": "노트 유형",
"typeText": "텍스트",
"typeMarkdown": "Markdown",
"typeRichText": "리치 텍스트",
"typeChecklist": "체크리스트",
"richTextPlaceholder": "노트를 작성하세요...",
"switchTypeTitle": "노트 유형을 변경하시겠습니까?",
"switchTypeWarning": "{type}(으)로 전환하면 일부 서식이 손실될 수 있습니다.",
"switchTypeContentPreserved": "콘텐츠는 일반 텍스트로 보존됩니다.",
"switchType": "{type}(으)로 전환"
},
"pagination": {
"previous": "←",

View File

@@ -201,7 +201,17 @@
"confirmDeleteTitle": "Delete note",
"leftShare": "Share removed",
"dismissed": "Note dismissed from recent",
"generalNotes": "General Notes"
"generalNotes": "General Notes",
"noteType": "Notitietype",
"typeText": "Tekst",
"typeMarkdown": "Markdown",
"typeRichText": "Rich Text",
"typeChecklist": "Checklist",
"richTextPlaceholder": "Maak een notitie...",
"switchTypeTitle": "Notitietype wijzigen?",
"switchTypeWarning": "Opmaak kan verloren gaan bij wijziging naar {type}.",
"switchTypeContentPreserved": "Je inhoud wordt bewaard als platte tekst.",
"switchType": "Wijzigen naar {type}"
},
"pagination": {
"previous": "←",

View File

@@ -201,7 +201,17 @@
"confirmDeleteTitle": "Delete note",
"leftShare": "Share removed",
"dismissed": "Note dismissed from recent",
"generalNotes": "General Notes"
"generalNotes": "General Notes",
"noteType": "Typ notatki",
"typeText": "Tekst",
"typeMarkdown": "Markdown",
"typeRichText": "Tekst sformatowany",
"typeChecklist": "Lista kontrolna",
"richTextPlaceholder": "Zrób notatkę...",
"switchTypeTitle": "Zmienić typ notatki?",
"switchTypeWarning": "Niektóre formatowanie może zostać utracone przy zmianie na {type}.",
"switchTypeContentPreserved": "Twoja treść zostanie zachowana jako zwykły tekst.",
"switchType": "Zmień na {type}"
},
"pagination": {
"previous": "←",

View File

@@ -201,7 +201,17 @@
"confirmDeleteTitle": "Delete note",
"leftShare": "Share removed",
"dismissed": "Note dismissed from recent",
"generalNotes": "General Notes"
"generalNotes": "General Notes",
"noteType": "Tipo de nota",
"typeText": "Texto",
"typeMarkdown": "Markdown",
"typeRichText": "Texto rico",
"typeChecklist": "Lista de verificação",
"richTextPlaceholder": "Tome uma nota...",
"switchTypeTitle": "Alterar tipo de nota?",
"switchTypeWarning": "Alguma formatação pode ser perdida ao mudar para {type}.",
"switchTypeContentPreserved": "Seu conteúdo será preservado como texto simples.",
"switchType": "Mudar para {type}"
},
"pagination": {
"previous": "←",

View File

@@ -201,7 +201,17 @@
"confirmDeleteTitle": "Delete note",
"leftShare": "Share removed",
"dismissed": "Note dismissed from recent",
"generalNotes": "General Notes"
"generalNotes": "General Notes",
"noteType": "Тип заметки",
"typeText": "Текст",
"typeMarkdown": "Markdown",
"typeRichText": "Форматированный текст",
"typeChecklist": "Чек-лист",
"richTextPlaceholder": "Сделайте заметку...",
"switchTypeTitle": "Сменить тип заметки?",
"switchTypeWarning": "Некоторое форматирование может быть потеряно при смене на {type}.",
"switchTypeContentPreserved": "Ваш контент будет сохранён как простой текст.",
"switchType": "Переключить на {type}"
},
"pagination": {
"previous": "←",

View File

@@ -201,7 +201,17 @@
"confirmDeleteTitle": "Delete note",
"leftShare": "Share removed",
"dismissed": "Note dismissed from recent",
"generalNotes": "General Notes"
"generalNotes": "General Notes",
"noteType": "笔记类型",
"typeText": "文本",
"typeMarkdown": "Markdown",
"typeRichText": "富文本",
"typeChecklist": "待办清单",
"richTextPlaceholder": "记笔记...",
"switchTypeTitle": "切换笔记类型?",
"switchTypeWarning": "切换到 {type} 可能会丢失部分格式。",
"switchTypeContentPreserved": "您的内容将保留为纯文本。",
"switchType": "切换到 {type}"
},
"pagination": {
"previous": "←",