diff --git a/apps/www/next.config.ts b/apps/www/next.config.ts
index e60574c3cc..6cf599ae17 100644
--- a/apps/www/next.config.ts
+++ b/apps/www/next.config.ts
@@ -73,6 +73,14 @@ const nextConfig = async (phase: string) => {
destination: '/:path*?locale=cn', // Rewrite it to the corresponding path without /cn
source: '/cn/:path*', // Match any path under /cn
},
+ {
+ destination: '/?locale=pt-br',
+ source: '/pt-br',
+ },
+ {
+ destination: '/:path*?locale=pt-br', // Rewrite it to the corresponding path without /pt-br
+ source: '/pt-br/:path*', // Match any path under /pt-br
+ },
];
},
diff --git a/apps/www/src/app/(app)/_components/announcement-button.tsx b/apps/www/src/app/(app)/_components/announcement-button.tsx
index 6c78a86e24..690f4a6011 100644
--- a/apps/www/src/app/(app)/_components/announcement-button.tsx
+++ b/apps/www/src/app/(app)/_components/announcement-button.tsx
@@ -13,6 +13,9 @@ const i18n = {
en: {
description: 'MCP, AI, Upload, and more',
},
+ 'pt-br': {
+ description: 'MCP, IA, Upload, e mais',
+ },
};
export function AnnouncementButton() {
diff --git a/apps/www/src/app/(app)/_components/potion-lazy-block.tsx b/apps/www/src/app/(app)/_components/potion-lazy-block.tsx
index 920498cb3a..b57cb5c780 100644
--- a/apps/www/src/app/(app)/_components/potion-lazy-block.tsx
+++ b/apps/www/src/app/(app)/_components/potion-lazy-block.tsx
@@ -24,6 +24,13 @@ const i18n = {
github: 'GitHub',
potionDescription: 'A Notion-like AI template.',
},
+ 'pt-br': {
+ buildYourRichTextEditor: 'Construa seu editor de texto',
+ description: 'Framework · Plugins · Componentes · Temas',
+ getStarted: 'Começar',
+ github: 'GitHub',
+ potionDescription: 'Um template de IA similar ao Notion.',
+ },
};
export function PotionLazyBlock() {
diff --git a/apps/www/src/app/(app)/editors/editor-description.tsx b/apps/www/src/app/(app)/editors/editor-description.tsx
index 5fb98e6ad0..b95f502fdd 100644
--- a/apps/www/src/app/(app)/editors/editor-description.tsx
+++ b/apps/www/src/app/(app)/editors/editor-description.tsx
@@ -19,6 +19,11 @@ const i18n = {
description: 'Beautifully designed. Copy and paste into your apps.',
title: 'Building Editors for the Web',
},
+ 'pt-br': {
+ browseEditors: 'Navegar por Editores',
+ description: 'Desenhado elegantemente. Copie e cole em suas aplicações.',
+ title: 'Construindo Editores para a Web',
+ },
};
export function EditorDescription() {
diff --git a/apps/www/src/app/(app)/page.tsx b/apps/www/src/app/(app)/page.tsx
index f9dd0c64d6..3cfe251213 100644
--- a/apps/www/src/app/(app)/page.tsx
+++ b/apps/www/src/app/(app)/page.tsx
@@ -34,6 +34,13 @@ const i18n = {
github: 'GitHub',
potionDescription: 'A Notion-like AI template.',
},
+ 'pt-br': {
+ buildYourRichTextEditor: 'Construa seu editor de texto',
+ description: 'Framework · Plugins · Componentes · Temas',
+ getStarted: 'Começar',
+ github: 'GitHub',
+ potionDescription: 'Um template de IA similar ao Notion.',
+ },
};
const title = 'Build your rich-text editor';
diff --git a/apps/www/src/components/languages-dropdown-menu.tsx b/apps/www/src/components/languages-dropdown-menu.tsx
index 4a733334c4..d00ecd884a 100644
--- a/apps/www/src/components/languages-dropdown-menu.tsx
+++ b/apps/www/src/components/languages-dropdown-menu.tsx
@@ -16,23 +16,26 @@ export function LanguagesDropdownMenu() {
const handleClick = (locale?: string) => {
const url = new URL(window.location.href);
+ const supportedLocales = ['cn', 'pt-br'];
- if (locale) {
- if (pathname?.includes(locale)) {
- return;
- }
+ if (!pathname) return;
+
+ const segments = pathname.split('/').filter((p) => !!p);
+ const currentLocale = supportedLocales.includes(segments[0])
+ ? segments[0]
+ : undefined;
+
+ // If the target locale is the same as the current, do nothing
+ if (locale === currentLocale) return;
- url.pathname = `/${locale}${pathname}`;
+ // Remove the current locale from the segments if it exists
+ const newSegments = currentLocale ? segments.slice(1) : segments;
+
+ if (locale) {
+ url.pathname = `/${locale}/${newSegments.join('/')}`;
url.searchParams.set('locale', locale);
} else {
- if (!pathname?.includes('cn')) return;
- if (pathname) {
- const segments = pathname.split('/').filter((p) => !!p);
- const newSegments = segments.filter((segment) => segment !== 'cn');
- url.pathname =
- newSegments.length > 0 ? `/${newSegments.join('/')}` : '/';
- }
-
+ url.pathname = `/${newSegments.join('/')}`;
url.searchParams.delete('locale');
}
@@ -66,6 +69,16 @@ export function LanguagesDropdownMenu() {
中文
+
+
+
);
diff --git a/apps/www/src/components/main-nav.tsx b/apps/www/src/components/main-nav.tsx
index 353df915d2..3091f66d73 100644
--- a/apps/www/src/components/main-nav.tsx
+++ b/apps/www/src/components/main-nav.tsx
@@ -27,6 +27,12 @@ const i18n = {
editors: 'Editors',
templates: 'Templates',
},
+ 'pt-br': {
+ components: 'Componentes',
+ docs: 'Documentação',
+ editors: 'Editores',
+ templates: 'Templates',
+ },
};
export function MainNav({
diff --git a/apps/www/src/components/open-in-plus.tsx b/apps/www/src/components/open-in-plus.tsx
index 8b6ac58b1f..4d94895a1a 100644
--- a/apps/www/src/components/open-in-plus.tsx
+++ b/apps/www/src/components/open-in-plus.tsx
@@ -17,6 +17,11 @@ const i18n = {
getAccess: 'Get all-access',
productionReady: 'Production-ready AI template and reusable components.',
},
+ 'pt-br': {
+ buildYourEditor: 'Construa seu editor',
+ getAccess: 'Obtenha acesso completo',
+ productionReady: 'Template de IA pronto para produção e componentes reutilizáveis.',
+ },
};
export function OpenInPlus({ className }: { className?: string }) {
diff --git a/apps/www/src/components/playground-preview.tsx b/apps/www/src/components/playground-preview.tsx
index 8a8f0625db..2c0bab55f2 100644
--- a/apps/www/src/components/playground-preview.tsx
+++ b/apps/www/src/components/playground-preview.tsx
@@ -25,6 +25,9 @@ const i18n = {
en: {
description: 'An AI editor',
},
+ 'pt-br': {
+ description: 'Um editor de IA',
+ },
};
// TODO: sync
diff --git a/apps/www/src/i18n/getI18nValues.ts b/apps/www/src/i18n/getI18nValues.ts
index 710d66a9ac..609c79f06d 100644
--- a/apps/www/src/i18n/getI18nValues.ts
+++ b/apps/www/src/i18n/getI18nValues.ts
@@ -1,3 +1,4 @@
+// #region en
import { aiValue as aiValueEn } from '@/registry/examples/values/ai-value';
import { alignValue as alignValueEn } from '@/registry/examples/values/align-value';
import { autoformatValue as autoformatValueEn } from '@/registry/examples/values/autoformat-value';
@@ -6,6 +7,46 @@ import { basicMarksValue as basicMarksValueEn } from '@/registry/examples/values
import { basicNodesValue as basicNodesValueEn } from '@/registry/examples/values/basic-nodes-value';
import { blockMenuValue as blockMenuValueEn } from '@/registry/examples/values/block-menu-value';
import { blockSelectionValue as blockSelectionValueEn } from '@/registry/examples/values/block-selection-value';
+import { columnValue as columnValueEn } from '@/registry/examples/values/column-value';
+import { copilotValue as copilotValueEn } from '@/registry/examples/values/copilot-value';
+import { cursorOverlayValue as cursorOverlayValueEn } from '@/registry/examples/values/cursor-overlay-value';
+import { dateValue as dateValueEn } from '@/registry/examples/values/date-value';
+import { deserializeCsvValue as deserializeCsvValueEn } from '@/registry/examples/values/deserialize-csv-value';
+import { deserializeDocxValue as deserializeDocxValueEn } from '@/registry/examples/values/deserialize-docx-value';
+import { deserializeHtmlValue as deserializeHtmlValueEn } from '@/registry/examples/values/deserialize-html-value';
+import { deserializeMdValue as deserializeMdValueEn } from '@/registry/examples/values/deserialize-md-value';
+import { discussionValue as commentValueEn } from '@/registry/examples/values/discussion-value';
+import { dndValue as dndValueEn } from '@/registry/examples/values/dnd-value';
+import { editableVoidsValue as editableVoidsValueEn } from '@/registry/examples/values/editable-voids-value';
+import { emojiValue as emojiValueEn } from '@/registry/examples/values/emoji-value';
+import { equationValue as equationValueEn } from '@/registry/examples/values/equation-value';
+import { excalidrawValue as excalidrawValueEn } from '@/registry/examples/values/excalidraw-value';
+import {
+ exitBreakValue as exitBreakValueEn,
+ trailingBlockValue as trailingBlockValueEn,
+} from '@/registry/examples/values/exit-break-value';
+import { findReplaceValue as findReplaceValueEn } from '@/registry/examples/values/find-replace-value';
+import { floatingToolbarValue as floatingToolbarValueEn } from '@/registry/examples/values/floating-toolbar-value';
+import { fontValue as fontValueEn } from '@/registry/examples/values/font-value';
+import { iframeValue as iframeValueEn } from '@/registry/examples/values/iframe-value';
+import { indentValue as indentValueEn } from '@/registry/examples/values/indent-value';
+import { lineHeightValue as lineHeightValueEn } from '@/registry/examples/values/line-height-value';
+import { linkValue as linkValueEn } from '@/registry/examples/values/link-value';
+import { listValue as listValueEn } from '@/registry/examples/values/list-value';
+import { mediaValue as mediaValueEn } from '@/registry/examples/values/media-value';
+import { mentionValue as mentionValueEn } from '@/registry/examples/values/mention-value';
+import { blockPlaceholderValue as placeholderValueEn } from '@/registry/examples/values/placeholder-value';
+import { playgroundValue as playgroundValueEn } from '@/registry/examples/values/playground-value';
+import { pluginRulesValue as pluginRulesValueEn } from '@/registry/examples/values/plugin-rules-value';
+import { previewMdValue as previewMdValueEn } from '@/registry/examples/values/preview-md-value';
+import { slashCommandValue as slashCommandValueEn } from '@/registry/examples/values/slash-command-value';
+import { tabbableValue as tabbableValueEn } from '@/registry/examples/values/tabbable-value';
+import { tableValue as tableValueEn } from '@/registry/examples/values/table-value';
+import { tocValue as tocValueEn } from '@/registry/examples/values/toc-value';
+import { toggleValue as toggleValueEn } from '@/registry/examples/values/toggle-value';
+// #endregion
+
+// #region cn
import { aiValue as aiValueCn } from '@/registry/examples/values/cn/ai-value';
import { alignValue as alignValueCn } from '@/registry/examples/values/cn/align-value';
import { autoformatValue as autoformatValueCn } from '@/registry/examples/values/cn/autoformat-value';
@@ -51,43 +92,54 @@ import { tabbableValue as tabbableValueCn } from '@/registry/examples/values/cn/
import { tableValue as tableValueCn } from '@/registry/examples/values/cn/table-value';
import { tocValue as tocValueCn } from '@/registry/examples/values/cn/toc-value';
import { toggleValue as toggleValueCn } from '@/registry/examples/values/cn/toggle-value';
-import { columnValue as columnValueEn } from '@/registry/examples/values/column-value';
-import { copilotValue as copilotValueEn } from '@/registry/examples/values/copilot-value';
-import { cursorOverlayValue as cursorOverlayValueEn } from '@/registry/examples/values/cursor-overlay-value';
-import { dateValue as dateValueEn } from '@/registry/examples/values/date-value';
-import { deserializeCsvValue as deserializeCsvValueEn } from '@/registry/examples/values/deserialize-csv-value';
-import { deserializeDocxValue as deserializeDocxValueEn } from '@/registry/examples/values/deserialize-docx-value';
-import { deserializeHtmlValue as deserializeHtmlValueEn } from '@/registry/examples/values/deserialize-html-value';
-import { deserializeMdValue as deserializeMdValueEn } from '@/registry/examples/values/deserialize-md-value';
-import { discussionValue as commentValueEn } from '@/registry/examples/values/discussion-value';
-import { dndValue as dndValueEn } from '@/registry/examples/values/dnd-value';
-import { editableVoidsValue as editableVoidsValueEn } from '@/registry/examples/values/editable-voids-value';
-import { emojiValue as emojiValueEn } from '@/registry/examples/values/emoji-value';
-import { equationValue as equationValueEn } from '@/registry/examples/values/equation-value';
-import { excalidrawValue as excalidrawValueEn } from '@/registry/examples/values/excalidraw-value';
+// #endregion
+
+// #region pt-br
+import { aiValue as aiValuePt } from '@/registry/examples/values/pt-br/ai-value';
+import { alignValue as alignValuePt } from '@/registry/examples/values/pt-br/align-value';
+import { autoformatValue as autoformatValuePt } from '@/registry/examples/values/pt-br/autoformat-value';
+import { basicBlocksValue as basicBlocksValuePt } from '@/registry/examples/values/pt-br/basic-blocks-value';
+import { basicMarksValue as basicMarksValuePt } from '@/registry/examples/values/pt-br/basic-marks-value';
+import { basicNodesValue as basicNodesValuePt } from '@/registry/examples/values/pt-br/basic-nodes-value';
+import { blockMenuValue as blockMenuValuePt } from '@/registry/examples/values/pt-br/block-menu-value';
+import { blockSelectionValue as blockSelectionValuePt } from '@/registry/examples/values/pt-br/block-selection-value';
+import { columnValue as columnValuePt } from '@/registry/examples/values/pt-br/column-value';
+import { copilotValue as copilotValuePt } from '@/registry/examples/values/pt-br/copilot-value';
+import { cursorOverlayValue as cursorOverlayValuePt } from '@/registry/examples/values/pt-br/cursor-overlay-value';
+import { dateValue as dateValuePt } from '@/registry/examples/values/pt-br/date-value';
+import { deserializeCsvValue as deserializeCsvValuePt } from '@/registry/examples/values/pt-br/deserialize-csv-value';
+import { deserializeDocxValue as deserializeDocxValuePt } from '@/registry/examples/values/pt-br/deserialize-docx-value';
+import { deserializeHtmlValue as deserializeHtmlValuePt } from '@/registry/examples/values/pt-br/deserialize-html-value';
+import { deserializeMdValue as deserializeMdValuePt } from '@/registry/examples/values/pt-br/deserialize-md-value';
+import { discussionValue as discussionValuePt } from '@/registry/examples/values/pt-br/discussion-value';
+import { dndValue as dndValuePt } from '@/registry/examples/values/pt-br/dnd-value';
+import { editableVoidsValue as editableVoidsValuePt } from '@/registry/examples/values/pt-br/editable-voids-value';
+import { emojiValue as emojiValuePt } from '@/registry/examples/values/pt-br/emoji-value';
+import { equationValue as equationValuePt } from '@/registry/examples/values/pt-br/equation-value';
+import { excalidrawValue as excalidrawValuePt } from '@/registry/examples/values/pt-br/excalidraw-value';
import {
- exitBreakValue as exitBreakValueEn,
- trailingBlockValue as trailingBlockValueEn,
-} from '@/registry/examples/values/exit-break-value';
-import { findReplaceValue as findReplaceValueEn } from '@/registry/examples/values/find-replace-value';
-import { floatingToolbarValue as floatingToolbarValueEn } from '@/registry/examples/values/floating-toolbar-value';
-import { fontValue as fontValueEn } from '@/registry/examples/values/font-value';
-import { iframeValue as iframeValueEn } from '@/registry/examples/values/iframe-value';
-import { indentValue as indentValueEn } from '@/registry/examples/values/indent-value';
-import { lineHeightValue as lineHeightValueEn } from '@/registry/examples/values/line-height-value';
-import { linkValue as linkValueEn } from '@/registry/examples/values/link-value';
-import { listValue as listValueEn } from '@/registry/examples/values/list-value';
-import { mediaValue as mediaValueEn } from '@/registry/examples/values/media-value';
-import { mentionValue as mentionValueEn } from '@/registry/examples/values/mention-value';
-import { blockPlaceholderValue as placeholderValueEn } from '@/registry/examples/values/placeholder-value';
-import { playgroundValue as playgroundValueEn } from '@/registry/examples/values/playground-value';
-import { pluginRulesValue as pluginRulesValueEn } from '@/registry/examples/values/plugin-rules-value';
-import { previewMdValue as previewMdValueEn } from '@/registry/examples/values/preview-md-value';
-import { slashCommandValue as slashCommandValueEn } from '@/registry/examples/values/slash-command-value';
-import { tabbableValue as tabbableValueEn } from '@/registry/examples/values/tabbable-value';
-import { tableValue as tableValueEn } from '@/registry/examples/values/table-value';
-import { tocValue as tocValueEn } from '@/registry/examples/values/toc-value';
-import { toggleValue as toggleValueEn } from '@/registry/examples/values/toggle-value';
+ exitBreakValue as exitBreakValuePt,
+ trailingBlockValue as trailingBlockValuePt,
+} from '@/registry/examples/values/pt-br/exit-break-value';
+import { findReplaceValue as findReplaceValuePt } from '@/registry/examples/values/pt-br/find-replace-value';
+import { floatingToolbarValue as floatingToolbarValuePt } from '@/registry/examples/values/pt-br/floating-toolbar-value';
+import { fontValue as fontValuePt } from '@/registry/examples/values/pt-br/font-value';
+import { iframeValue as iframeValuePt } from '@/registry/examples/values/pt-br/iframe-value';
+import { indentValue as indentValuePt } from '@/registry/examples/values/pt-br/indent-value';
+import { lineHeightValue as lineHeightValuePt } from '@/registry/examples/values/pt-br/line-height-value';
+import { linkValue as linkValuePt } from '@/registry/examples/values/pt-br/link-value';
+import { listValue as listValuePt } from '@/registry/examples/values/pt-br/list-value';
+import { mediaValue as mediaValuePt } from '@/registry/examples/values/pt-br/media-value';
+import { mentionValue as mentionValuePt } from '@/registry/examples/values/pt-br/mention-value';
+import { blockPlaceholderValue as placeholderValuePt } from '@/registry/examples/values/pt-br/placeholder-value';
+import { playgroundValue as playgroundValuePt } from '@/registry/examples/values/pt-br/playground-value';
+import { previewMdValue as previewMdValuePt } from '@/registry/examples/values/pt-br/preview-md-value';
+import { slashCommandValue as slashCommandValuePt } from '@/registry/examples/values/pt-br/slash-command-value';
+import { tabbableValue as tabbableValuePt } from '@/registry/examples/values/pt-br/tabbable-value';
+import { tableValue as tableValuePt } from '@/registry/examples/values/pt-br/table-value';
+import { tocValue as tocValuePt } from '@/registry/examples/values/pt-br/toc-value';
+import { toggleValue as toggleValuePt } from '@/registry/examples/values/pt-br/toggle-value';
+// #endregion
const i18n = {
cn: {
@@ -180,6 +232,50 @@ const i18n = {
toggle: toggleValueEn,
trailingBlock: trailingBlockValueEn,
},
+ 'pt-br': {
+ ai: aiValuePt,
+ autoformat: autoformatValuePt,
+ basicBlocks: basicBlocksValuePt,
+ basicMarks: basicMarksValuePt,
+ basicNodes: basicNodesValuePt,
+ blockMenu: blockMenuValuePt,
+ blockSelection: blockSelectionValuePt,
+ column: columnValuePt,
+ copilot: copilotValuePt,
+ cursorOverlay: cursorOverlayValuePt,
+ date: dateValuePt,
+ deserializeCsv: deserializeCsvValuePt,
+ deserializeDocx: deserializeDocxValuePt,
+ deserializeHtml: deserializeHtmlValuePt,
+ deserializeMd: deserializeMdValuePt,
+ discussion: discussionValuePt,
+ dnd: dndValuePt,
+ editableVoids: editableVoidsValuePt,
+ emoji: emojiValuePt,
+ equation: equationValuePt,
+ excalidraw: excalidrawValuePt,
+ exitBreak: exitBreakValuePt,
+ findReplace: findReplaceValuePt,
+ floatingToolbar: floatingToolbarValuePt,
+ font: fontValuePt,
+ iframe: iframeValuePt,
+ indent: indentValuePt,
+ lineHeight: lineHeightValuePt,
+ link: linkValuePt,
+ list: listValuePt,
+ media: mediaValuePt,
+ mention: mentionValuePt,
+ placeholder: placeholderValuePt,
+ playground: playgroundValuePt,
+ previewMd: previewMdValuePt,
+ slashCommand: slashCommandValuePt,
+ tabbable: tabbableValuePt,
+ table: tableValuePt,
+ 'text-align': alignValuePt,
+ toc: tocValuePt,
+ toggle: toggleValuePt,
+ trailingBlock: trailingBlockValuePt,
+ },
};
export const getI18nValues = (locale: string) =>
diff --git a/apps/www/src/registry/examples/values/pt-br/ai-value.tsx b/apps/www/src/registry/examples/values/pt-br/ai-value.tsx
new file mode 100644
index 0000000000..521be904e4
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/ai-value.tsx
@@ -0,0 +1,93 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const aiValue: any = (
+
+ Menu de IA
+ Gere e refine conteúdo com IA.
+ Acesse o menu de IA de várias maneiras:
+
+ Pressione "⌘ + J".
+
+
+ Selecione o texto e clique em "Perguntar à IA" na barra de ferramentas flutuante
+
+
+ Clique com o botão direito em um bloco e selecione "Perguntar à IA"
+
+
+ Pressione espaço em um bloco vazio. Experimente:
+
+
+
+
+ Uma vez aberto, você pode:
+
+ Pesquisar comandos no campo de entrada:
+
+
+ Use as setas para navegar, Enter para selecionar
+
+
+ Comandos de geração:
+
+
+ Continuar escrevendo
+
+
+ Adicionar um resumo
+
+
+ Explicar
+
+
+ Sugestões de geração:
+
+
+ Aceitar
+
+
+ Descartar
+
+
+ Tentar novamente
+
+
+ Comandos de edição:
+
+
+ Melhorar a escrita
+
+
+ Adicionar emojis
+
+
+ Tornar mais longo ou mais curto
+
+
+ Corrigir ortografia e gramática
+
+
+ Simplificar a linguagem
+
+ Sugestões de edição:
+
+ Substituir a seleção
+
+
+ Inserir abaixo
+
+
+ Descartar
+
+
+ Tentar novamente
+
+
+ Nota: o histórico do chat é preservado até que o menu seja fechado.
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/align-value.tsx b/apps/www/src/registry/examples/values/pt-br/align-value.tsx
new file mode 100644
index 0000000000..e4353d7030
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/align-value.tsx
@@ -0,0 +1,20 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const alignValue: any = (
+
+ Alinhamento
+
+ Alinhe o texto dentro dos blocos para criar layouts visualmente atraentes e
+ equilibrados.
+
+ Centralizado
+
+ Crie layouts limpos e equilibrados justificando o texto do bloco,
+ proporcionando uma aparência profissional e polida.
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/autoformat-value.tsx b/apps/www/src/registry/examples/values/pt-br/autoformat-value.tsx
new file mode 100644
index 0000000000..4baecd7729
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/autoformat-value.tsx
@@ -0,0 +1,91 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const autoformatValue: any = (
+
+ Formatação Automática
+
+ Potencialize sua experiência de escrita habilitando recursos de formatação automática. Adicione
+ atalhos estilo Markdown que aplicam formatação automaticamente enquanto você digita.
+
+ Enquanto digita, experimente estas regras de marcação:
+
+ Digite ** ou __ em ambos os lados do
+ seu texto para adicionar **negrito*.
+
+
+ Digite * ou _ em ambos os lados do
+ seu texto para adicionar *itálico.
+
+
+
+ Digite ` em ambos os lados do seu texto para adicionar `código
+ inline.
+
+
+
+ Digite ~~ em ambos os lados do seu texto para adicionar
+ ~~tachado~.
+
+
+ Note que nada acontece quando há um caractere antes, tente em:*negrito
+
+
+ Nós até suportamos aspas inteligentes, tente digitar{' '}
+ "olá" 'mundo'.
+
+
+
+ No início de qualquer novo bloco ou bloco existente, tente estes (regras de
+ bloco):
+
+
+
+ Digite *, - ou +
+ seguido de espaço para criar uma lista com marcadores.
+
+
+ Digite 1. ou 1) seguido de{' '}
+ espaço
+ para criar uma lista numerada.
+
+
+ Digite [] ou [x]
+ seguido de espaço para criar uma lista de tarefas.
+
+
+ Digite > seguido de espaço para
+ criar uma citação em bloco.
+
+
+ Digite ``` para criar um bloco de código.
+
+
+ Digite --- para criar uma linha horizontal.
+
+
+
+ Digite # seguido de espaço para criar
+ um título H1.
+
+
+ Digite ### seguido de espaço para
+ criar um subtítulo H3.
+
+
+ Digite #### seguido de espaço para
+ criar um subtítulo H4.
+
+
+ Digite ##### seguido de espaço para
+ criar um subtítulo H5.
+
+
+ Digite ###### seguido de espaço para
+ criar um subtítulo H6.
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/basic-blocks-value.tsx b/apps/www/src/registry/examples/values/pt-br/basic-blocks-value.tsx
new file mode 100644
index 0000000000..3bdded1f8d
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/basic-blocks-value.tsx
@@ -0,0 +1,40 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+import { KEYS } from 'platejs';
+
+jsx;
+
+export const basicBlocksValue: any = (
+
+ Título 1
+
+ Este é um título de nível superior, geralmente usado para títulos principais e cabeçalhos de
+ seções maiores.
+
+ Título 2
+
+ Títulos secundários ajudam a organizar o conteúdo em seções e subseções claras.
+
+ Título 3
+
+ Títulos de terceiro nível fornecem mais estrutura e hierarquia ao conteúdo.
+
+
+ "Citações em bloco são perfeitas para destacar informações importantes, citações
+ de fontes externas ou enfatizar pontos-chave no seu conteúdo."
+
+
+ Use títulos para criar uma estrutura de documento clara que ajude os leitores
+ a navegar pelo seu conteúdo de forma eficaz. Combine-os com citações em bloco para
+ enfatizar informações importantes.
+
+
+
+
+
+ Linhas horizontais ajudam a separar visualmente diferentes seções do seu
+ conteúdo, criando pausas claras entre tópicos ou ideias.
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/basic-marks-value.tsx b/apps/www/src/registry/examples/values/pt-br/basic-marks-value.tsx
new file mode 100644
index 0000000000..a3ae8a2ad7
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/basic-marks-value.tsx
@@ -0,0 +1,35 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const basicMarksValue: any = (
+
+ Formatação de Texto
+
+ Adicione estilo e ênfase ao seu texto usando várias opções de formatação.
+
+
+ Faça o texto negrito, itálico,{' '}
+ sublinhado, ou aplique uma{' '}
+
+ combinação
+ {' '}
+ desses estilos para ênfase.
+
+
+ Adicione tachado para indicar conteúdo excluído,
+ use código inline para termos técnicos, ou{' '}
+ destaque informações importantes.
+
+
+ Formate expressões matemáticas com texto subscrito{' '}
+ e sobrescrito.
+
+
+ Mostre atalhos de teclado como ⌘ + B para negrito ou{' '}
+ ⌘ + I para formatação em itálico.
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/basic-nodes-value.tsx b/apps/www/src/registry/examples/values/pt-br/basic-nodes-value.tsx
new file mode 100644
index 0000000000..3463996c2e
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/basic-nodes-value.tsx
@@ -0,0 +1,4 @@
+import { basicBlocksValue } from '@/registry/examples/values/pt-br/basic-blocks-value';
+import { basicMarksValue } from '@/registry/examples/values/pt-br/basic-marks-value';
+
+export const basicNodesValue = [...basicBlocksValue, ...basicMarksValue];
diff --git a/apps/www/src/registry/examples/values/pt-br/block-menu-value.tsx b/apps/www/src/registry/examples/values/pt-br/block-menu-value.tsx
new file mode 100644
index 0000000000..c8dae70fc9
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/block-menu-value.tsx
@@ -0,0 +1,34 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const blockMenuValue: any = (
+
+ Menu de Bloco
+
+ Abrir o menu de bloco:
+
+
+ Clique com o botão direito em qualquer bloco não selecionado para abrir o menu de contexto. Se você
+ clicar com o botão direito dentro de um bloco selecionado, verá o menu de contexto nativo do
+ navegador.
+
+
+ Opções disponíveis no menu de bloco:
+
+ Pedir à IA para editar o bloco.
+
+
+ Excluir o bloco.
+
+
+ Duplicar o bloco.
+
+
+ Transformar o tipo de bloco em outro tipo de bloco.
+
+
+);
+
diff --git a/apps/www/src/registry/examples/values/pt-br/block-selection-value.tsx b/apps/www/src/registry/examples/values/pt-br/block-selection-value.tsx
new file mode 100644
index 0000000000..ed2b60e690
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/block-selection-value.tsx
@@ -0,0 +1,29 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const blockSelectionValue: any = (
+
+ Seleção de Bloco
+
+
+ A seleção de bloco permite selecionar vários blocos de uma vez. Você pode
+ iniciar uma seleção clicando e arrastando a partir do preenchimento do editor.
+
+
+ Principais recursos da seleção de bloco:
+
+ Selecionar múltiplos blocos.
+
+
+ Mantenha Shift pressionado para manter a seleção anterior. Dessa forma, você pode
+ selecionar blocos não contíguos.
+
+
+ Executar ações em massa nos blocos selecionados
+
+
+);
+
diff --git a/apps/www/src/registry/examples/values/pt-br/callout-value.tsx b/apps/www/src/registry/examples/values/pt-br/callout-value.tsx
new file mode 100644
index 0000000000..8ead207bce
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/callout-value.tsx
@@ -0,0 +1,31 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const calloutValue: any = (
+
+ Destaques (Callouts)
+
+ Use destaques para chamar a atenção para informações importantes e organizar o conteúdo com
+ ênfase visual.
+
+
+ Dica: Destaques ajudam a chamar a atenção para informações chave
+ sem interromper o fluxo do conteúdo.
+
+
+ Aviso: Considerações importantes ou problemas potenciais dos quais os
+ usuários devem estar cientes.
+
+
+ Sucesso: Celebre conquistas ou destaque resultados
+ positivos.
+
+
+ Clique em qualquer ícone de destaque para personalizá-lo com o seletor de emojis. Destaques
+ suportam formatação rica e podem conter qualquer conteúdo.
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/code-block-value.tsx b/apps/www/src/registry/examples/values/pt-br/code-block-value.tsx
new file mode 100644
index 0000000000..7a551dc7bd
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/code-block-value.tsx
@@ -0,0 +1,76 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const codeBlockValue: any = (
+
+ Blocos de Código
+
+ Exiba seu código com destaque de sintaxe. Suporta múltiplas linguagens de programação
+ com formatação e indentação adequadas.
+
+
+ // Exemplo JavaScript com async/await
+ {'async function fetchUserData(userId) {'}
+ {' try {'}
+
+ {' const response = await fetch(`/api/users/${userId}`);'}
+
+ {' const userData = await response.json();'}
+ {' return userData;'}
+ {' } catch (error) {'}
+ {` console.error('Falha ao buscar dados do usuário:', error);`}
+ {' throw error;'}
+ {' }'}
+ {'}'}
+
+ Exemplo Python com definição de classe:
+
+ # Classe Python com dicas de tipo
+ from typing import List, Optional
+
+ class GerenciadorTarefas:
+ {' def __init__(self) -> None:'}
+ {' self.tasks: List[str] = []'}
+
+ {' def adicionar_tarefa(self, task: str) -> None:'}
+ {` """Adicionar uma nova tarefa à lista."""`}
+ {' self.tasks.append(task)'}
+
+
+ {' def obter_tarefa(self, index: int) -> Optional[str]:'}
+
+ {` """Obter uma tarefa pelo índice, retornar None se não encontrada."""`}
+
+ {
+ ' return self.tasks[index] if 0 <= index < len(self.tasks) else None'
+ }
+
+
+ Exemplo de estilo CSS:
+
+ /* CSS Moderno com propriedades personalizadas */
+ {':root {'}
+ {' --primary-color: #3b82f6;'}
+ {' --secondary-color: #64748b;'}
+ {' --border-radius: 0.5rem;'}
+ {'}'}
+
+ {'.card {'}
+ {' background: white;'}
+ {' border-radius: var(--border-radius);'}
+
+ {' box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);'}
+
+ {' padding: 1.5rem;'}
+ {' transition: transform 0.2s ease-in-out;'}
+ {'}'}
+
+ {'.card:hover {'}
+ {' transform: translateY(-2px);'}
+ {'}'}
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/column-value.tsx b/apps/www/src/registry/examples/values/pt-br/column-value.tsx
new file mode 100644
index 0000000000..6df3451ba4
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/column-value.tsx
@@ -0,0 +1,22 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const columnValue: any = (
+
+ Coluna
+ Crie colunas e a borda ficará oculta durante a visualização
+
+
+ esquerda 1
+ esquerda 2
+
+
+ direita 1
+ direita 2
+
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/copilot-value.tsx b/apps/www/src/registry/examples/values/pt-br/copilot-value.tsx
new file mode 100644
index 0000000000..abf7c0d253
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/copilot-value.tsx
@@ -0,0 +1,39 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const copilotValue: any = (
+
+ Copilot
+
+ Posicione seu cursor no
+ final de um parágrafo
+ onde você deseja adicionar ou modificar texto.
+
+
+ Pressione Control + Espaço para acionar o Copilot
+
+
+ O Copilot irá
+ automaticamente
+ sugerir conclusões enquanto você digita.
+
+
+ Escolha entre as conclusões sugeridas:
+
+
+ Tab:
+ Aceita toda a conclusão sugerida
+
+
+ Command + Seta Direita
+ : Completa um caractere de cada vez
+
+
+ Esc
+ : Cancela o Copilot
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/cursor-overlay-value.tsx b/apps/www/src/registry/examples/values/pt-br/cursor-overlay-value.tsx
new file mode 100644
index 0000000000..2a090e217e
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/cursor-overlay-value.tsx
@@ -0,0 +1,20 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const cursorOverlayValue: any = (
+
+ Sobreposição de Cursor
+
+ Tente arrastar sobre o texto: você verá um cursor colorido no alvo de soltura:
+ a cor e outros estilos são personalizáveis!
+
+
+ Você também pode tentar clicar no botão "Perguntar à IA" - a seleção permanecerá
+ visível enquanto foca em outra entrada, e será atualizada durante o
+ streaming.
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/date-value.tsx b/apps/www/src/registry/examples/values/pt-br/date-value.tsx
new file mode 100644
index 0000000000..a8de9b35b2
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/date-value.tsx
@@ -0,0 +1,29 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+const today = new Date().toISOString().split('T')[0];
+
+export const dateValue: any = (
+
+ Data
+
+ Insira e exiba datas em seu texto usando elementos de data inline.
+ Essas datas podem ser facilmente selecionadas e modificadas usando uma interface
+ de calendário.
+
+
+ Tente selecionar{' '}
+
+
+ {' '}
+ ou{' '}
+
+
+
+ .
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/demo-values.tsx b/apps/www/src/registry/examples/values/pt-br/demo-values.tsx
new file mode 100644
index 0000000000..fd7cf03016
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/demo-values.tsx
@@ -0,0 +1,109 @@
+import { calloutValue } from '@/registry/examples/values/pt-br/callout-value';
+import { playgroundValue } from '@/registry/examples/values/playground-value';
+
+import { aiValue } from './ai-value';
+import { alignValue } from './align-value';
+import { autoformatValue } from './autoformat-value';
+import { basicBlocksValue } from './basic-blocks-value';
+import { basicMarksValue } from './basic-marks-value';
+import { basicNodesValue } from './basic-nodes-value';
+import { blockMenuValue } from './block-menu-value';
+import { blockSelectionValue } from './block-selection-value';
+import { codeBlockValue } from './code-block-value';
+import { columnValue } from './column-value';
+import { copilotValue } from './copilot-value';
+import { cursorOverlayValue } from './cursor-overlay-value';
+import { dateValue } from './date-value';
+import { deserializeCsvValue } from './deserialize-csv-value';
+import { deserializeDocxValue } from './deserialize-docx-value';
+import { deserializeHtmlValue } from './deserialize-html-value';
+import { deserializeMdValue } from './deserialize-md-value';
+import { discussionValue } from './discussion-value';
+import { dndValue } from './dnd-value';
+import { editableVoidsValue } from './editable-voids-value';
+import { emojiValue } from './emoji-value';
+import { equationValue } from './equation-value';
+import { excalidrawValue } from './excalidraw-value';
+import { exitBreakValue } from './exit-break-value';
+import { findReplaceValue } from './find-replace-value';
+import { floatingToolbarValue } from './floating-toolbar-value';
+import { fontValue } from './font-value';
+import { iframeValue } from './iframe-value';
+import { indentValue } from './indent-value';
+import { lineHeightValue } from './line-height-value';
+import { linkValue } from './link-value';
+import { listValue as listClassicValue } from './list-classic-value';
+import { listValue } from './list-value';
+import { mediaValue } from './media-value';
+import { mentionValue } from './mention-value';
+import { blockPlaceholderValue } from './placeholder-value';
+import { pluginRulesValue } from './plugin-rules-value';
+import { previewMdValue } from './preview-md-value';
+import { slashCommandValue } from './slash-command-value';
+import { tabbableValue } from './tabbable-value';
+import { tableValue } from './table-value';
+import { tocValue } from './toc-value';
+import { toggleValue } from './toggle-value';
+
+const values = {
+ ai: aiValue,
+ autoformat: autoformatValue,
+ 'basic-blocks': basicBlocksValue,
+ 'basic-marks': basicMarksValue,
+ 'basic-nodes': basicNodesValue,
+ 'block-menu': blockMenuValue,
+ // 'multi-editors': multiEditorsValue,
+ 'block-placeholder': blockPlaceholderValue,
+ 'block-selection': blockSelectionValue,
+ callout: calloutValue,
+ 'code-block': codeBlockValue,
+ column: columnValue,
+ copilot: copilotValue,
+ csv: deserializeCsvValue,
+ 'cursor-overlay': cursorOverlayValue,
+ date: dateValue,
+ discussion: discussionValue,
+ dnd: dndValue,
+ docx: deserializeDocxValue,
+ 'editable-voids': editableVoidsValue,
+ emoji: emojiValue,
+ // upload: uploadValue,
+ equation: equationValue,
+ // equation: equationValue,
+ excalidraw: excalidrawValue,
+ 'exit-break': exitBreakValue,
+ 'find-replace': findReplaceValue,
+ 'floating-toolbar': floatingToolbarValue,
+ font: fontValue,
+ html: deserializeHtmlValue,
+ // 'huge-document': hugeDocumentValue,
+ iframe: iframeValue,
+ indent: indentValue,
+ 'line-height': lineHeightValue,
+ link: linkValue,
+ list: listValue,
+ 'list-classic': listClassicValue,
+ markdown: deserializeMdValue,
+ media: mediaValue,
+ // 'media-toolbar': mediaToolbarValue,
+ mention: mentionValue,
+ playground: playgroundValue,
+ 'plugin-rules': pluginRulesValue,
+ 'preview-markdown': previewMdValue,
+ 'slash-command': slashCommandValue,
+ tabbable: tabbableValue,
+ table: tableValue,
+ 'text-align': alignValue,
+ toc: tocValue,
+ toggle: toggleValue,
+};
+
+export const DEMO_VALUES = Object.entries(values).reduce(
+ (acc, [key, value]) => {
+ const demoKey = key.replace('Value', '');
+ acc[demoKey] = value;
+
+ return acc;
+ },
+ {} as Record
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/deserialize-csv-value.tsx b/apps/www/src/registry/examples/values/pt-br/deserialize-csv-value.tsx
new file mode 100644
index 0000000000..f856e0b2b3
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/deserialize-csv-value.tsx
@@ -0,0 +1,12 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const deserializeCsvValue: any = (
+
+ CSV
+ Copie e cole conteúdo CSV em uma tabela.
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/deserialize-docx-value.tsx b/apps/www/src/registry/examples/values/pt-br/deserialize-docx-value.tsx
new file mode 100644
index 0000000000..27a3a666e8
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/deserialize-docx-value.tsx
@@ -0,0 +1,15 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const deserializeDocxValue: any = (
+
+ Docx
+
+ Importe facilmente conteúdo de documentos Microsoft Word simplesmente copiando e
+ colando o conteúdo Docx no editor.
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/deserialize-html-value.tsx b/apps/www/src/registry/examples/values/pt-br/deserialize-html-value.tsx
new file mode 100644
index 0000000000..c10f4731b2
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/deserialize-html-value.tsx
@@ -0,0 +1,25 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const deserializeHtmlValue: any = (
+
+ HTML
+
+ Por padrão, quando você cola conteúdo no editor Slate, ele utiliza os dados
+ 'text/plain'
+ da área de transferência. Embora isso seja adequado para certos cenários, há momentos em que
+ você quer que os usuários possam colar conteúdo preservando sua
+ formatação. Para conseguir isso, seu editor deve ser capaz de manipular dados{' '}
+ 'text/html'.
+
+
+ Para experimentar a preservação perfeita da formatação, simplesmente copie e
+ cole conteúdo renderizado em HTML (não o código-fonte) de outro
+ site neste editor. Você notará que a formatação do conteúdo colado
+ é mantida.
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/deserialize-md-value.tsx b/apps/www/src/registry/examples/values/pt-br/deserialize-md-value.tsx
new file mode 100644
index 0000000000..d6de547f11
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/deserialize-md-value.tsx
@@ -0,0 +1,16 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const deserializeMdValue: any = (
+
+ Markdown
+
+ Copie e cole conteúdo Markdown de editores Markdown populares como{' '}
+ markdown-it.github.io/ no
+ editor para fácil conversão e edição.
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/discussion-value.tsx b/apps/www/src/registry/examples/values/pt-br/discussion-value.tsx
new file mode 100644
index 0000000000..48a7cdf45f
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/discussion-value.tsx
@@ -0,0 +1,88 @@
+import type { Value } from 'platejs';
+
+export const discussionValue: Value = [
+ {
+ children: [{ text: 'Discussões' }],
+ type: 'h2',
+ },
+ {
+ children: [
+ { text: 'Revise e refine o conteúdo perfeitamente. Use ' },
+ {
+ children: [
+ {
+ suggestion: true,
+ suggestion_playground1: {
+ id: 'playground1',
+ createdAt: Date.now(),
+ type: 'insert',
+ userId: 'alice',
+ },
+ text: 'sugestões',
+ },
+ ],
+ type: 'a',
+ url: '/docs/suggestion',
+ },
+ {
+ suggestion: true,
+ suggestion_playground1: {
+ id: 'playground1',
+ createdAt: Date.now(),
+ type: 'insert',
+ userId: 'alice',
+ },
+ text: ' ',
+ },
+ {
+ suggestion: true,
+ suggestion_playground1: {
+ id: 'playground1',
+ createdAt: Date.now(),
+ type: 'insert',
+ userId: 'alice',
+ },
+ text: 'como este texto adicionado',
+ },
+ { text: ' ou para ' },
+ {
+ suggestion: true,
+ suggestion_playground2: {
+ id: 'playground2',
+ createdAt: Date.now(),
+ type: 'remove',
+ userId: 'bob',
+ },
+ text: 'marcar texto para remoção',
+ },
+ { text: '. Discuta alterações usando ' },
+ {
+ children: [
+ { comment: true, comment_discussion1: true, text: 'comentários' },
+ ],
+ type: 'a',
+ url: '/docs/comment',
+ },
+ {
+ comment: true,
+ comment_discussion1: true,
+ text: ' em muitos segmentos de texto',
+ },
+ { text: '. Você pode até ter ' },
+ {
+ comment: true,
+ comment_discussion2: true,
+ suggestion: true,
+ suggestion_playground3: {
+ id: 'playground3',
+ createdAt: Date.now(),
+ type: 'insert',
+ userId: 'charlie',
+ },
+ text: 'anotações',
+ },
+ { text: ' sobrepostas!' },
+ ],
+ type: 'p',
+ },
+];
diff --git a/apps/www/src/registry/examples/values/pt-br/dnd-value.tsx b/apps/www/src/registry/examples/values/pt-br/dnd-value.tsx
new file mode 100644
index 0000000000..4b4d897996
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/dnd-value.tsx
@@ -0,0 +1,36 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const dndValue: any = (
+
+ Arrastar e Soltar
+ Reorganize facilmente o conteúdo do seu documento usando arrastar e soltar.
+ Como usar:
+
+
+ Passe o mouse sobre o lado esquerdo de um bloco para ver a alça de arrasto (seis pontos).
+
+
+
+
+ Clique e segure a alça, depois arraste o bloco para um novo local.
+
+
+
+ Solte para colocar o bloco em sua nova posição.
+
+ Experimente! Arraste estes itens para reordená-los:
+
+ Primeiro item
+
+
+ Segundo item
+
+
+ Terceiro item
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/editable-voids-value.tsx b/apps/www/src/registry/examples/values/pt-br/editable-voids-value.tsx
new file mode 100644
index 0000000000..c93a38566d
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/editable-voids-value.tsx
@@ -0,0 +1,21 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const editableVoidsValue: any = (
+
+
+ Além de nós que contêm texto editável, você pode inserir nós vazios (void
+ nodes), que também podem conter elementos editáveis, entradas ou até mesmo
+ outro editor Slate inteiro.
+
+
+
+
+
+
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/emoji-value.tsx b/apps/www/src/registry/examples/values/pt-br/emoji-value.tsx
new file mode 100644
index 0000000000..26411ec3ee
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/emoji-value.tsx
@@ -0,0 +1,13 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const emojiValue: any = (
+
+ Emoji
+ Expresse-se com um toque de diversão 🎉 e emoção 😃.
+ Escolha na barra de ferramentas ou digite dois pontos para abrir a lista suspensa.
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/equation-value.tsx b/apps/www/src/registry/examples/values/pt-br/equation-value.tsx
new file mode 100644
index 0000000000..e240c19ff6
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/equation-value.tsx
@@ -0,0 +1,95 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const equationValue: any = (
+
+
+ Equação
+
+
+
+ Equações permitem que você expresse conceitos matemáticos complexos em formatos
+ inline e bloco.
+
+
+
+ Principais características:
+
+
+ Suporte à sintaxe LaTeX
+
+
+ Formatos de equação inline e bloco
+
+
+ Exemplo de equação inline:
+
+
+
+ (Famosa equação de Einstein)
+
+
+ Exemplos de equação em bloco:
+
+
+
+
+
+ A fórmula quadrática para resolver
+
+
+
+ .
+
+
+
+
+
+ O teorema fundamental do cálculo.
+
+
+ Tente estas ações:
+
+
+
+ Clique em qualquer equação para editá-la. Pressione Esc para fechar o menu sem
+ editar.
+
+
+
+
+ Você pode navegar pela equação usando as teclas de seta
+
+
+
+ Use o comando de barra (/equation) para inserir uma nova equação
+
+
+
+ Use o comando de barra (/inline equation) para equações inline
+
+
+
+
+ Uso avançado: Combine equações com outros elementos como tabelas ou
+ blocos de código para documentação científica abrangente. Por exemplo:
+
+
+
+ A equação de Schrödinger,
+
+
+
+ , é fundamental na mecânica quântica.
+
+
+
+ Experimente diferentes tipos de equações e formatações para criar conteúdo
+ matemático rico em seus documentos.
+
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/excalidraw-value.tsx b/apps/www/src/registry/examples/values/pt-br/excalidraw-value.tsx
new file mode 100644
index 0000000000..31e4511304
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/excalidraw-value.tsx
@@ -0,0 +1,71 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+import type { TExcalidrawElement } from '@platejs/excalidraw';
+import type { NodeProps } from 'platejs';
+
+export const excalidrawInitialData: NodeProps = {
+ data: {
+ elements: [
+ {
+ id: 'oDVXy8D6rom3H1-LLH2-f',
+ angle: 0,
+ backgroundColor: 'transparent',
+ fillStyle: 'hachure',
+ groupIds: [],
+ height: 141.976_562_5,
+ isDeleted: false,
+ opacity: 100,
+ roughness: 1,
+ seed: 1_968_410_350,
+ strokeColor: '#000000',
+ strokeStyle: 'solid',
+ strokeWidth: 1,
+ type: 'rectangle',
+ version: 141,
+ versionNonce: 361_174_001,
+ width: 186.472_656_25,
+ x: 100.503_906_25,
+ y: 93.675_781_25,
+ },
+ {
+ id: '-xMIs_0jIFqvpx-R9UnaG',
+ angle: 0,
+ backgroundColor: 'transparent',
+ fillStyle: 'hachure',
+ groupIds: [],
+ height: 129.511_718_75,
+ isDeleted: false,
+ opacity: 100,
+ roughness: 1,
+ seed: 957_947_807,
+ strokeColor: '#000000',
+ strokeStyle: 'solid',
+ strokeWidth: 1,
+ type: 'ellipse',
+ version: 47,
+ versionNonce: 1_128_618_623,
+ width: 198.218_75,
+ x: 300.570_312_5,
+ y: 190.691_406_25,
+ },
+ ],
+ state: { currentItemFontFamily: 1, viewBackgroundColor: '#AFEEEE' },
+ },
+};
+
+export const excalidrawValue: any = (
+
+ Excalidraw
+
+ Liberte sua criatividade com o plugin Excalidraw, que permite que você
+ incorpore e desenhe diagramas diretamente no seu editor.
+
+
+
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/exit-break-value.tsx b/apps/www/src/registry/examples/values/pt-br/exit-break-value.tsx
new file mode 100644
index 0000000000..d1699b777a
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/exit-break-value.tsx
@@ -0,0 +1,44 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+import { createTable } from './table-value';
+
+jsx;
+
+export const trailingBlockValue: any = (
+
+ Bloco Final
+ Sempre tenha um parágrafo final no fim do seu editor.
+
+);
+
+export const exitBreakValue: any = (
+
+ Quebra de Saída
+
+ Saia de estruturas de blocos aninhados usando atalhos de teclado. O plugin
+ determina automaticamente o ponto de saída apropriado:
+
+
+
+ ⌘⏎ – Sair e inserir um novo bloco após a estrutura atual
+
+
+ ⌘⇧⏎ – Sair e inserir um novo bloco antes da estrutura atual
+
+
+ Automático – Encontra o ancestral mais próximo que permite irmãos de parágrafo
+
+
+ Quebras de saída funcionam de forma inteligente em estruturas aninhadas como tabelas:
+
+ {createTable()}
+
+
+ Tente ⌘⏎ para sair deste bloco de código.
+
+
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/find-replace-value.tsx b/apps/www/src/registry/examples/values/pt-br/find-replace-value.tsx
new file mode 100644
index 0000000000..c866bfba06
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/find-replace-value.tsx
@@ -0,0 +1,16 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const findReplaceValue: any = (
+
+
+ Este é um texto editável que você pode pesquisar. Enquanto você pesquisa, ele procura por
+ sequências de texto correspondentes e adiciona decorações a elas
+ em tempo real.
+
+ Experimente você mesmo digitando na caixa de pesquisa acima!
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/floating-toolbar-value.tsx b/apps/www/src/registry/examples/values/pt-br/floating-toolbar-value.tsx
new file mode 100644
index 0000000000..7e9217584c
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/floating-toolbar-value.tsx
@@ -0,0 +1,51 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const floatingToolbarValue: any = (
+
+ Barra de Ferramentas Flutuante
+
+ A barra de ferramentas flutuante fornece acesso rápido a opções de formatação e
+ ações para o texto selecionado.
+
+ Como usar a barra de ferramentas flutuante:
+
+ Selecione qualquer texto para invocar a barra de ferramentas flutuante.
+
+ Com a barra de ferramentas flutuante, você pode:
+
+ Pedir ajuda à IA
+
+
+ Adicionar um comentário ao texto selecionado
+
+
+ Transformar um tipo de bloco em outro
+
+
+
+ Aplicar formatação de texto: negrito, itálico, sublinhado, tachado, código
+
+
+
+
+ Tente selecionar algum texto abaixo para ver a barra de ferramentas flutuante em ação:
+
+
+
+ Texto em negrito
+ ,
+ texto em itálico
+ ,
+ texto sublinhado
+ , e
+
+ formatação combinada
+
+ .
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/font-value.tsx b/apps/www/src/registry/examples/values/pt-br/font-value.tsx
new file mode 100644
index 0000000000..a8da372eee
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/font-value.tsx
@@ -0,0 +1,43 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const fontValue: any = (
+
+ Cores
+
+ Adicione{' '}
+
+ m
+
+
+ ú
+
+
+ l
+
+
+ t
+
+
+ i
+
+
+ p
+
+
+ l
+
+
+ a
+ {' '}
+ fonte e cores de{' '}
+
+ fundo
+ {' '}
+ para criar texto vibrante e atraente.
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/huge-document-value.tsx b/apps/www/src/registry/examples/values/pt-br/huge-document-value.tsx
new file mode 100644
index 0000000000..980e6e14d5
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/huge-document-value.tsx
@@ -0,0 +1,42 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import type { Descendant, Value } from 'platejs';
+
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+const HEADINGS = 300;
+const PARAGRAPHS = 10;
+
+export const createHugeDocumentValue = () => {
+ const hugeDocument: Descendant[] = [];
+
+ for (let h = 0; h < HEADINGS; h++) {
+ hugeDocument.push(
+ (
+ Do voluptate enim commodo quis ad aliqua dolore enim eu nisi.
+ ) as any
+ );
+
+ for (let p = 0; p < PARAGRAPHS; p++) {
+ hugeDocument.push(
+ (
+
+ Ex est consequat anim ad deserunt sint. Ea excepteur consequat amet
+ amet excepteur culpa nulla. Voluptate exercitation pariatur enim.
+ Excepteur ea nulla nostrud est ex sunt anim. Sunt laborum et et ea
+ aliquip excepteur sint nulla amet. Sunt sit cillum amet. Anim esse
+ ut irure ipsum irure proident consectetur eu velit esse. Laborum
+ minim laborum laborum sunt eiusmod aliqua fugiat adipisicing. Cillum
+ aliqua exercitation ex aliquip aliquip amet aliquip est eiusmod
+ tempor pariatur veniam adipisicing ad. Officia sunt ipsum
+ adipisicing eu quis laborum do cupidatat officia dolor.
+
+ ) as any
+ );
+ }
+ }
+
+ return hugeDocument as Value;
+};
diff --git a/apps/www/src/registry/examples/values/pt-br/iframe-value.tsx b/apps/www/src/registry/examples/values/pt-br/iframe-value.tsx
new file mode 100644
index 0000000000..9ac5083c7f
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/iframe-value.tsx
@@ -0,0 +1,21 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const iframeValue: any = (
+
+
+ Neste exemplo, o documento é renderizado em um{' '}
+ iframe controlado. Isso é particularmente{' '}
+ útil quando você precisa separar os estilos do conteúdo do editor
+ daqueles que endereçam sua interface de usuário.
+
+
+ Este também é o único método confiável para visualizar quaisquer{' '}
+ consultas de mídia (media queries)
+ em seu CSS.
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/indent-value.tsx b/apps/www/src/registry/examples/values/pt-br/indent-value.tsx
new file mode 100644
index 0000000000..b191c45eb4
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/indent-value.tsx
@@ -0,0 +1,18 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const indentValue: any = (
+
+ Indentação
+
+ Controle facilmente a indentação de blocos específicos para destacar informações
+ importantes e melhorar a estrutura visual.
+
+
+ Por exemplo, este parágrafo parece pertencer ao anterior.
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/line-height-value.tsx b/apps/www/src/registry/examples/values/pt-br/line-height-value.tsx
new file mode 100644
index 0000000000..1868ffa998
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/line-height-value.tsx
@@ -0,0 +1,19 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const lineHeightValue: any = (
+
+ Altura da Linha
+
+ Controle a altura da linha do seu texto para melhorar a legibilidade e ajustar o
+ espaçamento entre as linhas.
+
+
+ Escolha a altura de linha ideal para garantir uma leitura confortável e um
+ documento esteticamente agradável.
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/link-value.tsx b/apps/www/src/registry/examples/values/pt-br/link-value.tsx
new file mode 100644
index 0000000000..389555c82c
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/link-value.tsx
@@ -0,0 +1,23 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const linkValue: any = (
+
+ Link
+
+ Adicione{' '}
+
+ hiperlinks
+ {' '}
+ ao seu texto para referenciar fontes externas ou fornecer informações
+ adicionais usando o plugin Link.
+
+
+ Crie hiperlinks facilmente usando a barra de ferramentas ou colando uma URL enquanto
+ seleciona o texto desejado.
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/list-classic-value.tsx b/apps/www/src/registry/examples/values/pt-br/list-classic-value.tsx
new file mode 100644
index 0000000000..43b72e90b6
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/list-classic-value.tsx
@@ -0,0 +1,69 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+import { KEYS } from 'platejs';
+
+jsx;
+
+export const listValue: any = (
+
+ ✍️ Lista
+
+
+
+
+
+ Gatos
+
+
+ Cães
+
+
+ Pássaros
+
+
+ Papagaios
+
+
+ Corujas
+
+
+ Corujas-das-torres
+
+
+ Corujas-das-neves
+
+
+
+
+
+
+
+
+ Vermelho
+
+
+ Azul
+
+
+ Azul claro
+
+
+ Azul escuro
+
+
+ Azul marinho
+
+
+ Azul turquesa
+
+
+
+
+
+
+ Verde
+
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/list-value.tsx b/apps/www/src/registry/examples/values/pt-br/list-value.tsx
new file mode 100644
index 0000000000..8ed4843647
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/list-value.tsx
@@ -0,0 +1,62 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const listValue: any = (
+
+ Lista
+
+
+ Crie listas indentadas com múltiplos níveis de indentação e personalize
+ o tipo de estilo de lista para cada nível.
+
+
+ Tarefa 1
+
+
+
+ Disco 1
+
+
+ Disco 2
+
+
+ Tarefa 2
+
+
+ Romano 1
+
+
+ Decimal 11
+
+
+ Decimal 111
+
+
+ Decimal 112
+
+
+ Decimal 12
+
+
+ Decimal 13
+
+
+ Romano 2
+
+
+ Decimal 11
+
+
+ Decimal 12
+
+
+ Romano 3
+
+
+ Romano 4
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/media-value.tsx b/apps/www/src/registry/examples/values/pt-br/media-value.tsx
new file mode 100644
index 0000000000..6d7dc2363b
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/media-value.tsx
@@ -0,0 +1,84 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const imageValue: any = (
+
+ Imagem
+ Adicione imagens fazendo upload ou fornecendo a URL da imagem:
+
+
+
+ Personalize legendas de imagens e redimensione imagens.
+
+);
+
+export const mediaPlaceholderValue: any = (
+
+ Upload
+
+ Nosso editor suporta vários tipos de mídia para upload, incluindo imagens,
+ vídeos, áudio e arquivos.
+
+
+
+
+
+ Status de upload em tempo real e rastreamento de progresso
+
+
+
+
+
+ Limites de tamanho de arquivo configuráveis e configurações de upload em lote
+
+
+
+
+
+ Mensagens de erro claras para quaisquer problemas de upload
+
+
+ Experimente agora - arraste uma imagem da sua área de trabalho ou clique no botão de upload na
+ barra de ferramentas
+
+
+);
+
+export const mediaValue: any = (
+
+ {imageValue}
+ {mediaPlaceholderValue}
+
+ Incorporar (Embed)
+ Incorpore vários tipos de conteúdo, como vídeos e tweets:
+
+
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/mention-value.tsx b/apps/www/src/registry/examples/values/pt-br/mention-value.tsx
new file mode 100644
index 0000000000..bd88e6f189
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/mention-value.tsx
@@ -0,0 +1,26 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const mentionValue: any = (
+
+ Menção
+
+ Mencione e referencie outros usuários ou entidades em seu texto usando
+ @-menções.
+
+
+ Tente mencionar{' '}
+
+
+ {' '}
+ ou{' '}
+
+
+
+ .
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/multi-editors-value.tsx b/apps/www/src/registry/examples/values/pt-br/multi-editors-value.tsx
new file mode 100644
index 0000000000..639736e472
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/multi-editors-value.tsx
@@ -0,0 +1,43 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import type { Descendant } from 'platejs';
+
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const createMultiEditorsValue = () => {
+ const multiEditors: Descendant[][] = [];
+
+ for (let h = 0; h < 300; h++) {
+ const multiEditor: Descendant[] = [];
+ multiEditor.push(
+ (Amet duis nisi ea enim laborum laboris.) as any
+ );
+
+ for (let p = 0; p < 2; p++) {
+ multiEditor.push(
+ (
+
+ Laborum dolor et tempor consectetur amet ullamco consectetur ullamco
+ irure incididunt reprehenderit ullamco nulla tempor. Laboris veniam
+ commodo id in ex ullamco incididunt nulla eu Lorem adipisicing
+ deserunt duis ad. Mollit magna enim exercitation amet proident
+ reprehenderit magna nulla officia ad in non. Magna magna adipisicing
+ fugiat cillum do esse eu adipisicing. Culpa dolor non Lorem. Dolore
+ non voluptate velit in eu culpa velit. Exercitation fugiat cupidatat
+ adipisicing duis veniam proident irure ea excepteur aliqua esse ad
+ cupidatat adipisicing id. Ut exercitation proident ea eiusmod enim
+ non minim proident Lorem aliqua officia voluptate ullamco culpa
+ Lorem. Exercitation eiusmod dolor nostrud qui excepteur. Dolor
+ commodo duis reprehenderit excepteur laboris do minim qui.
+
+ ) as any
+ );
+ }
+
+ multiEditors.push(multiEditor);
+ }
+
+ return multiEditors;
+};
diff --git a/apps/www/src/registry/examples/values/pt-br/placeholder-value.tsx b/apps/www/src/registry/examples/values/pt-br/placeholder-value.tsx
new file mode 100644
index 0000000000..e59b80dbd0
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/placeholder-value.tsx
@@ -0,0 +1,18 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const blockPlaceholderValue: any = (
+
+ Placeholder
+
+ Mostre um placeholder ao selecionar um bloco vazio. Experimente no próximo
+ bloco:
+
+
+
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/playground-value.tsx b/apps/www/src/registry/examples/values/pt-br/playground-value.tsx
new file mode 100644
index 0000000000..9f4f0b1ff6
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/playground-value.tsx
@@ -0,0 +1,543 @@
+import type { Value } from 'platejs';
+
+export const playgroundValue: Value = [
+ // Intro
+ {
+ children: [{ text: 'Bem-vindo ao Plate Playground!' }],
+ type: 'h1',
+ },
+ {
+ children: [
+ { text: 'Experimente um editor de rich-text moderno construído com ' },
+ { children: [{ text: 'Slate' }], type: 'a', url: 'https://slatejs.org' },
+ { text: ' e ' },
+ { children: [{ text: 'React' }], type: 'a', url: 'https://reactjs.org' },
+ {
+ text: ". Este playground mostra apenas uma parte das capacidades do Plate. ",
+ },
+ {
+ children: [{ text: 'Explore a documentação' }],
+ type: 'a',
+ url: '/docs',
+ },
+ { text: ' para descobrir mais.' },
+ ],
+ type: 'p',
+ },
+ // Suggestions & Comments Section
+ {
+ children: [{ text: 'Edição Colaborativa' }],
+ type: 'h2',
+ },
+ {
+ children: [
+ { text: 'Revise e refine o conteúdo perfeitamente. Use ' },
+ {
+ children: [
+ {
+ suggestion: true,
+ suggestion_playground1: {
+ id: 'playground1',
+ createdAt: Date.now(),
+ type: 'insert',
+ userId: 'alice',
+ },
+ text: 'sugestões',
+ },
+ ],
+ type: 'a',
+ url: '/docs/suggestion',
+ },
+ {
+ suggestion: true,
+ suggestion_playground1: {
+ id: 'playground1',
+ createdAt: Date.now(),
+ type: 'insert',
+ userId: 'alice',
+ },
+ text: ' ',
+ },
+ {
+ suggestion: true,
+ suggestion_playground1: {
+ id: 'playground1',
+ createdAt: Date.now(),
+ type: 'insert',
+ userId: 'alice',
+ },
+ text: 'como este texto adicionado',
+ },
+ { text: ' ou para ' },
+ {
+ suggestion: true,
+ suggestion_playground2: {
+ id: 'playground2',
+ createdAt: Date.now(),
+ type: 'remove',
+ userId: 'bob',
+ },
+ text: 'marcar texto para remoção',
+ },
+ { text: '. Discuta alterações usando ' },
+ {
+ children: [
+ { comment: true, comment_discussion1: true, text: 'comentários' },
+ ],
+ type: 'a',
+ url: '/docs/comment',
+ },
+ {
+ comment: true,
+ comment_discussion1: true,
+ text: ' em muitos segmentos de texto',
+ },
+ { text: '. Você pode até ter ' },
+ {
+ comment: true,
+ comment_discussion2: true,
+ suggestion: true,
+ suggestion_playground3: {
+ id: 'playground3',
+ createdAt: Date.now(),
+ type: 'insert',
+ userId: 'charlie',
+ },
+ text: 'anotações',
+ },
+ { text: ' sobrepostas!' },
+ ],
+ type: 'p',
+ },
+ // AI Section
+ {
+ children: [{ text: 'Edição com IA' }],
+ type: 'h2',
+ },
+ {
+ children: [
+ { text: 'Aumente sua produtividade com o ' },
+ {
+ children: [{ text: 'AI SDK' }],
+ type: 'a',
+ url: '/docs/ai',
+ },
+ { text: ' integrado. Pressione ' },
+ { kbd: true, text: '⌘+J' },
+ { text: ' ou ' },
+ { kbd: true, text: 'Espaço' },
+ { text: ' em uma linha vazia para:' },
+ ],
+ type: 'p',
+ },
+ {
+ children: [
+ { text: 'Gerar conteúdo (continuar escrevendo, resumir, explicar)' },
+ ],
+ indent: 1,
+ listStyleType: 'disc',
+ type: 'p',
+ },
+ {
+ children: [
+ { text: 'Editar texto existente (melhorar, corrigir gramática, mudar tom)' },
+ ],
+ indent: 1,
+ listStyleType: 'disc',
+ type: 'p',
+ },
+ // Core Features Section (Combined)
+ {
+ children: [{ text: 'Edição de Conteúdo Rico' }],
+ type: 'h2',
+ },
+ {
+ children: [
+ { text: 'Estruture seu conteúdo com ' },
+ {
+ children: [{ text: 'títulos' }],
+ type: 'a',
+ url: '/docs/heading',
+ },
+ { text: ', ' },
+ {
+ children: [{ text: 'listas' }],
+ type: 'a',
+ url: '/docs/list',
+ },
+ { text: ', e ' },
+ {
+ children: [{ text: 'citações' }],
+ type: 'a',
+ url: '/docs/blockquote',
+ },
+ { text: '. Aplique ' },
+ {
+ children: [{ text: 'marcas' }],
+ type: 'a',
+ url: '/docs/basic-marks',
+ },
+ { text: ' como ' },
+ { bold: true, text: 'negrito' },
+ { text: ', ' },
+ { italic: true, text: 'itálico' },
+ { text: ', ' },
+ { text: 'sublinhado', underline: true },
+ { text: ', ' },
+ { strikethrough: true, text: 'tachado' },
+ { text: ', e ' },
+ { code: true, text: 'código' },
+ { text: '. Use ' },
+ {
+ children: [{ text: 'formatação automática' }],
+ type: 'a',
+ url: '/docs/autoformat',
+ },
+ { text: ' para atalhos tipo ' },
+ {
+ children: [{ text: 'Markdown' }],
+ type: 'a',
+ url: '/docs/markdown',
+ },
+ { text: ' (ex: ' },
+ { kbd: true, text: '* ' },
+ { text: ' para listas, ' },
+ { kbd: true, text: '# ' },
+ { text: ' para H1).' },
+ ],
+ type: 'p',
+ },
+ {
+ children: [
+ {
+ text: 'Citações em bloco são ótimas para destacar informações importantes.',
+ },
+ ],
+ type: 'blockquote',
+ },
+ {
+ children: [
+ { children: [{ text: 'function hello() {' }], type: 'code_line' },
+ {
+ children: [{ text: " console.info('Blocos de código são suportados!');" }],
+ type: 'code_line',
+ },
+ { children: [{ text: '}' }], type: 'code_line' },
+ ],
+ lang: 'javascript',
+ type: 'code_block',
+ },
+ {
+ children: [
+ { text: 'Crie ' },
+ {
+ children: [{ text: 'links' }],
+ type: 'a',
+ url: '/docs/link',
+ },
+ { text: ', ' },
+ {
+ children: [{ text: '@menção' }],
+ type: 'a',
+ url: '/docs/mention',
+ },
+ { text: ' usuários como ' },
+ { children: [{ text: '' }], type: 'mention', value: 'Alice' },
+ { text: ', ou insira ' },
+ {
+ children: [{ text: 'emojis' }],
+ type: 'a',
+ url: '/docs/emoji',
+ },
+ { text: ' ✨. Use o ' },
+ {
+ children: [{ text: 'comando de barra' }],
+ type: 'a',
+ url: '/docs/slash-command',
+ },
+ { text: ' (/) para acesso rápido aos elementos.' },
+ ],
+ type: 'p',
+ },
+ // Table Section
+ {
+ children: [{ text: 'Como o Plate se Compara' }],
+ type: 'h3',
+ },
+ {
+ children: [
+ {
+ text: 'O Plate oferece muitos recursos prontos para uso como plugins gratuitos e de código aberto.',
+ },
+ ],
+ type: 'p',
+ },
+ {
+ children: [
+ {
+ children: [
+ {
+ children: [
+ { children: [{ bold: true, text: 'Recurso' }], type: 'p' },
+ ],
+ type: 'th',
+ },
+ {
+ children: [
+ {
+ children: [{ bold: true, text: 'Plate (Grátis & OSS)' }],
+ type: 'p',
+ },
+ ],
+ type: 'th',
+ },
+ {
+ children: [
+ { children: [{ bold: true, text: 'Tiptap' }], type: 'p' },
+ ],
+ type: 'th',
+ },
+ ],
+ type: 'tr',
+ },
+ {
+ children: [
+ {
+ children: [{ children: [{ text: 'IA' }], type: 'p' }],
+ type: 'td',
+ },
+ {
+ children: [
+ {
+ attributes: { align: 'center' },
+ children: [{ text: '✅' }],
+ type: 'p',
+ },
+ ],
+ type: 'td',
+ },
+ {
+ children: [{ children: [{ text: 'Extensão Paga' }], type: 'p' }],
+ type: 'td',
+ },
+ ],
+ type: 'tr',
+ },
+ {
+ children: [
+ {
+ children: [{ children: [{ text: 'Comentários' }], type: 'p' }],
+ type: 'td',
+ },
+ {
+ children: [
+ {
+ attributes: { align: 'center' },
+ children: [{ text: '✅' }],
+ type: 'p',
+ },
+ ],
+ type: 'td',
+ },
+ {
+ children: [{ children: [{ text: 'Extensão Paga' }], type: 'p' }],
+ type: 'td',
+ },
+ ],
+ type: 'tr',
+ },
+ {
+ children: [
+ {
+ children: [{ children: [{ text: 'Sugestões' }], type: 'p' }],
+ type: 'td',
+ },
+ {
+ children: [
+ {
+ attributes: { align: 'center' },
+ children: [{ text: '✅' }],
+ type: 'p',
+ },
+ ],
+ type: 'td',
+ },
+ {
+ children: [
+ { children: [{ text: 'Pago (Comments Pro)' }], type: 'p' },
+ ],
+ type: 'td',
+ },
+ ],
+ type: 'tr',
+ },
+ {
+ children: [
+ {
+ children: [{ children: [{ text: 'Seletor de Emoji' }], type: 'p' }],
+ type: 'td',
+ },
+ {
+ children: [
+ {
+ attributes: { align: 'center' },
+ children: [{ text: '✅' }],
+ type: 'p',
+ },
+ ],
+ type: 'td',
+ },
+ {
+ children: [{ children: [{ text: 'Extensão Paga' }], type: 'p' }],
+ type: 'td',
+ },
+ ],
+ type: 'tr',
+ },
+ {
+ children: [
+ {
+ children: [
+ { children: [{ text: 'Índice (TOC)' }], type: 'p' },
+ ],
+ type: 'td',
+ },
+ {
+ children: [
+ {
+ attributes: { align: 'center' },
+ children: [{ text: '✅' }],
+ type: 'p',
+ },
+ ],
+ type: 'td',
+ },
+ {
+ children: [{ children: [{ text: 'Extensão Paga' }], type: 'p' }],
+ type: 'td',
+ },
+ ],
+ type: 'tr',
+ },
+ {
+ children: [
+ {
+ children: [{ children: [{ text: 'Alça de Arrastar' }], type: 'p' }],
+ type: 'td',
+ },
+ {
+ children: [
+ {
+ attributes: { align: 'center' },
+ children: [{ text: '✅' }],
+ type: 'p',
+ },
+ ],
+ type: 'td',
+ },
+ {
+ children: [{ children: [{ text: 'Extensão Paga' }], type: 'p' }],
+ type: 'td',
+ },
+ ],
+ type: 'tr',
+ },
+ {
+ children: [
+ {
+ children: [
+ { children: [{ text: 'Colaboração (Yjs)' }], type: 'p' },
+ ],
+ type: 'td',
+ },
+ {
+ children: [
+ {
+ attributes: { align: 'center' },
+ children: [{ text: '✅' }],
+ type: 'p',
+ },
+ ],
+ type: 'td',
+ },
+ {
+ children: [
+ { children: [{ text: 'Hocuspocus (OSS/Pago)' }], type: 'p' },
+ ],
+ type: 'td',
+ },
+ ],
+ type: 'tr',
+ },
+ ],
+
+ colSizes: [160, 170, 200],
+ type: 'table',
+ },
+ // Media Section
+ {
+ children: [{ text: 'Imagens e Mídia' }],
+ type: 'h3',
+ },
+ {
+ children: [
+ {
+ text: 'Incorpore mídia rica como imagens diretamente em seu conteúdo. Suporta ',
+ },
+ {
+ children: [{ text: 'Uploads de mídia' }],
+ type: 'a',
+ url: '/docs/media',
+ },
+ {
+ text: ' e ',
+ },
+ {
+ children: [{ text: 'arrastar e soltar' }],
+ type: 'a',
+ url: '/docs/dnd',
+ },
+ {
+ text: ' para uma experiência suave.',
+ },
+ ],
+ type: 'p',
+ },
+ {
+ attributes: { align: 'center' },
+ caption: [
+ {
+ children: [{ text: 'Imagens com legendas fornecem contexto.' }],
+ type: 'p',
+ },
+ ],
+ children: [{ text: '' }],
+ type: 'img',
+ url: 'https://images.unsplash.com/photo-1712688930249-98e1963af7bd?q=80&w=600&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
+ width: '75%',
+ },
+ {
+ children: [{ text: '' }],
+ isUpload: true,
+ name: 'exemplo.pdf',
+ type: 'file',
+ url: 'https://s26.q4cdn.com/900411403/files/doc_downloads/test.pdf',
+ },
+ {
+ children: [{ text: '' }],
+ type: 'audio',
+ url: 'https://samplelib.com/lib/preview/mp3/sample-3s.mp3',
+ },
+ {
+ children: [{ text: 'Índice' }],
+ type: 'h3',
+ },
+ {
+ children: [{ text: '' }],
+ type: 'toc',
+ },
+ {
+ children: [{ text: '' }],
+ type: 'p',
+ },
+];
diff --git a/apps/www/src/registry/examples/values/pt-br/plugin-rules-value.tsx b/apps/www/src/registry/examples/values/pt-br/plugin-rules-value.tsx
new file mode 100644
index 0000000000..ff23ff304b
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/plugin-rules-value.tsx
@@ -0,0 +1,94 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const pluginRulesValue: any = (
+
+ Regras de Plugin
+
+ Regras de plugin controlam como os blocos respondem a Enter, Backspace, seleção
+ e normalização.
+
+
+ Regras de Quebra (Break)
+
+
+ Divisão e Redefinição de Título (splitReset): Pressione Enter no meio do título
+ para dividir e redefinir o novo bloco para parágrafo.
+
+ Pressione Enter após "Pressione" para ver o comportamento de splitReset
+
+
+ Citação em bloco com quebras de linha: Enter adiciona quebras de linha,
+ Enter em linhas vazias redefine para parágrafo.
+
+
+ Esta citação em bloco usa regras de quebra de linha. Pressione Enter aqui para quebras de linha.
+
+
+ Regras de Exclusão (Delete)
+
+
+ Redefinição de bloco de código: Backspace em bloco de código vazio redefine
+ para parágrafo.
+
+
+ console.info('Olá mundo');
+
+
+
+
+
+
+ Itens de lista: Backspace no início remove a formatação
+ de lista.
+
+
+ Pressione Backspace no início para remover a formatação de lista
+
+
+ Regras de Seleção
+
+
+ Afinidade rígida (código): Use as setas ao redor de{' '}
+ marcas de código - requer dois pressionamentos de tecla para cruzar
+ fronteiras.
+
+
+
+ Afinidade direcional: Use as setas ao redor de texto{' '}
+ sobrescrito - a afinidade do cursor depende da
+ direção do movimento.
+
+
+
+ Link direcional: Navegue com as setas ao redor{' '}
+ deste link para testar o comportamento direcional.
+
+
+ Regras de Normalização
+
+
+ Remoção de link vazio: Exclua todo o texto{' '}
+ deste link - o elemento de link será
+ removido automaticamente.
+
+
+ Regras de Mesclagem (Merge)
+
+
+ Elementos vazios (Void):
+
+
+
+ Pressione Backspace no início - o elemento vazio é selecionado em vez de excluído.
+
+
+
+
+
+ Backspace no início remove o parágrafo vazio acima
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/preview-md-value.tsx b/apps/www/src/registry/examples/values/pt-br/preview-md-value.tsx
new file mode 100644
index 0000000000..a81f7031c5
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/preview-md-value.tsx
@@ -0,0 +1,22 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const previewMdValue: any = (
+
+ 👀 Pré-visualização Markdown
+
+ O Slate é flexível o suficiente para adicionar **decorações** que podem formatar texto com base
+ em seu conteúdo. Por exemplo, este editor tem decorações de pré-visualização **Markdown**
+ nele, para tornar _muito_ simples fazer um editor com
+ pré-visualização de `Markdown` integrada.
+
+ - Lista.
+ Citação em bloco.
+ ---
+ ## Experimente!
+ Experimente você mesmo!
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/slash-command-value.tsx b/apps/www/src/registry/examples/values/pt-br/slash-command-value.tsx
new file mode 100644
index 0000000000..b5dfd33b2b
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/slash-command-value.tsx
@@ -0,0 +1,43 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const slashCommandValue: any = (
+
+
+ Comando de Barra
+
+
+
+ O menu de barra fornece acesso rápido a várias opções de formatação e
+ tipos de conteúdo.
+
+
+
+ Digite '/' em qualquer lugar do seu documento para abrir o menu de barra.
+
+
+
+ Comece a digitar para filtrar opções ou use as setas para navegar.
+
+
+
+ Pressione Enter ou clique para selecionar uma opção.
+
+
+ Pressione Esc para fechar o menu sem selecionar.
+
+ Opções disponíveis incluem:
+
+ Títulos: Título 1, Título 2, Título 3
+
+
+ Listas: Lista com marcadores, Lista numerada
+
+
+ Elementos Inline: Data
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/soft-break-value.tsx b/apps/www/src/registry/examples/values/pt-br/soft-break-value.tsx
new file mode 100644
index 0000000000..607e98948b
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/soft-break-value.tsx
@@ -0,0 +1,26 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const softBreakValue: any = (
+
+ Quebra Suave
+
+ Personalize como quebras suaves (quebras de linha dentro de um parágrafo) são tratadas
+ usando regras configuráveis
+
+
+ hotkey – Use teclas de atalho como ⇧⏎ para inserir uma quebra suave em qualquer lugar dentro de um
+ parágrafo.
+
+
+ query – Defina regras personalizadas para limitar quebras suaves a tipos de blocos específicos.
+
+ Tente aqui ⏎
+
+ E aqui ⏎ também.
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/tabbable-value.tsx b/apps/www/src/registry/examples/values/pt-br/tabbable-value.tsx
new file mode 100644
index 0000000000..55adf172b7
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/tabbable-value.tsx
@@ -0,0 +1,55 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const tabbableValue: any = (
+
+ Tabbable (Navegação por Tab)
+
+ Garanta uma experiência de navegação por tab suave dentro do seu editor com o
+ plugin Tabbable.
+
+
+ Lide corretamente com ordens de tabulação para nós vazios (void nodes), permitindo navegação
+ e interação contínuas. Sem este plugin, elementos DOM dentro de nós
+ vazios vêm após o editor na ordem de tabulação.
+
+
+
+
+
+
+
+ Coloque seu cursor aqui e tente pressionar tab ou shift+tab.
+
+ Item de lista 1
+
+
+ Item de lista 2
+
+
+ Item de lista 3
+
+
+ if (true) {'{'}
+
+ {'// <-'} Coloque o cursor no início da linha e pressione tab
+
+ {'}'}
+
+
+ Neste exemplo, o plugin está desativado quando o cursor está dentro de uma lista
+ ou um bloco de código. Você pode personalizar isso usando a opção{' '}
+ query.
+
+
+
+
+
+ Quando você pressiona tab no final do editor, o foco deve ir para o
+ botão abaixo.
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/table-value.tsx b/apps/www/src/registry/examples/values/pt-br/table-value.tsx
new file mode 100644
index 0000000000..a54d826172
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/table-value.tsx
@@ -0,0 +1,118 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const createTable = (spanning?: boolean): any => (
+
+
+ {spanning ? (
+
+
+
+ Plugin
+
+
+
+ ) : (
+
+
+
+ Plugin
+
+
+
+
+ Elemento
+
+
+
+
+ Inline
+
+
+
+
+ Void
+
+
+
+ )}
+
+
+
+
+ Título
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Não
+
+
+
+
+
+ Imagem
+
+
+
+ Sim
+
+
+ Não
+
+
+ Sim
+
+
+
+
+
+ Menção
+
+
+
+ Sim
+
+
+ Sim
+
+
+ Sim
+
+
+
+
+);
+
+export const tableValue: any = (
+
+ Tabela
+
+ Crie tabelas personalizáveis com colunas e linhas redimensionáveis, permitindo que você
+ projete layouts estruturados.
+
+ {createTable()}
+
+);
+
+export const tableMergeValue: any = (
+
+ Mesclagem de Tabela
+
+ Você pode desativar a mesclagem usando a opção disableMerge: true. Experimente:
+
+ {createTable(true)}
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/toc-value.tsx b/apps/www/src/registry/examples/values/pt-br/toc-value.tsx
new file mode 100644
index 0000000000..2dd8d8b01a
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/toc-value.tsx
@@ -0,0 +1,65 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const tocValue: any = (
+
+
+ Índice (Table of Contents)
+
+
+
+ O recurso de Índice (TOC) permite que você crie uma
+ visão geral atualizada automaticamente da estrutura do seu documento.
+
+
+ Como usar o Índice:
+
+ Digite "/toc" e pressione Enter para criar o TOC.
+
+
+
+ O TOC é atualizado automaticamente quando você modifica títulos no documento.
+
+
+
+
+
+ Conteúdo de Exemplo
+
+
+ Este é um exemplo de conteúdo que seria refletido no Índice.
+
+
+ Subseção
+
+
+ Adicionar ou modificar títulos em seu documento atualizará automaticamente
+ o TOC.
+
+
+ Benefícios de Usar TOC
+
+
+ Um Índice melhora a navegação do documento e fornece uma rápida
+ visão geral da estrutura do seu conteúdo.
+
+
+
+);
+
+export const tocPlaygroundValue: any = (
+
+
+
+
+
+
+ Clique em qualquer título no índice para rolar suavemente para essa
+ seção.
+
+
+
+);
diff --git a/apps/www/src/registry/examples/values/pt-br/toggle-value.tsx b/apps/www/src/registry/examples/values/pt-br/toggle-value.tsx
new file mode 100644
index 0000000000..6e8f155f99
--- /dev/null
+++ b/apps/www/src/registry/examples/values/pt-br/toggle-value.tsx
@@ -0,0 +1,19 @@
+/** @jsxRuntime classic */
+/** @jsx jsx */
+import { jsx } from '@platejs/test-utils';
+
+jsx;
+
+export const toggleValue: any = (
+
+ Alternância (Toggle)
+ Crie alternâncias com múltiplos níveis de indentação
+ Alternância nível 1
+ Dentro da alternância nível 1
+
+ Alternância nível 2
+
+ Dentro da alternância nível 2
+ Após alternâncias
+
+);
diff --git a/yarn.lock b/yarn.lock
index 73c9e4d3b5..3ff2127bce 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3254,7 +3254,7 @@ __metadata:
languageName: unknown
linkType: soft
-"@platejs/core@npm:52.0.1, @platejs/core@workspace:packages/core":
+"@platejs/core@npm:52.0.8, @platejs/core@workspace:packages/core":
version: 0.0.0-use.local
resolution: "@platejs/core@workspace:packages/core"
dependencies:
@@ -3713,11 +3713,11 @@ __metadata:
languageName: unknown
linkType: soft
-"@platejs/utils@npm:52.0.1, @platejs/utils@workspace:packages/utils":
+"@platejs/utils@npm:52.0.8, @platejs/utils@workspace:packages/utils":
version: 0.0.0-use.local
resolution: "@platejs/utils@workspace:packages/utils"
dependencies:
- "@platejs/core": "npm:52.0.1"
+ "@platejs/core": "npm:52.0.8"
"@platejs/slate": "npm:52.0.1"
"@udecode/react-utils": "npm:52.0.1"
"@udecode/utils": "npm:52.0.1"
@@ -15728,9 +15728,9 @@ __metadata:
version: 0.0.0-use.local
resolution: "platejs@workspace:packages/plate"
dependencies:
- "@platejs/core": "npm:52.0.1"
+ "@platejs/core": "npm:52.0.8"
"@platejs/slate": "npm:52.0.1"
- "@platejs/utils": "npm:52.0.1"
+ "@platejs/utils": "npm:52.0.8"
"@udecode/react-hotkeys": "npm:52.0.1"
"@udecode/react-utils": "npm:52.0.1"
"@udecode/utils": "npm:52.0.1"