feat: add YouTube video embed support for TipTap editor (#294)

* feat: add YouTube video embed support for TipTap editor

- Paste YouTube URLs to auto-embed videos with metadata
- Edit video title and URL through dropdown menu
- Convert embed back to plain URL link
- Fetch video titles automatically via YouTube oEmbed API

* fix:
- reverted NewCardForm CSS properties back to max-h-48.
- Added boolean prop to TipTap Edtior for YouTube embed.
- Disabled YouTube embed feature for NewCardForm Editor

* chore: lint

* chore: translations

* chore: update translations

---------

Co-authored-by: Henry <henry_ball@hotmail.co.uk>
This commit is contained in:
Eliott Herbert-Byrnes
2026-01-05 20:15:07 +00:00
committed by GitHub
parent a5432c60b7
commit 89c8961176
29 changed files with 1570 additions and 489 deletions

View File

@@ -31,17 +31,17 @@ msgstr "{0}"
#. placeholder {1}: board?.name ?? t`Board`
#. placeholder {1}: workspace.name ?? t`Workspace`
#: src/views/boards/index.tsx:33
#: src/views/card/index.tsx:272
#: src/views/card/index.tsx:273
msgid "{0} | {1}"
msgstr "{0} | {1}"
#. placeholder {0}: labelPublicIds.length
#: src/views/board/components/NewCardForm.tsx:452
#: src/views/board/components/NewCardForm.tsx:453
msgid "{0} labels"
msgstr "{0} étiquettes"
#. placeholder {0}: isTemplate ? "Template" : "Board"
#: src/views/board/index.tsx:408
#: src/views/board/index.tsx:416
msgid "{0} not found"
msgstr "{0} introuvable"
@@ -83,7 +83,7 @@ msgstr "Compte supprimé"
msgid "Actions"
msgstr "Actions"
#: src/views/card/index.tsx:386
#: src/views/card/index.tsx:387
#: src/views/public/board/CardModal.tsx:158
msgid "Activity"
msgstr "Activité"
@@ -113,11 +113,11 @@ msgstr "Ajouter un élément..."
msgid "Add checklist"
msgstr "Ajouter une checklist"
#: src/components/Editor.tsx:451
#: src/components/Editor.tsx:455
msgid "Add description... (type '/' to open commands or '@' to mention)"
msgstr "Ajouter une description... (tapez '/' pour ouvrir les commandes ou '@' pour mentionner)"
#: src/views/card/components/ChecklistItemRow.tsx:195
#: src/views/card/components/ChecklistItemRow.tsx:200
msgid "Add details..."
msgstr "Ajouter des détails..."
@@ -317,8 +317,8 @@ msgstr "Portail de facturation"
msgid "Blog Post"
msgstr "Article de blog"
#: src/views/board/index.tsx:382
#: src/views/card/index.tsx:272
#: src/views/board/index.tsx:390
#: src/views/card/index.tsx:273
#: src/views/public/board/index.tsx:114
msgid "Board"
msgstr "Tableau"
@@ -386,6 +386,7 @@ msgid "Bug Report"
msgstr "Rapport de bug"
#: src/components/DeleteLabelConfirmation.tsx:49
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:176
#: src/views/board/components/DeleteBoardConfirmation.tsx:44
#: src/views/card/components/Comment.tsx:159
#: src/views/card/components/DeleteCardConfirmation.tsx:86
@@ -400,12 +401,12 @@ msgstr "Rapport de bug"
msgid "Cancel"
msgstr "Annuler"
#: src/views/card/index.tsx:272
#: src/views/card/index.tsx:273
msgid "Card"
msgstr "Carte"
#: src/views/card/index.tsx:306
#: src/views/card/index.tsx:342
#: src/views/card/index.tsx:307
#: src/views/card/index.tsx:343
msgid "Card not found"
msgstr "Carte introuvable"
@@ -555,6 +556,10 @@ msgstr "Continuer avec {0}"
msgid "Control who can view and edit your boards."
msgstr "Contrôlez qui peut voir et modifier vos tableaux."
#: src/components/YouTubeEmbed/YouTubeDropdown.tsx:47
msgid "Convert to link"
msgstr "Convertir en lien"
#: src/views/pricing/components/FeatureComparisonTable.tsx:38
msgid "Core features"
msgstr "Fonctionnalités essentielles"
@@ -565,7 +570,7 @@ msgid "Create {0}"
msgstr "Créer {0}"
#: src/components/LabelForm.tsx:213
#: src/views/board/components/NewCardForm.tsx:516
#: src/views/board/components/NewCardForm.tsx:517
#: src/views/board/components/NewListForm.tsx:141
msgid "Create another"
msgstr "Créer un autre"
@@ -574,7 +579,7 @@ msgstr "Créer un autre"
msgid "Create API key"
msgstr "Créer une clé API"
#: src/views/board/components/NewCardForm.tsx:526
#: src/views/board/components/NewCardForm.tsx:527
msgid "Create card"
msgstr "Créer une carte"
@@ -604,13 +609,13 @@ msgstr "Créer un nouveau {0}"
msgid "Create new key"
msgstr "Créer une nouvelle clé"
#: src/views/board/components/NewCardForm.tsx:414
#: src/views/board/components/NewCardForm.tsx:415
#: src/views/card/components/LabelSelector.tsx:98
msgid "Create new label"
msgstr "Créer une nouvelle étiquette"
#: src/views/board/index.tsx:64
#: src/views/board/index.tsx:499
#: src/views/board/index.tsx:65
#: src/views/board/index.tsx:507
msgid "Create new list"
msgstr "Créer une nouvelle liste"
@@ -679,6 +684,7 @@ msgstr "Désactiver le lien d'invitation"
#: src/components/DeleteLabelConfirmation.tsx:51
#: src/components/LabelForm.tsx:228
#: src/components/YouTubeEmbed/YouTubeDropdown.tsx:52
#: src/views/board/components/DeleteBoardConfirmation.tsx:47
#: src/views/card/components/DeleteCardConfirmation.tsx:92
#: src/views/card/components/DeleteChecklistConfirmation.tsx:67
@@ -803,8 +809,8 @@ msgid "Download failed"
msgstr "Échec du téléchargement"
#: src/views/board/components/Filters.tsx:171
#: src/views/board/components/NewCardForm.tsx:469
#: src/views/card/index.tsx:139
#: src/views/board/components/NewCardForm.tsx:470
#: src/views/card/index.tsx:140
msgid "Due date"
msgstr "Date d'échéance"
@@ -824,6 +830,10 @@ msgstr "Échéance aujourd'hui"
msgid "Due tomorrow"
msgstr "Échéance demain"
#: src/components/YouTubeEmbed/YouTubeDropdown.tsx:42
msgid "Edit"
msgstr "Modifier"
#: src/views/board/components/BoardDropdown.tsx:41
#: src/views/board/components/UpdateBoardSlugForm.tsx:116
msgid "Edit board URL"
@@ -841,6 +851,10 @@ msgstr "Modifier l'étiquette"
msgid "Edit workspace URL"
msgstr "Modifier l'URL de l'espace de travail"
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:108
msgid "Edit YouTube Video"
msgstr "Modifier la vidéo YouTube"
#: src/views/boards/components/TemplateBoards.tsx:32
msgid "Editing"
msgstr "Édition"
@@ -857,6 +871,10 @@ msgstr "E-mail"
msgid "Enhancement"
msgstr "Amélioration"
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:131
msgid "Enter a custom title"
msgstr "Saisir un titre personnalisé"
#: src/views/settings/components/ChangePasswordConfirmation.tsx:122
msgid "Enter your current password"
msgstr "Saisissez votre mot de passe actuel"
@@ -981,6 +999,10 @@ msgstr "Échec de la copie du lien d'invitation"
msgid "Failed to create board"
msgstr "Échec de la création du tableau"
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:82
msgid "Failed to fetch video information"
msgstr "Échec de la récupération des informations de la vidéo"
#. placeholder {0}: provider.at(0)?.toUpperCase() + provider.slice(1)
#: src/components/AuthForm.tsx:291
msgid "Failed to login with {0}. Please try again."
@@ -1047,6 +1069,8 @@ msgid "For long-term sustainability, we recognise all good open source projects
msgstr "Pour une durabilité à long terme, nous reconnaissons que tous les bons projets open source ont besoin d'une source de revenus. La nôtre provient de l'offre cloud payante pour les espaces de travail avec plusieurs utilisateurs et pour les slugs d'espace de travail personnalisés. Il n'y a aucune obligation de l'utiliser, et vous pouvez auto-héberger le logiciel sur votre propre infrastructure gratuitement."
#: src/views/pricing/components/Pricing.tsx:32
#: src/views/pricing/components/Pricing.tsx:32
#: src/views/pricing/components/PricingTiers.tsx:30
#: src/views/pricing/components/PricingTiers.tsx:30
msgid "Free"
msgstr "Gratuit"
@@ -1092,7 +1116,7 @@ msgstr "Commencer"
msgid "Get started by creating a new {0}"
msgstr "Commencez par créer un nouveau {0}"
#: src/views/board/index.tsx:491
#: src/views/board/index.tsx:499
msgid "Get started by creating a new list"
msgstr "Commencez par créer une nouvelle liste"
@@ -1175,6 +1199,10 @@ msgstr "Comment faire pour auto-héberger ?"
msgid "How is the project funded?"
msgstr "Comment le projet est-il financé ?"
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:151
msgid "https://www.youtube.com/watch?v=..."
msgstr "https://www.youtube.com/watch?v=..."
#: src/views/settings/components/DeleteAccountConfirmation.tsx:82
msgid "I acknowledge that all of my account data will be permanently deleted and want to proceed."
msgstr "Je reconnais que toutes les données de mon compte seront définitivement supprimées et je souhaite continuer."
@@ -1327,8 +1355,8 @@ msgid "Keyboard Shortcuts"
msgstr "Raccourcis clavier"
#: src/views/board/components/Filters.tsx:155
#: src/views/board/components/NewCardForm.tsx:418
#: src/views/card/index.tsx:121
#: src/views/board/components/NewCardForm.tsx:419
#: src/views/card/index.tsx:122
msgid "Labels"
msgstr "Étiquettes"
@@ -1382,7 +1410,7 @@ msgstr "Clair"
msgid "Link copied"
msgstr "Lien copié"
#: src/views/card/index.tsx:113
#: src/views/card/index.tsx:114
msgid "List"
msgstr "Liste"
@@ -1445,8 +1473,8 @@ msgstr "Priorité moyenne"
#: src/components/SideNavigation.tsx:121
#: src/views/board/components/Filters.tsx:147
#: src/views/board/components/NewCardForm.tsx:376
#: src/views/card/index.tsx:130
#: src/views/board/components/NewCardForm.tsx:377
#: src/views/card/index.tsx:131
#: src/views/members/index.tsx:178
msgid "Members"
msgstr "Membres"
@@ -1520,7 +1548,7 @@ msgid "New label"
msgstr "Nouvelle étiquette"
#: src/views/board/components/NewListForm.tsx:113
#: src/views/board/index.tsx:462
#: src/views/board/index.tsx:470
msgid "New list"
msgstr "Nouvelle liste"
@@ -1581,7 +1609,7 @@ msgstr "Aucune URL de téléchargement disponible pour cette pièce jointe."
msgid "No keyboard shortcuts registered."
msgstr "Aucun raccourci clavier enregistré."
#: src/views/board/index.tsx:488
#: src/views/board/index.tsx:496
msgid "No lists"
msgstr "Aucune liste"
@@ -1719,6 +1747,11 @@ msgstr "Veuillez saisir un nom valide"
msgid "Please enter a valid password"
msgstr "Veuillez saisir un mot de passe valide"
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:58
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:98
msgid "Please enter a valid YouTube URL"
msgstr "Veuillez saisir une URL YouTube valide"
#: src/views/settings/components/Avatar.tsx:92
msgid "Please select a file to upload."
msgstr "Veuillez sélectionner un fichier à télécharger."
@@ -1732,12 +1765,12 @@ msgstr "Veuillez sélectionner un fichier à télécharger."
#: src/views/board/components/NewTemplateForm.tsx:77
#: src/views/board/components/UpdateBoardSlugForm.tsx:73
#: src/views/board/components/VisibilityButton.tsx:54
#: src/views/board/index.tsx:170
#: src/views/board/index.tsx:226
#: src/views/board/index.tsx:171
#: src/views/board/index.tsx:227
#: src/views/boards/components/ImportBoardsForm.tsx:205
#: src/views/card/components/AttachmentThumbnails.tsx:74
#: src/views/card/components/ChecklistItemRow.tsx:67
#: src/views/card/components/ChecklistItemRow.tsx:95
#: src/views/card/components/ChecklistItemRow.tsx:69
#: src/views/card/components/ChecklistItemRow.tsx:97
#: src/views/card/components/ChecklistNameInput.tsx:47
#: src/views/card/components/Checklists.tsx:81
#: src/views/card/components/Comment.tsx:65
@@ -1751,8 +1784,8 @@ msgstr "Veuillez sélectionner un fichier à télécharger."
#: src/views/card/components/NewChecklistForm.tsx:71
#: src/views/card/components/NewChecklistItemForm.tsx:90
#: src/views/card/components/NewCommentForm.tsx:32
#: src/views/card/index.tsx:187
#: src/views/card/index.tsx:200
#: src/views/card/index.tsx:188
#: src/views/card/index.tsx:201
#: src/views/members/components/DeleteMemberConfirmation.tsx:28
#: src/views/members/components/InviteMemberForm.tsx:104
#: src/views/members/components/InviteMemberForm.tsx:241
@@ -1924,6 +1957,7 @@ msgstr "Rôle"
msgid "Run on your own infrastructure"
msgstr "Exécutez sur votre propre infrastructure"
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:183
#: src/views/card/components/Comment.tsx:166
#: src/views/settings/components/Avatar.tsx:309
msgid "Save"
@@ -2107,8 +2141,8 @@ msgstr "Forfait d'équipe"
msgid "Teams"
msgstr "Équipes"
#: src/views/board/index.tsx:382
#: src/views/board/index.tsx:417
#: src/views/board/index.tsx:390
#: src/views/board/index.tsx:425
msgid "Template"
msgstr "Modèle"
@@ -2214,6 +2248,10 @@ msgstr "Cette URL d'espace de travail est réservée"
msgid "This workspace username has already been taken"
msgstr "Ce nom d'utilisateur d'espace de travail est déjà pris"
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:127
msgid "Title"
msgstr "Titre"
#: src/views/boards/components/TemplateBoards.tsx:17
#: src/views/boards/components/TemplateBoards.tsx:23
msgid "To Do"
@@ -2256,7 +2294,7 @@ msgstr "Impossible d'ajouter l'élément à la liste de contrôle"
msgid "Unable to add comment"
msgstr "Impossible d'ajouter un commentaire"
#: src/views/card/index.tsx:199
#: src/views/card/index.tsx:200
msgid "Unable to add label"
msgstr "Impossible d'ajouter l'étiquette"
@@ -2293,7 +2331,7 @@ msgstr "Impossible de supprimer la carte"
msgid "Unable to delete checklist"
msgstr "Impossible de supprimer la liste de contrôle"
#: src/views/card/components/ChecklistItemRow.tsx:94
#: src/views/card/components/ChecklistItemRow.tsx:96
msgid "Unable to delete checklist item"
msgstr "Impossible de supprimer l'élément de la liste de contrôle"
@@ -2321,8 +2359,8 @@ msgstr "Impossible de mettre à jour l'URL du tableau"
msgid "Unable to update board visibility"
msgstr "Impossible de mettre à jour la visibilité du tableau"
#: src/views/board/index.tsx:225
#: src/views/card/index.tsx:186
#: src/views/board/index.tsx:226
#: src/views/card/index.tsx:187
msgid "Unable to update card"
msgstr "Impossible de mettre à jour la carte"
@@ -2330,7 +2368,7 @@ msgstr "Impossible de mettre à jour la carte"
msgid "Unable to update checklist"
msgstr "Impossible de mettre à jour la liste de contrôle"
#: src/views/card/components/ChecklistItemRow.tsx:66
#: src/views/card/components/ChecklistItemRow.tsx:68
msgid "Unable to update checklist item"
msgstr "Impossible de mettre à jour l'élément de la liste de contrôle"
@@ -2346,7 +2384,7 @@ msgstr "Impossible de mettre à jour la date d'échéance"
msgid "Unable to update labels"
msgstr "Impossible de mettre à jour les étiquettes"
#: src/views/board/index.tsx:169
#: src/views/board/index.tsx:170
#: src/views/card/components/ListSelector.tsx:52
msgid "Unable to update list"
msgstr "Impossible de mettre à jour la liste"
@@ -2557,7 +2595,7 @@ msgid "Why make an open source Trello?"
msgstr "Pourquoi créer un Trello open source ?"
#: src/components/SettingsLayout.tsx:39
#: src/views/board/index.tsx:382
#: src/views/board/index.tsx:390
#: src/views/boards/index.tsx:33
#: src/views/members/index.tsx:173
#: src/views/public/board/index.tsx:114
@@ -2733,3 +2771,7 @@ msgstr "Le nom de votre espace de travail a été mis à jour."
#: src/views/settings/components/UpdateWorkspaceUrlForm.tsx:61
msgid "Your workspace slug has been updated."
msgstr "Le slug de votre espace de travail a été mis à jour."
#: src/components/YouTubeEmbed/EditYouTubeModal.tsx:147
msgid "YouTube URL"
msgstr "URL YouTube"

File diff suppressed because one or more lines are too long