mirror of
https://github.com/docmost/docmost.git
synced 2025-11-19 20:41:08 +10:00
Compare commits
8 Commits
feat/new-i
...
feat/ukrai
| Author | SHA1 | Date | |
|---|---|---|---|
| f9bd5e7b57 | |||
| f39d48d6ee | |||
| f584ea84b0 | |||
| bc0c4d6258 | |||
| d8da307a61 | |||
| 50b3f9ddd9 | |||
| 0029f84d50 | |||
| 6d024fc3de |
@ -15,45 +15,45 @@
|
|||||||
"@docmost/editor-ext": "workspace:*",
|
"@docmost/editor-ext": "workspace:*",
|
||||||
"@emoji-mart/data": "^1.2.1",
|
"@emoji-mart/data": "^1.2.1",
|
||||||
"@emoji-mart/react": "^1.1.1",
|
"@emoji-mart/react": "^1.1.1",
|
||||||
"@excalidraw/excalidraw": "^0.17.6",
|
"@excalidraw/excalidraw": "0.18.0-864353b",
|
||||||
"@mantine/core": "^7.17.0",
|
"@mantine/core": "^7.17.0",
|
||||||
"@mantine/form": "^7.17.0",
|
"@mantine/form": "^7.17.0",
|
||||||
"@mantine/hooks": "^7.17.0",
|
"@mantine/hooks": "^7.17.0",
|
||||||
"@mantine/modals": "^7.17.0",
|
"@mantine/modals": "^7.17.0",
|
||||||
"@mantine/notifications": "^7.17.0",
|
"@mantine/notifications": "^7.17.0",
|
||||||
"@mantine/spotlight": "^7.17.0",
|
"@mantine/spotlight": "^7.17.0",
|
||||||
"@tabler/icons-react": "^3.22.0",
|
"@tabler/icons-react": "^3.34.0",
|
||||||
"@tanstack/react-query": "^5.61.4",
|
"@tanstack/react-query": "^5.80.6",
|
||||||
"@tiptap/extension-character-count": "^2.11.5",
|
"@tiptap/extension-character-count": "^2.14.0",
|
||||||
"axios": "^1.8.4",
|
"axios": "^1.9.0",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"emoji-mart": "^5.6.0",
|
"emoji-mart": "^5.6.0",
|
||||||
"file-saver": "^2.0.5",
|
"file-saver": "^2.0.5",
|
||||||
"highlightjs-sap-abap": "^0.3.0",
|
"highlightjs-sap-abap": "^0.3.0",
|
||||||
"i18next": "^23.14.0",
|
"i18next": "^23.14.0",
|
||||||
"i18next-http-backend": "^2.6.1",
|
"i18next-http-backend": "^2.6.1",
|
||||||
"jotai": "^2.12.1",
|
"jotai": "^2.12.5",
|
||||||
"jotai-optics": "^0.4.0",
|
"jotai-optics": "^0.4.0",
|
||||||
"js-cookie": "^3.0.5",
|
"js-cookie": "^3.0.5",
|
||||||
"jwt-decode": "^4.0.0",
|
"jwt-decode": "^4.0.0",
|
||||||
"katex": "0.16.21",
|
"katex": "0.16.22",
|
||||||
"lowlight": "^3.2.0",
|
"lowlight": "^3.3.0",
|
||||||
"mermaid": "^11.4.1",
|
"mermaid": "^11.6.0",
|
||||||
"mitt": "^3.0.1",
|
"mitt": "^3.0.1",
|
||||||
"react": "^18.3.1",
|
"react": "^18.3.1",
|
||||||
"react-arborist": "3.4.0",
|
"react-arborist": "3.4.0",
|
||||||
"react-clear-modal": "^2.0.11",
|
"react-clear-modal": "^2.0.15",
|
||||||
"react-dom": "^18.3.1",
|
"react-dom": "^18.3.1",
|
||||||
"react-drawio": "^1.0.1",
|
"react-drawio": "^1.0.1",
|
||||||
"react-error-boundary": "^4.1.2",
|
"react-error-boundary": "^4.1.2",
|
||||||
"react-helmet-async": "^2.0.5",
|
"react-helmet-async": "^2.0.5",
|
||||||
"react-i18next": "^15.0.1",
|
"react-i18next": "^15.0.1",
|
||||||
"react-router-dom": "^7.0.1",
|
"react-router-dom": "^7.0.1",
|
||||||
"semver": "^7.7.1",
|
"semver": "^7.7.2",
|
||||||
"socket.io-client": "^4.8.1",
|
"socket.io-client": "^4.8.1",
|
||||||
"tippy.js": "^6.3.7",
|
"tippy.js": "^6.3.7",
|
||||||
"tiptap-extension-global-drag-handle": "^0.1.18",
|
"tiptap-extension-global-drag-handle": "^0.1.18",
|
||||||
"zod": "^3.23.8"
|
"zod": "^3.25.56"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/js": "^9.16.0",
|
"@eslint/js": "^9.16.0",
|
||||||
@ -77,6 +77,6 @@
|
|||||||
"prettier": "^3.4.1",
|
"prettier": "^3.4.1",
|
||||||
"typescript": "^5.7.2",
|
"typescript": "^5.7.2",
|
||||||
"typescript-eslint": "^8.17.0",
|
"typescript-eslint": "^8.17.0",
|
||||||
"vite": "^6.3.2"
|
"vite": "^6.3.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -383,5 +383,8 @@
|
|||||||
"Publicly shared pages from spaces you are a member of will appear here": "Öffentlich geteilte Seiten aus Bereichen, in denen Sie Mitglied sind, erscheinen hier",
|
"Publicly shared pages from spaces you are a member of will appear here": "Öffentlich geteilte Seiten aus Bereichen, in denen Sie Mitglied sind, erscheinen hier",
|
||||||
"Share deleted successfully": "Freigabe erfolgreich gelöscht",
|
"Share deleted successfully": "Freigabe erfolgreich gelöscht",
|
||||||
"Share not found": "Freigabe nicht gefunden",
|
"Share not found": "Freigabe nicht gefunden",
|
||||||
"Failed to share page": "Fehler beim Teilen der Seite"
|
"Failed to share page": "Fehler beim Teilen der Seite",
|
||||||
|
"Copy page": "Seite kopieren",
|
||||||
|
"Copy page to a different space.": "Seite in einen anderen Bereich kopieren.",
|
||||||
|
"Page copied successfully": "Seite erfolgreich kopiert"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -384,7 +384,7 @@
|
|||||||
"Share deleted successfully": "Share deleted successfully",
|
"Share deleted successfully": "Share deleted successfully",
|
||||||
"Share not found": "Share not found",
|
"Share not found": "Share not found",
|
||||||
"Failed to share page": "Failed to share page",
|
"Failed to share page": "Failed to share page",
|
||||||
"Copy page": "Copy page",
|
"Copy page": "Copy page",
|
||||||
"Copy page to a different space.": "Copy page to a different space.",
|
"Copy page to a different space.": "Copy page to a different space.",
|
||||||
"Page copied successfully": "Page copied successfully"
|
"Page copied successfully": "Page copied successfully"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -383,5 +383,8 @@
|
|||||||
"Publicly shared pages from spaces you are a member of will appear here": "Las páginas compartidas públicamente de los espacios a los que pertenece aparecerán aquí",
|
"Publicly shared pages from spaces you are a member of will appear here": "Las páginas compartidas públicamente de los espacios a los que pertenece aparecerán aquí",
|
||||||
"Share deleted successfully": "Compartición eliminada con éxito",
|
"Share deleted successfully": "Compartición eliminada con éxito",
|
||||||
"Share not found": "Compartición no encontrada",
|
"Share not found": "Compartición no encontrada",
|
||||||
"Failed to share page": "Error al compartir la página"
|
"Failed to share page": "Error al compartir la página",
|
||||||
|
"Copy page": "Copy page",
|
||||||
|
"Copy page to a different space.": "Copy page to a different space.",
|
||||||
|
"Page copied successfully": "Page copied successfully"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -383,5 +383,8 @@
|
|||||||
"Publicly shared pages from spaces you are a member of will appear here": "Les pages partagées publiquement des espaces dont vous êtes membre apparaîtront ici",
|
"Publicly shared pages from spaces you are a member of will appear here": "Les pages partagées publiquement des espaces dont vous êtes membre apparaîtront ici",
|
||||||
"Share deleted successfully": "Partage supprimé avec succès",
|
"Share deleted successfully": "Partage supprimé avec succès",
|
||||||
"Share not found": "Partage non trouvé",
|
"Share not found": "Partage non trouvé",
|
||||||
"Failed to share page": "Échec du partage de la page"
|
"Failed to share page": "Échec du partage de la page",
|
||||||
|
"Copy page": "Copier la page",
|
||||||
|
"Copy page to a different space.": "Copier la page dans un autre espace.",
|
||||||
|
"Page copied successfully": "Page copiée avec succès"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -383,5 +383,8 @@
|
|||||||
"Publicly shared pages from spaces you are a member of will appear here": "Le pagine condivise pubblicamente dagli spazi di cui sei membro appariranno qui",
|
"Publicly shared pages from spaces you are a member of will appear here": "Le pagine condivise pubblicamente dagli spazi di cui sei membro appariranno qui",
|
||||||
"Share deleted successfully": "Condivisione eliminata con successo",
|
"Share deleted successfully": "Condivisione eliminata con successo",
|
||||||
"Share not found": "Condivisione non trovata",
|
"Share not found": "Condivisione non trovata",
|
||||||
"Failed to share page": "Condivisione della pagina fallita"
|
"Failed to share page": "Condivisione della pagina fallita",
|
||||||
|
"Copy page": "Copia pagina",
|
||||||
|
"Copy page to a different space.": "Copia pagina in un altro spazio.",
|
||||||
|
"Page copied successfully": "Pagina copiata con successo"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -347,7 +347,7 @@
|
|||||||
"Members added successfully": "メンバーを追加しました",
|
"Members added successfully": "メンバーを追加しました",
|
||||||
"Member removed successfully": "メンバーが削除されました",
|
"Member removed successfully": "メンバーが削除されました",
|
||||||
"Member role updated successfully": "メンバーのロールを更新しました",
|
"Member role updated successfully": "メンバーのロールを更新しました",
|
||||||
"Created by: <b>{{creatorName}}</b>": "作成者: <b>{{creatorName}}</b>",
|
"Created by: <b>{{creatorName}}</b>": "作成者: <b>{{creatorName}}</b>",
|
||||||
"Created at: {{time}}": "が作成しました:{{time}}",
|
"Created at: {{time}}": "が作成しました:{{time}}",
|
||||||
"Edited by {{name}} {{time}}": "最終編集: {{name}} {{time}}",
|
"Edited by {{name}} {{time}}": "最終編集: {{name}} {{time}}",
|
||||||
"Word count: {{wordCount}}": "ワード数: {{wordCount}}",
|
"Word count: {{wordCount}}": "ワード数: {{wordCount}}",
|
||||||
@ -383,5 +383,8 @@
|
|||||||
"Publicly shared pages from spaces you are a member of will appear here": "メンバーであるスペースからの公開ページがここに表示されます",
|
"Publicly shared pages from spaces you are a member of will appear here": "メンバーであるスペースからの公開ページがここに表示されます",
|
||||||
"Share deleted successfully": "共有が正常に削除されました",
|
"Share deleted successfully": "共有が正常に削除されました",
|
||||||
"Share not found": "共有が見つかりません",
|
"Share not found": "共有が見つかりません",
|
||||||
"Failed to share page": "ページの共有に失敗しました"
|
"Failed to share page": "ページの共有に失敗しました",
|
||||||
|
"Copy page": "ページをコピー",
|
||||||
|
"Copy page to a different space.": "ページを別のスペースにコピーします。",
|
||||||
|
"Page copied successfully": "ページのコピーに成功しました"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -58,7 +58,7 @@
|
|||||||
"Enter a strong password": "강력한 비밀번호를 입력하세요",
|
"Enter a strong password": "강력한 비밀번호를 입력하세요",
|
||||||
"Enter valid email addresses separated by comma or space max_50": "유효한 이메일 주소를 쉼표나 공백으로 구분하여 입력하세요 [최대: 50]",
|
"Enter valid email addresses separated by comma or space max_50": "유효한 이메일 주소를 쉼표나 공백으로 구분하여 입력하세요 [최대: 50]",
|
||||||
"enter valid emails addresses": "유효한 이메일 주소를 입력하세요",
|
"enter valid emails addresses": "유효한 이메일 주소를 입력하세요",
|
||||||
"Enter your current password": "현재 비밀번호를 입력하세요",
|
"Enter your current password": "기존 비밀번호를 입력하세요",
|
||||||
"enter your full name": "전체 이름을 입력하세요",
|
"enter your full name": "전체 이름을 입력하세요",
|
||||||
"Enter your new password": "새 비밀번호를 입력하세요",
|
"Enter your new password": "새 비밀번호를 입력하세요",
|
||||||
"Enter your new preferred email": "새로운 이메일을 입력하세요",
|
"Enter your new preferred email": "새로운 이메일을 입력하세요",
|
||||||
@ -170,7 +170,7 @@
|
|||||||
"Successfully restored": "복원 완료",
|
"Successfully restored": "복원 완료",
|
||||||
"System settings": "시스템 설정",
|
"System settings": "시스템 설정",
|
||||||
"Theme": "배경",
|
"Theme": "배경",
|
||||||
"To change your email, you have to enter your password and new email.": "이메일을 변경하려면 현재 비밀번호와 새 이메일을 입력해야 합니다.",
|
"To change your email, you have to enter your password and new email.": "이메일을 변경하려면 기존 비밀번호와 새 이메일을 입력해야 합니다.",
|
||||||
"Toggle full page width": "전체 페이지 너비 전환",
|
"Toggle full page width": "전체 페이지 너비 전환",
|
||||||
"Unable to import pages. Please try again.": "페이지를 가져올 수 없습니다. 다시 시도해주세요.",
|
"Unable to import pages. Please try again.": "페이지를 가져올 수 없습니다. 다시 시도해주세요.",
|
||||||
"untitled": "제목 없음",
|
"untitled": "제목 없음",
|
||||||
@ -383,5 +383,8 @@
|
|||||||
"Publicly shared pages from spaces you are a member of will appear here": "회원인 공간의 공개 공유된 페이지가 여기에 표시됩니다",
|
"Publicly shared pages from spaces you are a member of will appear here": "회원인 공간의 공개 공유된 페이지가 여기에 표시됩니다",
|
||||||
"Share deleted successfully": "공유가 성공적으로 삭제되었습니다",
|
"Share deleted successfully": "공유가 성공적으로 삭제되었습니다",
|
||||||
"Share not found": "공유를 찾을 수 없습니다",
|
"Share not found": "공유를 찾을 수 없습니다",
|
||||||
"Failed to share page": "페이지 공유에 실패했습니다"
|
"Failed to share page": "페이지 공유에 실패했습니다",
|
||||||
|
"Copy page": "Copy page",
|
||||||
|
"Copy page to a different space.": "Copy page to a different space.",
|
||||||
|
"Page copied successfully": "Page copied successfully"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -383,5 +383,8 @@
|
|||||||
"Publicly shared pages from spaces you are a member of will appear here": "Openbaar gedeelde pagina's van ruimtes waarvan u lid bent, verschijnen hier",
|
"Publicly shared pages from spaces you are a member of will appear here": "Openbaar gedeelde pagina's van ruimtes waarvan u lid bent, verschijnen hier",
|
||||||
"Share deleted successfully": "Delen succesvol verwijderd",
|
"Share deleted successfully": "Delen succesvol verwijderd",
|
||||||
"Share not found": "Delen niet gevonden",
|
"Share not found": "Delen niet gevonden",
|
||||||
"Failed to share page": "Pagina delen mislukt"
|
"Failed to share page": "Pagina delen mislukt",
|
||||||
|
"Copy page": "Copy page",
|
||||||
|
"Copy page to a different space.": "Copy page to a different space.",
|
||||||
|
"Page copied successfully": "Page copied successfully"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -383,5 +383,8 @@
|
|||||||
"Publicly shared pages from spaces you are a member of will appear here": "Páginas compartilhadas publicamente de espaços que você é membro aparecerão aqui",
|
"Publicly shared pages from spaces you are a member of will appear here": "Páginas compartilhadas publicamente de espaços que você é membro aparecerão aqui",
|
||||||
"Share deleted successfully": "Compartilhamento excluído com sucesso",
|
"Share deleted successfully": "Compartilhamento excluído com sucesso",
|
||||||
"Share not found": "Compartilhamento não encontrado",
|
"Share not found": "Compartilhamento não encontrado",
|
||||||
"Failed to share page": "Falha ao compartilhar página"
|
"Failed to share page": "Falha ao compartilhar página",
|
||||||
|
"Copy page": "Copy page",
|
||||||
|
"Copy page to a different space.": "Copy page to a different space.",
|
||||||
|
"Page copied successfully": "Page copied successfully"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -383,5 +383,8 @@
|
|||||||
"Publicly shared pages from spaces you are a member of will appear here": "Общие страницы из пространств, участником которых вы являетесь, появятся здесь",
|
"Publicly shared pages from spaces you are a member of will appear here": "Общие страницы из пространств, участником которых вы являетесь, появятся здесь",
|
||||||
"Share deleted successfully": "Общий доступ успешно удален",
|
"Share deleted successfully": "Общий доступ успешно удален",
|
||||||
"Share not found": "Общий доступ не найден",
|
"Share not found": "Общий доступ не найден",
|
||||||
"Failed to share page": "Не удалось поделиться страницей"
|
"Failed to share page": "Не удалось поделиться страницей",
|
||||||
|
"Copy page": "Копировать страницу",
|
||||||
|
"Copy page to a different space.": "Копировать страницу в другое пространство.",
|
||||||
|
"Page copied successfully": "Страница успешно скопирована"
|
||||||
}
|
}
|
||||||
|
|||||||
390
apps/client/public/locales/uk-UA/translation.json
Normal file
390
apps/client/public/locales/uk-UA/translation.json
Normal file
@ -0,0 +1,390 @@
|
|||||||
|
{
|
||||||
|
"Account": "Обліковий запис",
|
||||||
|
"Active": "Активний",
|
||||||
|
"Add": "Додати",
|
||||||
|
"Add group members": "Додати учасників групи",
|
||||||
|
"Add groups": "Додати групи",
|
||||||
|
"Add members": "Додати учасників",
|
||||||
|
"Add to groups": "Додати до груп",
|
||||||
|
"Add space members": "Додати учасників простору",
|
||||||
|
"Admin": "Адміністратор",
|
||||||
|
"Are you sure you want to delete this group? Members will lose access to resources this group has access to.": "Ви впевнені, що хочете видалити цю групу? Учасники втратять доступ до матеріалів, до яких ця група має доступ.",
|
||||||
|
"Are you sure you want to delete this page?": "Ви впевнені, що хочете видалити цю сторінку?",
|
||||||
|
"Are you sure you want to remove this user from the group? The user will lose access to resources this group has access to.": "Ви впевнені, що хочете видалити цього користувача з групи? Користувач втратить доступ до матеріалів, до яких ця група має доступ.",
|
||||||
|
"Are you sure you want to remove this user from the space? The user will lose all access to this space.": "Ви впевнені, що хочете видалити цього користувача з простору? Користувач втратить весь доступ до цього простору.",
|
||||||
|
"Are you sure you want to restore this version? Any changes not versioned will be lost.": "Ви впевнені, що хочете відновити цю версію? Усі не збережені зміни будуть втрачені.",
|
||||||
|
"Can become members of groups and spaces in workspace": "Можуть ставати учасниками груп та просторів у робочій області",
|
||||||
|
"Can create and edit pages in space.": "Може створювати та редагувати сторінки в просторі.",
|
||||||
|
"Can edit": "Може редагувати",
|
||||||
|
"Can manage workspace": "Може керувати робочою областю",
|
||||||
|
"Can manage workspace but cannot delete it": "Може керувати робочою областю, але не може її видалити",
|
||||||
|
"Can view": "Може переглядати",
|
||||||
|
"Can view pages in space but not edit.": "Може переглядати сторінки в просторі, але не може їх редагувати.",
|
||||||
|
"Cancel": "Скасувати",
|
||||||
|
"Change email": "Змінити електронну пошту",
|
||||||
|
"Change password": "Змінити пароль",
|
||||||
|
"Change photo": "Змінити фото",
|
||||||
|
"Choose a role": "Оберіть роль",
|
||||||
|
"Choose your preferred color scheme.": "Оберіть бажану кольорову схему.",
|
||||||
|
"Choose your preferred interface language.": "Оберіть бажану мову інтерфейсу.",
|
||||||
|
"Choose your preferred page width.": "Оберіть бажану ширину сторінки.",
|
||||||
|
"Confirm": "Підтвердити",
|
||||||
|
"Copy link": "Копіювати посилання",
|
||||||
|
"Create": "Створити",
|
||||||
|
"Create group": "Створити групу",
|
||||||
|
"Create page": "Створити сторінку",
|
||||||
|
"Create space": "Створити простір",
|
||||||
|
"Create workspace": "Створити робочу область",
|
||||||
|
"Current password": "Поточний пароль",
|
||||||
|
"Dark": "Темна",
|
||||||
|
"Date": "Дата",
|
||||||
|
"Delete": "Видалити",
|
||||||
|
"Delete group": "Видалити групу",
|
||||||
|
"Are you sure you want to delete this page? This will delete its children and page history. This action is irreversible.": "Ви впевнені, що хочете видалити цю сторінку? Це видалить її дочірні сторінки, а також історію сторінки. Ця дія необоротна.",
|
||||||
|
"Description": "Опис",
|
||||||
|
"Details": "Деталі",
|
||||||
|
"e.g ACME": "наприклад, ACME",
|
||||||
|
"e.g ACME Inc": "наприклад, ACME Inc",
|
||||||
|
"e.g Developers": "наприклад, Розробники",
|
||||||
|
"e.g Group for developers": "наприклад, Група для розробників",
|
||||||
|
"e.g product": "наприклад, продукт",
|
||||||
|
"e.g Product Team": "наприклад, Продуктова команда",
|
||||||
|
"e.g Sales": "наприклад, Продажі",
|
||||||
|
"e.g Space for product team": "наприклад, Простір для продуктової команди",
|
||||||
|
"e.g Space for sales team to collaborate": "наприклад, Простір для спільної роботи команди продажів",
|
||||||
|
"Edit": "Редагувати",
|
||||||
|
"Edit group": "Редагувати групу",
|
||||||
|
"Email": "Електронна пошта",
|
||||||
|
"Enter a strong password": "Введіть надійний пароль",
|
||||||
|
"Enter valid email addresses separated by comma or space max_50": "Введіть дійсні адреси електронної пошти, розділені комою або пробілом [макс: 50]",
|
||||||
|
"enter valid emails addresses": "введіть дійсні адреси електронної пошти",
|
||||||
|
"Enter your current password": "Введіть ваш поточний пароль",
|
||||||
|
"enter your full name": "введіть ваше повне ім'я",
|
||||||
|
"Enter your new password": "Введіть ваш новий пароль",
|
||||||
|
"Enter your new preferred email": "Введіть вашу нову бажану електронну пошту",
|
||||||
|
"Enter your password": "Введіть ваш пароль",
|
||||||
|
"Error fetching page data.": "Помилка при завантаженні даних сторінки.",
|
||||||
|
"Error loading page history.": "Помилка при завантаженні історії сторінки.",
|
||||||
|
"Export": "Експорт",
|
||||||
|
"Failed to create page": "Не вдалося створити сторінку",
|
||||||
|
"Failed to delete page": "Не вдалося видалити сторінку",
|
||||||
|
"Failed to fetch recent pages": "Не вдалося отримати нещодавні сторінки",
|
||||||
|
"Failed to import pages": "Не вдалося імпортувати сторінки",
|
||||||
|
"Failed to load page. An error occurred.": "Не вдалося завантажити сторінку. Сталася помилка.",
|
||||||
|
"Failed to update data": "Не вдалося оновити дані",
|
||||||
|
"Full access": "Повний доступ",
|
||||||
|
"Full page width": "Ширина на всю сторінку",
|
||||||
|
"Full width": "На всю ширину",
|
||||||
|
"General": "Загальні",
|
||||||
|
"Group": "Група",
|
||||||
|
"Group description": "Опис групи",
|
||||||
|
"Group name": "Назва групи",
|
||||||
|
"Groups": "Групи",
|
||||||
|
"Has full access to space settings and pages.": "Має повний доступ до налаштувань простору та сторінок.",
|
||||||
|
"Home": "Головна",
|
||||||
|
"Import pages": "Імпорт сторінок",
|
||||||
|
"Import pages & space settings": "Імпорт сторінок і налаштування простору",
|
||||||
|
"Importing pages": "Імпортування сторінок",
|
||||||
|
"invalid invitation link": "посилання на запрошення недійсне",
|
||||||
|
"Invitation signup": "Реєстрація за запрошенням",
|
||||||
|
"Invite by email": "Запросити електронною поштою",
|
||||||
|
"Invite members": "Запросити учасників",
|
||||||
|
"Invite new members": "Запросити нових учасників",
|
||||||
|
"Invited members who are yet to accept their invitation will appear here.": "Запрошені учасники, які ще не прийняли запрошення, з'являться тут.",
|
||||||
|
"Invited members will be granted access to spaces the groups can access": "Запрошені учасники отримають доступ до просторів, доступ до яких має група",
|
||||||
|
"Join the workspace": "Приєднатися до робочої області",
|
||||||
|
"Language": "Мова",
|
||||||
|
"Light": "Світла",
|
||||||
|
"Link copied": "Посилання скопійовано",
|
||||||
|
"Login": "Увійти",
|
||||||
|
"Logout": "Вийти",
|
||||||
|
"Manage Group": "Керування групою",
|
||||||
|
"Manage members": "Керування учасниками",
|
||||||
|
"member": "учасник",
|
||||||
|
"Member": "Учасник",
|
||||||
|
"members": "учасники",
|
||||||
|
"Members": "Учасники",
|
||||||
|
"My preferences": "Мої налаштування",
|
||||||
|
"My Profile": "Мій профіль",
|
||||||
|
"My profile": "Мій профіль",
|
||||||
|
"Name": "Ім'я",
|
||||||
|
"New email": "Нова електронна адреса",
|
||||||
|
"New page": "Нова сторінка",
|
||||||
|
"New password": "Новий пароль",
|
||||||
|
"No group found": "Групу не знайдено",
|
||||||
|
"No page history saved yet.": "Історія сторінок ще не збережена.",
|
||||||
|
"No pages yet": "Сторінок поки немає",
|
||||||
|
"No results found...": "Результати не знайдено...",
|
||||||
|
"No user found": "Користувача не знайдено",
|
||||||
|
"Overview": "Огляд",
|
||||||
|
"Owner": "Власник",
|
||||||
|
"page": "сторінка",
|
||||||
|
"Page deleted successfully": "Сторінку успішно видалено",
|
||||||
|
"Page history": "Історія сторінки",
|
||||||
|
"Page import is in progress. Please do not close this tab.": "Імпорт сторінки в процесі. Будь ласка, не закривайте цю вкладку.",
|
||||||
|
"Pages": "Сторінки",
|
||||||
|
"pages": "сторінки",
|
||||||
|
"Password": "Пароль",
|
||||||
|
"Password changed successfully": "Пароль успішно змінено",
|
||||||
|
"Pending": "В очікуванні",
|
||||||
|
"Please confirm your action": "Будь ласка, підтвердіть вашу дію",
|
||||||
|
"Preferences": "Налаштування",
|
||||||
|
"Print PDF": "Друк PDF",
|
||||||
|
"Profile": "Профіль",
|
||||||
|
"Recently updated": "Нещодавно оновлено",
|
||||||
|
"Remove": "Видалити",
|
||||||
|
"Remove group member": "Видалити учасника групи",
|
||||||
|
"Remove space member": "Видалити учасника простору",
|
||||||
|
"Restore": "Відновити",
|
||||||
|
"Role": "Роль",
|
||||||
|
"Save": "Зберегти",
|
||||||
|
"Search": "Пошук",
|
||||||
|
"Search for groups": "Пошук груп",
|
||||||
|
"Search for users": "Пошук користувачів",
|
||||||
|
"Search for users and groups": "Пошук користувачів та груп",
|
||||||
|
"Search...": "Пошук...",
|
||||||
|
"Select language": "Оберіть мову",
|
||||||
|
"Select role": "Оберіть роль",
|
||||||
|
"Select role to assign to all invited members": "Оберіть роль для всіх запрошених учасників",
|
||||||
|
"Select theme": "Оберіть тему",
|
||||||
|
"Send invitation": "Надіслати запрошення",
|
||||||
|
"Invitation sent": "Запрошення надіслано",
|
||||||
|
"Settings": "Налаштування",
|
||||||
|
"Setup workspace": "Налаштувати робочу область",
|
||||||
|
"Sign In": "Вхід",
|
||||||
|
"Sign Up": "Реєстрація",
|
||||||
|
"Slug": "Slug",
|
||||||
|
"Space": "Простір",
|
||||||
|
"Space description": "Опис простору",
|
||||||
|
"Space menu": "Меню простору",
|
||||||
|
"Space name": "Назва простору",
|
||||||
|
"Space settings": "Налаштування простору",
|
||||||
|
"Space slug": "Slug простору",
|
||||||
|
"Spaces": "Простори",
|
||||||
|
"Spaces you belong to": "Простори, до яких ви належите",
|
||||||
|
"No space found": "Простори не знайдено",
|
||||||
|
"Search for spaces": "Пошук просторів",
|
||||||
|
"Start typing to search...": "Почніть вводити для пошуку...",
|
||||||
|
"Status": "Статус",
|
||||||
|
"Successfully imported": "Успішно імпортовано",
|
||||||
|
"Successfully restored": "Успішно відновлено",
|
||||||
|
"System settings": "Системні налаштування",
|
||||||
|
"Theme": "Тема",
|
||||||
|
"To change your email, you have to enter your password and new email.": "Щоб змінити електронну пошту, вам потрібно ввести пароль і нову адресу.",
|
||||||
|
"Toggle full page width": "Перемкнути ширину на всю сторінку",
|
||||||
|
"Unable to import pages. Please try again.": "Не вдалося імпортувати сторінки. Будь ласка, спробуйте ще раз.",
|
||||||
|
"untitled": "без назви",
|
||||||
|
"Untitled": "Без назви",
|
||||||
|
"Updated successfully": "Оновлено успішно",
|
||||||
|
"User": "Користувач",
|
||||||
|
"Workspace": "Робоча область",
|
||||||
|
"Workspace Name": "Ім'я робочої області",
|
||||||
|
"Workspace settings": "Налаштування робочої області",
|
||||||
|
"You can change your password here.": "Ви можете змінити свій пароль тут.",
|
||||||
|
"Your Email": "Ваша електронна пошта",
|
||||||
|
"Your import is complete.": "Ваш імпорт завершено.",
|
||||||
|
"Your name": "Ваше ім'я",
|
||||||
|
"Your Name": "Ваше ім'я",
|
||||||
|
"Your password": "Ваш пароль",
|
||||||
|
"Your password must be a minimum of 8 characters.": "Ваш пароль повинен містити мінімум 8 символів.",
|
||||||
|
"Sidebar toggle": "Перемкнути бічну панель",
|
||||||
|
"Comments": "Коментарі",
|
||||||
|
"404 page not found": "404 сторінку не знайдено",
|
||||||
|
"Sorry, we can't find the page you are looking for.": "На жаль, ми не можемо знайти сторінку, яку ви шукаєте.",
|
||||||
|
"Take me back to homepage": "Повернутися на головну сторінку",
|
||||||
|
"Forgot password": "Забули пароль",
|
||||||
|
"Forgot your password?": "Забули пароль?",
|
||||||
|
"A password reset link has been sent to your email. Please check your inbox.": "Посилання для скидання пароля було надіслано на вашу електронну адресу. Будь ласка, перевірте вхідні повідомлення.",
|
||||||
|
"Send reset link": "Надіслати посилання для скидання",
|
||||||
|
"Password reset": "Скидання пароля",
|
||||||
|
"Your new password": "Ваш новий пароль",
|
||||||
|
"Set password": "Встановити пароль",
|
||||||
|
"Write a comment": "Написати коментар",
|
||||||
|
"Reply...": "Відповісти...",
|
||||||
|
"Error loading comments.": "Помилка при завантаженні коментарів.",
|
||||||
|
"No comments yet.": "Коментарів поки немає.",
|
||||||
|
"Edit comment": "Редагувати коментар",
|
||||||
|
"Delete comment": "Видалити коментар",
|
||||||
|
"Are you sure you want to delete this comment?": "Ви впевнені, що хочете видалити цей коментар?",
|
||||||
|
"Comment created successfully": "Коментар успішно створено",
|
||||||
|
"Error creating comment": "Помилка при створенні коментаря",
|
||||||
|
"Comment updated successfully": "Коментар успішно оновлено",
|
||||||
|
"Failed to update comment": "Не вдалося оновити коментар",
|
||||||
|
"Comment deleted successfully": "Коментар успішно видалено",
|
||||||
|
"Failed to delete comment": "Не вдалося видалити коментар",
|
||||||
|
"Comment resolved successfully": "Коментар успішно вирішено",
|
||||||
|
"Failed to resolve comment": "Не вдалося вирішити коментар",
|
||||||
|
"Revoke invitation": "Відкликати запрошення",
|
||||||
|
"Revoke": "Відкликати",
|
||||||
|
"Don't": "Ні",
|
||||||
|
"Are you sure you want to revoke this invitation? The user will not be able to join the workspace.": "Ви впевнені, що хочете відкликати це запрошення? Користувач не зможе приєднатися до робочої області.",
|
||||||
|
"Resend invitation": "Надіслати запрошення повторно",
|
||||||
|
"Anyone with this link can join this workspace.": "Будь-хто, хто має це посилання, може приєднатися до цієї робочої області.",
|
||||||
|
"Invite link": "Посилання для запрошення",
|
||||||
|
"Copy": "Копіювати",
|
||||||
|
"Copied": "Скопійовано",
|
||||||
|
"Select a user": "Оберіть користувача",
|
||||||
|
"Select a group": "Оберіть групу",
|
||||||
|
"Export all pages and attachments in this space.": "Експортувати всі сторінки та вкладення в цьому просторі.",
|
||||||
|
"Delete space": "Видалити простір",
|
||||||
|
"Are you sure you want to delete this space?": "Ви впевнені, що хочете видалити цей простір?",
|
||||||
|
"Delete this space with all its pages and data.": "Видалити цей простір з усіма його сторінками та даними.",
|
||||||
|
"All pages, comments, attachments and permissions in this space will be deleted irreversibly.": "Усі сторінки, коментарі, вкладення та дозволи в цьому просторі будуть видалені безповоротно.",
|
||||||
|
"Confirm space name": "Підтвердіть назву простору",
|
||||||
|
"Type the space name <b>{{spaceName}}</b> to confirm your action.": "Введіть назву простору <b>{{spaceName}}</b>, щоб підтвердити вашу дію.",
|
||||||
|
"Format": "Формат",
|
||||||
|
"Include subpages": "Включити вкладені сторінки",
|
||||||
|
"Include attachments": "Включити вкладення",
|
||||||
|
"Select export format": "Виберіть формат експорту",
|
||||||
|
"Export failed:": "Експортування не вдалося:",
|
||||||
|
"export error": "помилка експорту",
|
||||||
|
"Export page": "Експорт сторінки",
|
||||||
|
"Export space": "Експорт простору",
|
||||||
|
"Export {{type}}": "Експорт {{type}}",
|
||||||
|
"File exceeds the {{limit}} attachment limit": "Файл перевищує ліміт вкладень {{limit}}",
|
||||||
|
"Align left": "По лівому краю",
|
||||||
|
"Align right": "По правому краю",
|
||||||
|
"Align center": "По центру",
|
||||||
|
"Justify": "По ширині",
|
||||||
|
"Merge cells": "Об'єднати комірки",
|
||||||
|
"Split cell": "Розділити комірку",
|
||||||
|
"Delete column": "Видалити стовпець",
|
||||||
|
"Delete row": "Видалити рядок",
|
||||||
|
"Add left column": "Додати стовпець ліворуч",
|
||||||
|
"Add right column": "Додати стовпець праворуч",
|
||||||
|
"Add row above": "Додати рядок вище",
|
||||||
|
"Add row below": "Додати рядок нижче",
|
||||||
|
"Delete table": "Видалити таблицю",
|
||||||
|
"Info": "Інформація",
|
||||||
|
"Success": "Успішно",
|
||||||
|
"Warning": "Попередження",
|
||||||
|
"Danger": "Важливо",
|
||||||
|
"Mermaid diagram error:": "Помилка діаграми Mermaid:",
|
||||||
|
"Invalid Mermaid diagram": "Неприпустима діаграма Mermaid",
|
||||||
|
"Double-click to edit Draw.io diagram": "Клацніть двічі для редагування діаграми Draw.io",
|
||||||
|
"Exit": "Вийти",
|
||||||
|
"Save & Exit": "Зберегти та вийти",
|
||||||
|
"Double-click to edit Excalidraw diagram": "Клацніть двічі для редагування діаграми Excalidraw",
|
||||||
|
"Paste link": "Вставити посилання",
|
||||||
|
"Edit link": "Редагувати посилання",
|
||||||
|
"Remove link": "Видалити посилання",
|
||||||
|
"Add link": "Додати посилання",
|
||||||
|
"Please enter a valid url": "Будь ласка, введіть коректний url",
|
||||||
|
"Empty equation": "Порожнє рівняння",
|
||||||
|
"Invalid equation": "Неприпустиме рівняння",
|
||||||
|
"Color": "Колір",
|
||||||
|
"Text color": "Колір тексту",
|
||||||
|
"Default": "За замовчуванням",
|
||||||
|
"Blue": "Синій",
|
||||||
|
"Green": "Зелений",
|
||||||
|
"Purple": "Фіолетовий",
|
||||||
|
"Red": "Червоний",
|
||||||
|
"Yellow": "Жовтий",
|
||||||
|
"Orange": "Помаранчевий",
|
||||||
|
"Pink": "Рожевий",
|
||||||
|
"Gray": "Сірий",
|
||||||
|
"Embed link": "Вбудоване посилання",
|
||||||
|
"Invalid {{provider}} embed link": "Невірне посилання для вбудовування {{provider}}",
|
||||||
|
"Embed {{provider}}": "Вбудувати {{provider}}",
|
||||||
|
"Enter {{provider}} link to embed": "Введіть посилання для вбудовування {{provider}}",
|
||||||
|
"Bold": "Жирний",
|
||||||
|
"Italic": "Курсив",
|
||||||
|
"Underline": "Підкреслений",
|
||||||
|
"Strike": "Закреслений",
|
||||||
|
"Code": "Код",
|
||||||
|
"Comment": "Коментар",
|
||||||
|
"Text": "Текст",
|
||||||
|
"Heading 1": "Заголовок 1",
|
||||||
|
"Heading 2": "Заголовок 2",
|
||||||
|
"Heading 3": "Заголовок 3",
|
||||||
|
"To-do List": "Список справ",
|
||||||
|
"Bullet List": "Маркований список",
|
||||||
|
"Numbered List": "Нумерований список",
|
||||||
|
"Blockquote": "Блок цитування",
|
||||||
|
"Just start typing with plain text.": "Просто почніть друкувати звичайний текст.",
|
||||||
|
"Track tasks with a to-do list.": "Відстежуйте завдання за допомогою списку справ.",
|
||||||
|
"Big section heading.": "Великий заголовок розділу.",
|
||||||
|
"Medium section heading.": "Середній заголовок розділу.",
|
||||||
|
"Small section heading.": "Малий заголовок розділу.",
|
||||||
|
"Create a simple bullet list.": "Створити простий маркований список.",
|
||||||
|
"Create a list with numbering.": "Створити нумерований список.",
|
||||||
|
"Create block quote.": "Створити блок цитування.",
|
||||||
|
"Insert code snippet.": "Вставити фрагмент коду.",
|
||||||
|
"Insert horizontal rule divider": "Вставити горизонтальний роздільник",
|
||||||
|
"Upload any image from your device.": "Завантажити будь-яке зображення з вашого пристрою.",
|
||||||
|
"Upload any video from your device.": "Завантажити будь-яке відео з вашого пристрою.",
|
||||||
|
"Upload any file from your device.": "Завантажити будь-який файл з вашого пристрою.",
|
||||||
|
"Table": "Таблиця",
|
||||||
|
"Insert a table.": "Вставити таблицю.",
|
||||||
|
"Insert collapsible block.": "Вставити блок, що згортається.",
|
||||||
|
"Video": "Відео",
|
||||||
|
"Divider": "Роздільник",
|
||||||
|
"Quote": "Цитата",
|
||||||
|
"Image": "Зображення",
|
||||||
|
"File attachment": "Прикріплений файл",
|
||||||
|
"Toggle block": "Блок, що згортається",
|
||||||
|
"Callout": "Виноска",
|
||||||
|
"Insert callout notice.": "Вставити виноску з повідомленням.",
|
||||||
|
"Math inline": "Формула",
|
||||||
|
"Insert inline math equation.": "Вставити математичне рівняння в рядок.",
|
||||||
|
"Math block": "Блок формул",
|
||||||
|
"Insert math equation": "Вставити математичне рівняння",
|
||||||
|
"Mermaid diagram": "Діаграма Mermaid",
|
||||||
|
"Insert mermaid diagram": "Вставити діаграму Mermaid",
|
||||||
|
"Insert and design Drawio diagrams": "Вставити та розробити діаграми Draw.io",
|
||||||
|
"Insert current date": "Вставити поточну дату",
|
||||||
|
"Draw and sketch excalidraw diagrams": "Вставити та малювати діаграми Excalidraw",
|
||||||
|
"Multiple": "Декілька",
|
||||||
|
"Heading {{level}}": "Заголовок {{level}}",
|
||||||
|
"Toggle title": "Перемкнути заголовок",
|
||||||
|
"Write anything. Enter \"/\" for commands": "Почніть писати. Введіть \"/\" для списку команд",
|
||||||
|
"Names do not match": "Назви не співпадають",
|
||||||
|
"Today, {{time}}": "Сьогодні, {{time}}",
|
||||||
|
"Yesterday, {{time}}": "Вчора, {{time}}",
|
||||||
|
"Space created successfully": "Простір успішно створено",
|
||||||
|
"Space updated successfully": "Простір успішно оновлено",
|
||||||
|
"Space deleted successfully": "Простір успішно видалено",
|
||||||
|
"Members added successfully": "Учасників успішно додано",
|
||||||
|
"Member removed successfully": "Учасника успішно видалено",
|
||||||
|
"Member role updated successfully": "Роль учасника успішно оновлено",
|
||||||
|
"Created by: <b>{{creatorName}}</b>": "Автор: <b>{{creatorName}}</b>",
|
||||||
|
"Created at: {{time}}": "Дата створення: {{time}}",
|
||||||
|
"Edited by {{name}} {{time}}": "Змінено {{name}} {{time}}",
|
||||||
|
"Word count: {{wordCount}}": "Кількість слів: {{wordCount}}",
|
||||||
|
"Character count: {{characterCount}}": "Кількість символів: {{characterCount}}",
|
||||||
|
"New update": "Нове оновлення",
|
||||||
|
"{{latestVersion}} is available": "Доступна нова версія {{latestVersion}}",
|
||||||
|
"Delete member": "Видалити учасника",
|
||||||
|
"Member deleted successfully": "Учасника успішно видалено",
|
||||||
|
"Are you sure you want to delete this workspace member? This action is irreversible.": "Ви впевнені, що хочете видалити цього учасника робочої області? Ця дія незворотна.",
|
||||||
|
"Move": "Перемістити",
|
||||||
|
"Move page": "Перемістити сторінку",
|
||||||
|
"Move page to a different space.": "Перемістити сторінку в інший простір.",
|
||||||
|
"Real-time editor connection lost. Retrying...": "З'єднання з редактором у реальному часі втрачено. Повторна спроба...",
|
||||||
|
"Table of contents": "Зміст",
|
||||||
|
"Add headings (H1, H2, H3) to generate a table of contents.": "Додайте заголовки (H1, H2, H3), щоб створити зміст.",
|
||||||
|
"Share": "Поділитися",
|
||||||
|
"Public sharing": "Публічний доступ",
|
||||||
|
"Shared by": "Поділився",
|
||||||
|
"Shared at": "Поділився в",
|
||||||
|
"Inherits public sharing from": "Успадковує публічний доступ від",
|
||||||
|
"Share to web": "Поділитися в інтернеті",
|
||||||
|
"Shared to web": "Розміщено в інтернеті",
|
||||||
|
"Anyone with the link can view this page": "Будь-хто, хто має посилання, може переглянути цю сторінку",
|
||||||
|
"Make this page publicly accessible": "Зробити цю сторінку загальнодоступною",
|
||||||
|
"Include sub-pages": "Включити підсторінки",
|
||||||
|
"Make sub-pages public too": "Зробити підсторінки також загальнодоступними",
|
||||||
|
"Allow search engines to index page": "Дозволити пошуковим системам індексувати сторінку",
|
||||||
|
"Open page": "Відкрити сторінку",
|
||||||
|
"Page": "Сторінка",
|
||||||
|
"Delete public share link": "Видалити посилання на публічний доступ",
|
||||||
|
"Delete share": "Видалити спільний доступ",
|
||||||
|
"Are you sure you want to delete this shared link?": "Ви впевнені, що хочете видалити це посилання спільного доступу?",
|
||||||
|
"Publicly shared pages from spaces you are a member of will appear here": "Публічні сторінки з просторів, учасником яких ви є, з'являться тут",
|
||||||
|
"Share deleted successfully": "Спільний доступ успішно видалено",
|
||||||
|
"Share not found": "Спільний доступ не знайдено",
|
||||||
|
"Failed to share page": "Не вдалося поділитися сторінкою",
|
||||||
|
"Copy page": "Копіювати сторінки",
|
||||||
|
"Copy page to a different space.": "Скопіювати сторінку в інший простір.",
|
||||||
|
"Page copied successfully": "Сторінку успішно скопійовано"
|
||||||
|
}
|
||||||
@ -383,5 +383,8 @@
|
|||||||
"Publicly shared pages from spaces you are a member of will appear here": "您所在空间的公开共享页面会显示在此处",
|
"Publicly shared pages from spaces you are a member of will appear here": "您所在空间的公开共享页面会显示在此处",
|
||||||
"Share deleted successfully": "分享已成功删除",
|
"Share deleted successfully": "分享已成功删除",
|
||||||
"Share not found": "未找到分享",
|
"Share not found": "未找到分享",
|
||||||
"Failed to share page": "页面分享失败"
|
"Failed to share page": "页面分享失败",
|
||||||
|
"Copy page": "复制页面",
|
||||||
|
"Copy page to a different space.": "将页面复制到不同的空间。",
|
||||||
|
"Page copied successfully": "页面复制成功"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -36,5 +36,5 @@ export interface IVerifyUserToken {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface ICollabToken {
|
export interface ICollabToken {
|
||||||
token: string;
|
token?: string;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -116,6 +116,12 @@ export const EditorBubbleMenu: FC<EditorBubbleMenuProps> = (props) => {
|
|||||||
},
|
},
|
||||||
tippyOptions: {
|
tippyOptions: {
|
||||||
moveTransition: "transform 0.15s ease-out",
|
moveTransition: "transform 0.15s ease-out",
|
||||||
|
onCreate: (instance) => {
|
||||||
|
instance.popper.firstChild?.addEventListener("blur", (event) => {
|
||||||
|
event.preventDefault();
|
||||||
|
event.stopImmediatePropagation();
|
||||||
|
});
|
||||||
|
},
|
||||||
onHide: () => {
|
onHide: () => {
|
||||||
setIsNodeSelectorOpen(false);
|
setIsNodeSelectorOpen(false);
|
||||||
setIsTextAlignmentOpen(false);
|
setIsTextAlignmentOpen(false);
|
||||||
@ -177,8 +183,8 @@ export const EditorBubbleMenu: FC<EditorBubbleMenuProps> = (props) => {
|
|||||||
<LinkSelector
|
<LinkSelector
|
||||||
editor={props.editor}
|
editor={props.editor}
|
||||||
isOpen={isLinkSelectorOpen}
|
isOpen={isLinkSelectorOpen}
|
||||||
setIsOpen={() => {
|
setIsOpen={(value) => {
|
||||||
setIsLinkSelectorOpen(!isLinkSelectorOpen);
|
setIsLinkSelectorOpen(value);
|
||||||
setIsNodeSelectorOpen(false);
|
setIsNodeSelectorOpen(false);
|
||||||
setIsTextAlignmentOpen(false);
|
setIsTextAlignmentOpen(false);
|
||||||
setIsColorSelectorOpen(false);
|
setIsColorSelectorOpen(false);
|
||||||
|
|||||||
@ -18,7 +18,10 @@ import { useForm, zodResolver } from "@mantine/form";
|
|||||||
import { notifications } from "@mantine/notifications";
|
import { notifications } from "@mantine/notifications";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import i18n from "i18next";
|
import i18n from "i18next";
|
||||||
import { getEmbedProviderById, getEmbedUrlAndProvider } from '@docmost/editor-ext';
|
import {
|
||||||
|
getEmbedProviderById,
|
||||||
|
getEmbedUrlAndProvider,
|
||||||
|
} from "@docmost/editor-ext";
|
||||||
|
|
||||||
const schema = z.object({
|
const schema = z.object({
|
||||||
url: z
|
url: z
|
||||||
@ -49,6 +52,10 @@ export default function EmbedView(props: NodeViewProps) {
|
|||||||
async function onSubmit(data: { url: string }) {
|
async function onSubmit(data: { url: string }) {
|
||||||
if (provider) {
|
if (provider) {
|
||||||
const embedProvider = getEmbedProviderById(provider);
|
const embedProvider = getEmbedProviderById(provider);
|
||||||
|
if (embedProvider.id === "iframe") {
|
||||||
|
updateAttributes({ src: data.url });
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (embedProvider.regex.test(data.url)) {
|
if (embedProvider.regex.test(data.url)) {
|
||||||
updateAttributes({ src: data.url });
|
updateAttributes({ src: data.url });
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -0,0 +1,42 @@
|
|||||||
|
type LibraryItems = any;
|
||||||
|
|
||||||
|
type LibraryPersistedData = {
|
||||||
|
libraryItems: LibraryItems;
|
||||||
|
};
|
||||||
|
|
||||||
|
export interface LibraryPersistenceAdapter {
|
||||||
|
load(metadata: { source: "load" | "save" }):
|
||||||
|
| Promise<{ libraryItems: LibraryItems } | null>
|
||||||
|
| {
|
||||||
|
libraryItems: LibraryItems;
|
||||||
|
}
|
||||||
|
| null;
|
||||||
|
|
||||||
|
save(libraryData: LibraryPersistedData): Promise<void> | void;
|
||||||
|
}
|
||||||
|
|
||||||
|
const LOCAL_STORAGE_KEY = "excalidrawLibrary";
|
||||||
|
|
||||||
|
export const localStorageLibraryAdapter: LibraryPersistenceAdapter = {
|
||||||
|
async load() {
|
||||||
|
try {
|
||||||
|
const data = localStorage.getItem(LOCAL_STORAGE_KEY);
|
||||||
|
if (data) {
|
||||||
|
return JSON.parse(data);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error("Error downloading Excalidraw library from localStorage", e);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
async save(libraryData) {
|
||||||
|
try {
|
||||||
|
localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(libraryData));
|
||||||
|
} catch (e) {
|
||||||
|
console.error(
|
||||||
|
"Error while saving library from Excalidraw to localStorage",
|
||||||
|
e,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
@ -13,7 +13,8 @@ import { uploadFile } from "@/features/page/services/page-service.ts";
|
|||||||
import { svgStringToFile } from "@/lib";
|
import { svgStringToFile } from "@/lib";
|
||||||
import { useDisclosure } from "@mantine/hooks";
|
import { useDisclosure } from "@mantine/hooks";
|
||||||
import { getFileUrl } from "@/lib/config.ts";
|
import { getFileUrl } from "@/lib/config.ts";
|
||||||
import { ExcalidrawImperativeAPI } from "@excalidraw/excalidraw/types/types";
|
import "@excalidraw/excalidraw/index.css";
|
||||||
|
import type { ExcalidrawImperativeAPI } from "@excalidraw/excalidraw/types";
|
||||||
import { IAttachment } from "@/lib/types";
|
import { IAttachment } from "@/lib/types";
|
||||||
import ReactClearModal from "react-clear-modal";
|
import ReactClearModal from "react-clear-modal";
|
||||||
import clsx from "clsx";
|
import clsx from "clsx";
|
||||||
@ -21,6 +22,8 @@ import { IconEdit } from "@tabler/icons-react";
|
|||||||
import { lazy } from "react";
|
import { lazy } from "react";
|
||||||
import { Suspense } from "react";
|
import { Suspense } from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { useHandleLibrary } from "@excalidraw/excalidraw";
|
||||||
|
import { localStorageLibraryAdapter } from "@/features/editor/components/excalidraw/excalidraw-utils.ts";
|
||||||
|
|
||||||
const Excalidraw = lazy(() =>
|
const Excalidraw = lazy(() =>
|
||||||
import("@excalidraw/excalidraw").then((module) => ({
|
import("@excalidraw/excalidraw").then((module) => ({
|
||||||
@ -35,6 +38,10 @@ export default function ExcalidrawView(props: NodeViewProps) {
|
|||||||
|
|
||||||
const [excalidrawAPI, setExcalidrawAPI] =
|
const [excalidrawAPI, setExcalidrawAPI] =
|
||||||
useState<ExcalidrawImperativeAPI>(null);
|
useState<ExcalidrawImperativeAPI>(null);
|
||||||
|
useHandleLibrary({
|
||||||
|
excalidrawAPI,
|
||||||
|
adapter: localStorageLibraryAdapter,
|
||||||
|
});
|
||||||
const [excalidrawData, setExcalidrawData] = useState<any>(null);
|
const [excalidrawData, setExcalidrawData] = useState<any>(null);
|
||||||
const [opened, { open, close }] = useDisclosure(false);
|
const [opened, { open, close }] = useDisclosure(false);
|
||||||
const computedColorScheme = useComputedColorScheme();
|
const computedColorScheme = useComputedColorScheme();
|
||||||
|
|||||||
@ -17,8 +17,8 @@ import {
|
|||||||
IconTable,
|
IconTable,
|
||||||
IconTypography,
|
IconTypography,
|
||||||
IconMenu4,
|
IconMenu4,
|
||||||
IconCalendar,
|
IconCalendar, IconAppWindow,
|
||||||
} from "@tabler/icons-react";
|
} from '@tabler/icons-react';
|
||||||
import {
|
import {
|
||||||
CommandProps,
|
CommandProps,
|
||||||
SlashMenuGroupedItemsType,
|
SlashMenuGroupedItemsType,
|
||||||
@ -357,6 +357,20 @@ const CommandGroups: SlashMenuGroupedItemsType = {
|
|||||||
.run();
|
.run();
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: "Iframe embed",
|
||||||
|
description: "Embed any Iframe",
|
||||||
|
searchTerms: ["iframe"],
|
||||||
|
icon: IconAppWindow,
|
||||||
|
command: ({ editor, range }: CommandProps) => {
|
||||||
|
editor
|
||||||
|
.chain()
|
||||||
|
.focus()
|
||||||
|
.deleteRange(range)
|
||||||
|
.setEmbed({ provider: "iframe" })
|
||||||
|
.run();
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: "Airtable",
|
title: "Airtable",
|
||||||
description: "Embed Airtable",
|
description: "Embed Airtable",
|
||||||
|
|||||||
@ -17,9 +17,9 @@ import {
|
|||||||
IconColumnRemove,
|
IconColumnRemove,
|
||||||
IconRowInsertBottom,
|
IconRowInsertBottom,
|
||||||
IconRowInsertTop,
|
IconRowInsertTop,
|
||||||
IconRowRemove,
|
IconRowRemove, IconTableColumn, IconTableRow,
|
||||||
IconTrashX,
|
IconTrashX,
|
||||||
} from "@tabler/icons-react";
|
} from '@tabler/icons-react';
|
||||||
import { isCellSelection } from "@docmost/editor-ext";
|
import { isCellSelection } from "@docmost/editor-ext";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
@ -50,6 +50,14 @@ export const TableMenu = React.memo(
|
|||||||
return posToDOMRect(editor.view, selection.from, selection.to);
|
return posToDOMRect(editor.view, selection.from, selection.to);
|
||||||
}, [editor]);
|
}, [editor]);
|
||||||
|
|
||||||
|
const toggleHeaderColumn = useCallback(() => {
|
||||||
|
editor.chain().focus().toggleHeaderColumn().run();
|
||||||
|
}, [editor]);
|
||||||
|
|
||||||
|
const toggleHeaderRow = useCallback(() => {
|
||||||
|
editor.chain().focus().toggleHeaderRow().run();
|
||||||
|
}, [editor]);
|
||||||
|
|
||||||
const addColumnLeft = useCallback(() => {
|
const addColumnLeft = useCallback(() => {
|
||||||
editor.chain().focus().addColumnBefore().run();
|
editor.chain().focus().addColumnBefore().run();
|
||||||
}, [editor]);
|
}, [editor]);
|
||||||
@ -180,6 +188,30 @@ export const TableMenu = React.memo(
|
|||||||
</ActionIcon>
|
</ActionIcon>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
|
|
||||||
|
<Tooltip position="top" label={t("Toggle header row")}
|
||||||
|
>
|
||||||
|
<ActionIcon
|
||||||
|
onClick={toggleHeaderRow}
|
||||||
|
variant="default"
|
||||||
|
size="lg"
|
||||||
|
aria-label={t("Toggle header row")}
|
||||||
|
>
|
||||||
|
<IconTableRow size={18} />
|
||||||
|
</ActionIcon>
|
||||||
|
</Tooltip>
|
||||||
|
|
||||||
|
<Tooltip position="top" label={t("Toggle header column")}
|
||||||
|
>
|
||||||
|
<ActionIcon
|
||||||
|
onClick={toggleHeaderColumn}
|
||||||
|
variant="default"
|
||||||
|
size="lg"
|
||||||
|
aria-label={t("Toggle header column")}
|
||||||
|
>
|
||||||
|
<IconTableColumn size={18} />
|
||||||
|
</ActionIcon>
|
||||||
|
</Tooltip>
|
||||||
|
|
||||||
<Tooltip position="top" label={t("Delete table")}>
|
<Tooltip position="top" label={t("Delete table")}>
|
||||||
<ActionIcon
|
<ActionIcon
|
||||||
onClick={deleteTable}
|
onClick={deleteTable}
|
||||||
|
|||||||
@ -1,9 +1,10 @@
|
|||||||
import api from "@/lib/api-client";
|
import api from "@/lib/api-client";
|
||||||
import { IPageHistory } from "@/features/page-history/types/page.types";
|
import { IPageHistory } from "@/features/page-history/types/page.types";
|
||||||
|
import { IPagination } from "@/lib/types.ts";
|
||||||
|
|
||||||
export async function getPageHistoryList(
|
export async function getPageHistoryList(
|
||||||
pageId: string,
|
pageId: string,
|
||||||
): Promise<IPageHistory[]> {
|
): Promise<IPagination<IPageHistory>> {
|
||||||
const req = await api.post("/pages/history", {
|
const req = await api.post("/pages/history", {
|
||||||
pageId,
|
pageId,
|
||||||
});
|
});
|
||||||
|
|||||||
@ -42,14 +42,15 @@ function LanguageSwitcher() {
|
|||||||
label={t("Select language")}
|
label={t("Select language")}
|
||||||
data={[
|
data={[
|
||||||
{ value: "en-US", label: "English (US)" },
|
{ value: "en-US", label: "English (US)" },
|
||||||
{ value: "de-DE", label: "Deutsch (German)" },
|
|
||||||
{ value: "nl-NL", label: "Dutch (Netherlands)" },
|
|
||||||
{ value: "fr-FR", label: "Français (French)" },
|
|
||||||
{ value: "es-ES", label: "Español (Spanish)" },
|
{ value: "es-ES", label: "Español (Spanish)" },
|
||||||
|
{ value: "de-DE", label: "Deutsch (German)" },
|
||||||
|
{ value: "fr-FR", label: "Français (French)" },
|
||||||
|
{ value: "nl-NL", label: "Dutch (Netherlands)" },
|
||||||
{ value: "pt-BR", label: "Português (Brasil)" },
|
{ value: "pt-BR", label: "Português (Brasil)" },
|
||||||
{ value: "it-IT", label: "Italiano (Italian)" },
|
{ value: "it-IT", label: "Italiano (Italian)" },
|
||||||
{ value: "ja-JP", label: "日本語 (Japanese)" },
|
{ value: "ja-JP", label: "日本語 (Japanese)" },
|
||||||
{ value: "ko-KR", label: "한국어 (Korean)" },
|
{ value: "ko-KR", label: "한국어 (Korean)" },
|
||||||
|
{ value: "uk-UA", label: "Українська (Ukrainian)" },
|
||||||
{ value: "ru-RU", label: "Русский (Russian)" },
|
{ value: "ru-RU", label: "Русский (Russian)" },
|
||||||
{ value: "zh-CN", label: "中文 (简体)" },
|
{ value: "zh-CN", label: "中文 (简体)" },
|
||||||
]}
|
]}
|
||||||
|
|||||||
@ -36,54 +36,54 @@
|
|||||||
"@casl/ability": "^6.7.3",
|
"@casl/ability": "^6.7.3",
|
||||||
"@fastify/cookie": "^11.0.2",
|
"@fastify/cookie": "^11.0.2",
|
||||||
"@fastify/multipart": "^9.0.3",
|
"@fastify/multipart": "^9.0.3",
|
||||||
"@fastify/static": "^8.1.1",
|
"@fastify/static": "^8.2.0",
|
||||||
"@nestjs/bullmq": "^11.0.2",
|
"@nestjs/bullmq": "^11.0.2",
|
||||||
"@nestjs/common": "^11.0.20",
|
"@nestjs/common": "^11.1.3",
|
||||||
"@nestjs/config": "^4.0.2",
|
"@nestjs/config": "^4.0.2",
|
||||||
"@nestjs/core": "^11.0.20",
|
"@nestjs/core": "^11.1.3",
|
||||||
"@nestjs/event-emitter": "^3.0.0",
|
"@nestjs/event-emitter": "^3.0.1",
|
||||||
"@nestjs/jwt": "^11.0.0",
|
"@nestjs/jwt": "^11.0.0",
|
||||||
"@nestjs/mapped-types": "^2.1.0",
|
"@nestjs/mapped-types": "^2.1.0",
|
||||||
"@nestjs/passport": "^11.0.5",
|
"@nestjs/passport": "^11.0.5",
|
||||||
"@nestjs/platform-fastify": "^11.0.20",
|
"@nestjs/platform-fastify": "^11.1.3",
|
||||||
"@nestjs/platform-socket.io": "^11.0.20",
|
"@nestjs/platform-socket.io": "^11.1.3",
|
||||||
"@nestjs/schedule": "^5.0.1",
|
"@nestjs/schedule": "^6.0.0",
|
||||||
"@nestjs/terminus": "^11.0.0",
|
"@nestjs/terminus": "^11.0.0",
|
||||||
"@nestjs/websockets": "^11.0.20",
|
"@nestjs/websockets": "^11.1.3",
|
||||||
"@node-saml/passport-saml": "^5.0.1",
|
"@node-saml/passport-saml": "^5.0.1",
|
||||||
"@react-email/components": "0.0.28",
|
"@react-email/components": "0.0.28",
|
||||||
"@react-email/render": "1.0.2",
|
"@react-email/render": "1.0.2",
|
||||||
"@socket.io/redis-adapter": "^8.3.0",
|
"@socket.io/redis-adapter": "^8.3.0",
|
||||||
"bcrypt": "^5.1.1",
|
"bcrypt": "^5.1.1",
|
||||||
"bullmq": "^5.41.3",
|
"bullmq": "^5.53.2",
|
||||||
"cache-manager": "^6.4.0",
|
"cache-manager": "^6.4.3",
|
||||||
"cheerio": "^1.0.0",
|
"cheerio": "^1.1.0",
|
||||||
"class-transformer": "^0.5.1",
|
"class-transformer": "^0.5.1",
|
||||||
"class-validator": "^0.14.1",
|
"class-validator": "^0.14.1",
|
||||||
"cookie": "^1.0.2",
|
"cookie": "^1.0.2",
|
||||||
"fs-extra": "^11.3.0",
|
"fs-extra": "^11.3.0",
|
||||||
"happy-dom": "^15.11.6",
|
"happy-dom": "^15.11.6",
|
||||||
"jsonwebtoken": "^9.0.2",
|
"jsonwebtoken": "^9.0.2",
|
||||||
"kysely": "^0.27.5",
|
"kysely": "^0.28.2",
|
||||||
"kysely-migration-cli": "^0.4.2",
|
"kysely-migration-cli": "^0.4.2",
|
||||||
"mime-types": "^2.1.35",
|
"mime-types": "^2.1.35",
|
||||||
"nanoid": "3.3.11",
|
"nanoid": "3.3.11",
|
||||||
"nestjs-kysely": "^1.1.0",
|
"nestjs-kysely": "^1.2.0",
|
||||||
"nodemailer": "^6.10.0",
|
"nodemailer": "^7.0.3",
|
||||||
"openid-client": "^5.7.1",
|
"openid-client": "^5.7.1",
|
||||||
"passport-google-oauth20": "^2.0.0",
|
"passport-google-oauth20": "^2.0.0",
|
||||||
"passport-jwt": "^4.0.1",
|
"passport-jwt": "^4.0.1",
|
||||||
"pg": "^8.13.3",
|
"pg": "^8.16.0",
|
||||||
"pg-tsquery": "^8.4.2",
|
"pg-tsquery": "^8.4.2",
|
||||||
"postmark": "^4.0.5",
|
"postmark": "^4.0.5",
|
||||||
"react": "^18.3.1",
|
"react": "^18.3.1",
|
||||||
"reflect-metadata": "^0.2.2",
|
"reflect-metadata": "^0.2.2",
|
||||||
"rxjs": "^7.8.1",
|
"rxjs": "^7.8.2",
|
||||||
"sanitize-filename-ts": "^1.0.2",
|
"sanitize-filename-ts": "^1.0.2",
|
||||||
"socket.io": "^4.8.1",
|
"socket.io": "^4.8.1",
|
||||||
"stripe": "^17.5.0",
|
"stripe": "^17.5.0",
|
||||||
"tmp-promise": "^3.0.3",
|
"tmp-promise": "^3.0.3",
|
||||||
"ws": "^8.18.0",
|
"ws": "^8.18.2",
|
||||||
"yauzl": "^3.2.0"
|
"yauzl": "^3.2.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
74
package.json
74
package.json
@ -26,52 +26,52 @@
|
|||||||
"@joplin/turndown": "^4.0.74",
|
"@joplin/turndown": "^4.0.74",
|
||||||
"@joplin/turndown-plugin-gfm": "^1.0.56",
|
"@joplin/turndown-plugin-gfm": "^1.0.56",
|
||||||
"@sindresorhus/slugify": "1.1.0",
|
"@sindresorhus/slugify": "1.1.0",
|
||||||
"@tiptap/core": "^2.10.3",
|
"@tiptap/core": "^2.14.0",
|
||||||
"@tiptap/extension-code-block": "^2.10.3",
|
"@tiptap/extension-code-block": "^2.14.0",
|
||||||
"@tiptap/extension-code-block-lowlight": "^2.10.3",
|
"@tiptap/extension-code-block-lowlight": "^2.14.0",
|
||||||
"@tiptap/extension-collaboration": "^2.10.3",
|
"@tiptap/extension-collaboration": "^2.14.0",
|
||||||
"@tiptap/extension-collaboration-cursor": "^2.10.3",
|
"@tiptap/extension-collaboration-cursor": "^2.14.0",
|
||||||
"@tiptap/extension-color": "^2.10.3",
|
"@tiptap/extension-color": "^2.14.0",
|
||||||
"@tiptap/extension-document": "^2.10.3",
|
"@tiptap/extension-document": "^2.14.0",
|
||||||
"@tiptap/extension-heading": "^2.10.3",
|
"@tiptap/extension-heading": "^2.14.0",
|
||||||
"@tiptap/extension-highlight": "^2.10.3",
|
"@tiptap/extension-highlight": "^2.14.0",
|
||||||
"@tiptap/extension-history": "^2.10.3",
|
"@tiptap/extension-history": "^2.14.0",
|
||||||
"@tiptap/extension-image": "^2.10.3",
|
"@tiptap/extension-image": "^2.14.0",
|
||||||
"@tiptap/extension-link": "^2.10.3",
|
"@tiptap/extension-link": "^2.14.0",
|
||||||
"@tiptap/extension-list-item": "^2.10.3",
|
"@tiptap/extension-list-item": "^2.14.0",
|
||||||
"@tiptap/extension-list-keymap": "^2.10.3",
|
"@tiptap/extension-list-keymap": "^2.14.0",
|
||||||
"@tiptap/extension-placeholder": "^2.10.3",
|
"@tiptap/extension-placeholder": "^2.14.0",
|
||||||
"@tiptap/extension-subscript": "^2.10.3",
|
"@tiptap/extension-subscript": "^2.14.0",
|
||||||
"@tiptap/extension-superscript": "^2.10.3",
|
"@tiptap/extension-superscript": "^2.14.0",
|
||||||
"@tiptap/extension-table": "^2.10.3",
|
"@tiptap/extension-table": "^2.14.0",
|
||||||
"@tiptap/extension-table-cell": "^2.10.3",
|
"@tiptap/extension-table-cell": "^2.14.0",
|
||||||
"@tiptap/extension-table-header": "^2.10.3",
|
"@tiptap/extension-table-header": "^2.14.0",
|
||||||
"@tiptap/extension-table-row": "^2.10.3",
|
"@tiptap/extension-table-row": "^2.14.0",
|
||||||
"@tiptap/extension-task-item": "^2.10.3",
|
"@tiptap/extension-task-item": "^2.14.0",
|
||||||
"@tiptap/extension-task-list": "^2.10.3",
|
"@tiptap/extension-task-list": "^2.14.0",
|
||||||
"@tiptap/extension-text": "^2.10.3",
|
"@tiptap/extension-text": "^2.14.0",
|
||||||
"@tiptap/extension-text-align": "^2.10.3",
|
"@tiptap/extension-text-align": "^2.14.0",
|
||||||
"@tiptap/extension-text-style": "^2.10.3",
|
"@tiptap/extension-text-style": "^2.14.0",
|
||||||
"@tiptap/extension-typography": "^2.10.3",
|
"@tiptap/extension-typography": "^2.14.0",
|
||||||
"@tiptap/extension-underline": "^2.10.3",
|
"@tiptap/extension-underline": "^2.14.0",
|
||||||
"@tiptap/extension-youtube": "^2.10.3",
|
"@tiptap/extension-youtube": "^2.14.0",
|
||||||
"@tiptap/html": "^2.10.3",
|
"@tiptap/html": "^2.14.0",
|
||||||
"@tiptap/pm": "^2.10.3",
|
"@tiptap/pm": "^2.14.0",
|
||||||
"@tiptap/react": "^2.10.3",
|
"@tiptap/react": "^2.14.0",
|
||||||
"@tiptap/starter-kit": "^2.10.3",
|
"@tiptap/starter-kit": "^2.14.0",
|
||||||
"@tiptap/suggestion": "^2.10.3",
|
"@tiptap/suggestion": "^2.14.0",
|
||||||
"bytes": "^3.1.2",
|
"bytes": "^3.1.2",
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"date-fns": "^4.1.0",
|
"date-fns": "^4.1.0",
|
||||||
"dompurify": "^3.2.4",
|
"dompurify": "^3.2.6",
|
||||||
"fractional-indexing-jittered": "^1.0.0",
|
"fractional-indexing-jittered": "^1.0.0",
|
||||||
"ioredis": "^5.4.1",
|
"ioredis": "^5.4.1",
|
||||||
"jszip": "^3.10.1",
|
"jszip": "^3.10.1",
|
||||||
"linkifyjs": "^4.2.0",
|
"linkifyjs": "^4.2.0",
|
||||||
"marked": "^13.0.3",
|
"marked": "13.0.3",
|
||||||
"uuid": "^11.1.0",
|
"uuid": "^11.1.0",
|
||||||
"y-indexeddb": "^9.0.12",
|
"y-indexeddb": "^9.0.12",
|
||||||
"yjs": "^13.6.20"
|
"yjs": "^13.6.27"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@nx/js": "20.4.5",
|
"@nx/js": "20.4.5",
|
||||||
|
|||||||
@ -104,6 +104,14 @@ export const embedProviders: IEmbedProvider[] = [
|
|||||||
return url;
|
return url;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: "iframe",
|
||||||
|
name: "Iframe",
|
||||||
|
regex: /any-iframe/,
|
||||||
|
getEmbedUrl: (match, url) => {
|
||||||
|
return url;
|
||||||
|
},
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
export function getEmbedProviderById(id: string) {
|
export function getEmbedProviderById(id: string) {
|
||||||
|
|||||||
2661
pnpm-lock.yaml
generated
2661
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user