@justanarthur/payload-plugin-translator 1.3.20 → 3.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/README.md +132 -215
  2. package/dist/client.css +41 -0
  3. package/dist/client.d.ts +6 -0
  4. package/dist/client.js +320 -0
  5. package/dist/index.d.ts +63 -11
  6. package/dist/index.js +275 -82
  7. package/dist/jobs.d.ts +50 -0
  8. package/dist/jobs.js +28 -0
  9. package/dist/resolvers/copy.d.ts +19 -3
  10. package/dist/resolvers/copy.js +9 -13
  11. package/dist/resolvers/google.d.ts +23 -11
  12. package/dist/resolvers/google.js +10 -46
  13. package/dist/resolvers/libreTranslate.d.ts +23 -15
  14. package/dist/resolvers/libreTranslate.js +10 -47
  15. package/dist/resolvers/openAI.d.ts +29 -21
  16. package/dist/resolvers/openAI.js +9 -134
  17. package/dist/resolvers/types.d.ts +14 -16
  18. package/dist/resolvers/types.js +0 -3
  19. package/dist/shared/chunk-97ktc51q.js +15 -0
  20. package/dist/shared/chunk-ecnph6hw.js +205 -0
  21. package/dist/shared/chunk-frnemj69.js +6 -0
  22. package/dist/shared/chunk-fsveh29m.js +55 -0
  23. package/dist/shared/chunk-q51q8rd2.js +855 -0
  24. package/dist/shared/chunk-zhrw0jnz.js +57 -0
  25. package/dist/types.d.ts +32 -22
  26. package/dist/types.js +0 -3
  27. package/package.json +89 -63
  28. package/dist/client/api/index.d.ts +0 -8
  29. package/dist/client/api/index.d.ts.map +0 -1
  30. package/dist/client/api/index.js +0 -28
  31. package/dist/client/api/index.js.map +0 -1
  32. package/dist/client/components/CustomButton/CustomButtonWithTranslator.d.ts +0 -5
  33. package/dist/client/components/CustomButton/CustomButtonWithTranslator.d.ts.map +0 -1
  34. package/dist/client/components/CustomButton/CustomButtonWithTranslator.js +0 -28
  35. package/dist/client/components/CustomButton/CustomButtonWithTranslator.js.map +0 -1
  36. package/dist/client/components/CustomButton/index.d.ts +0 -3
  37. package/dist/client/components/CustomButton/index.d.ts.map +0 -1
  38. package/dist/client/components/CustomButton/index.js +0 -10
  39. package/dist/client/components/CustomButton/index.js.map +0 -1
  40. package/dist/client/components/CustomButton/styles.scss +0 -5
  41. package/dist/client/components/LocaleLabel/LocaleLabel.d.ts +0 -5
  42. package/dist/client/components/LocaleLabel/LocaleLabel.d.ts.map +0 -1
  43. package/dist/client/components/LocaleLabel/LocaleLabel.js +0 -28
  44. package/dist/client/components/LocaleLabel/LocaleLabel.js.map +0 -1
  45. package/dist/client/components/LocaleLabel/index.d.ts +0 -2
  46. package/dist/client/components/LocaleLabel/index.d.ts.map +0 -1
  47. package/dist/client/components/LocaleLabel/index.js +0 -3
  48. package/dist/client/components/LocaleLabel/index.js.map +0 -1
  49. package/dist/client/components/ResolverButton/ResolverButton.d.ts +0 -5
  50. package/dist/client/components/ResolverButton/ResolverButton.d.ts.map +0 -1
  51. package/dist/client/components/ResolverButton/ResolverButton.js +0 -16
  52. package/dist/client/components/ResolverButton/ResolverButton.js.map +0 -1
  53. package/dist/client/components/ResolverButton/index.d.ts +0 -2
  54. package/dist/client/components/ResolverButton/index.d.ts.map +0 -1
  55. package/dist/client/components/ResolverButton/index.js +0 -3
  56. package/dist/client/components/ResolverButton/index.js.map +0 -1
  57. package/dist/client/components/TranslatorModal/Content.d.ts +0 -2
  58. package/dist/client/components/TranslatorModal/Content.d.ts.map +0 -1
  59. package/dist/client/components/TranslatorModal/Content.js +0 -60
  60. package/dist/client/components/TranslatorModal/Content.js.map +0 -1
  61. package/dist/client/components/TranslatorModal/TranslatorModal.d.ts +0 -3
  62. package/dist/client/components/TranslatorModal/TranslatorModal.d.ts.map +0 -1
  63. package/dist/client/components/TranslatorModal/TranslatorModal.js +0 -26
  64. package/dist/client/components/TranslatorModal/TranslatorModal.js.map +0 -1
  65. package/dist/client/components/TranslatorModal/index.d.ts +0 -2
  66. package/dist/client/components/TranslatorModal/index.d.ts.map +0 -1
  67. package/dist/client/components/TranslatorModal/index.js +0 -3
  68. package/dist/client/components/TranslatorModal/index.js.map +0 -1
  69. package/dist/client/components/TranslatorModal/styles.scss +0 -76
  70. package/dist/client/providers/Translator/TranslatorProvider.d.ts +0 -5
  71. package/dist/client/providers/Translator/TranslatorProvider.d.ts.map +0 -1
  72. package/dist/client/providers/Translator/TranslatorProvider.js +0 -109
  73. package/dist/client/providers/Translator/TranslatorProvider.js.map +0 -1
  74. package/dist/client/providers/Translator/context.d.ts +0 -21
  75. package/dist/client/providers/Translator/context.d.ts.map +0 -1
  76. package/dist/client/providers/Translator/context.js +0 -9
  77. package/dist/client/providers/Translator/context.js.map +0 -1
  78. package/dist/exports/client.d.ts +0 -2
  79. package/dist/exports/client.d.ts.map +0 -1
  80. package/dist/exports/client.js +0 -3
  81. package/dist/exports/client.js.map +0 -1
  82. package/dist/i18n-translations.d.ts +0 -87
  83. package/dist/i18n-translations.d.ts.map +0 -1
  84. package/dist/i18n-translations.js +0 -88
  85. package/dist/i18n-translations.js.map +0 -1
  86. package/dist/index.d.ts.map +0 -1
  87. package/dist/index.js.map +0 -1
  88. package/dist/resolvers/copy.d.ts.map +0 -1
  89. package/dist/resolvers/copy.js.map +0 -1
  90. package/dist/resolvers/google.d.ts.map +0 -1
  91. package/dist/resolvers/google.js.map +0 -1
  92. package/dist/resolvers/libreTranslate.d.ts.map +0 -1
  93. package/dist/resolvers/libreTranslate.js.map +0 -1
  94. package/dist/resolvers/openAI.d.ts.map +0 -1
  95. package/dist/resolvers/openAI.js.map +0 -1
  96. package/dist/resolvers/types.d.ts.map +0 -1
  97. package/dist/resolvers/types.js.map +0 -1
  98. package/dist/translate/endpoint.d.ts +0 -3
  99. package/dist/translate/endpoint.d.ts.map +0 -1
  100. package/dist/translate/endpoint.js +0 -23
  101. package/dist/translate/endpoint.js.map +0 -1
  102. package/dist/translate/findEntityWithConfig.d.ts +0 -16
  103. package/dist/translate/findEntityWithConfig.d.ts.map +0 -1
  104. package/dist/translate/findEntityWithConfig.js +0 -34
  105. package/dist/translate/findEntityWithConfig.js.map +0 -1
  106. package/dist/translate/operation.d.ts +0 -9
  107. package/dist/translate/operation.d.ts.map +0 -1
  108. package/dist/translate/operation.js +0 -78
  109. package/dist/translate/operation.js.map +0 -1
  110. package/dist/translate/traverseFields.d.ts +0 -17
  111. package/dist/translate/traverseFields.d.ts.map +0 -1
  112. package/dist/translate/traverseFields.js +0 -233
  113. package/dist/translate/traverseFields.js.map +0 -1
  114. package/dist/translate/traverseRichText.d.ts +0 -10
  115. package/dist/translate/traverseRichText.d.ts.map +0 -1
  116. package/dist/translate/traverseRichText.js +0 -24
  117. package/dist/translate/traverseRichText.js.map +0 -1
  118. package/dist/translate/types.d.ts +0 -27
  119. package/dist/translate/types.d.ts.map +0 -1
  120. package/dist/translate/types.js +0 -3
  121. package/dist/translate/types.js.map +0 -1
  122. package/dist/translate/updateEntity.d.ts +0 -14
  123. package/dist/translate/updateEntity.d.ts.map +0 -1
  124. package/dist/translate/updateEntity.js +0 -26
  125. package/dist/translate/updateEntity.js.map +0 -1
  126. package/dist/types.d.ts.map +0 -1
  127. package/dist/types.js.map +0 -1
  128. package/dist/utils/chunkArray.d.ts +0 -2
  129. package/dist/utils/chunkArray.d.ts.map +0 -1
  130. package/dist/utils/chunkArray.js +0 -7
  131. package/dist/utils/chunkArray.js.map +0 -1
  132. package/dist/utils/isEmpty.d.ts +0 -2
  133. package/dist/utils/isEmpty.d.ts.map +0 -1
  134. package/dist/utils/isEmpty.js +0 -8
  135. package/dist/utils/isEmpty.js.map +0 -1
package/dist/client.js ADDED
@@ -0,0 +1,320 @@
1
+ "use client";
2
+ // src/client/components/CustomButton/CustomButtonWithTranslator.tsx
3
+ import { PublishButton, SaveButton, useConfig as useConfig2, useDocumentInfo as useDocumentInfo2 } from "@payloadcms/ui";
4
+
5
+ // src/client/providers/Translator/TranslatorProvider.tsx
6
+ import {
7
+ toast,
8
+ useAllFormFields,
9
+ useConfig,
10
+ useDocumentInfo,
11
+ useForm,
12
+ useLocale,
13
+ useModal,
14
+ useServerFunctions,
15
+ useTranslation
16
+ } from "@payloadcms/ui";
17
+ import { reduceFieldsToValues } from "payload/shared";
18
+ import { useEffect, useMemo, useState } from "react";
19
+
20
+ // src/client/api/index.ts
21
+ var createClient = ({ api, serverURL }) => {
22
+ const translate = async (args) => {
23
+ try {
24
+ const response = await fetch(`${serverURL}${api}/translator/translate`, {
25
+ body: JSON.stringify(args),
26
+ credentials: "include",
27
+ headers: {
28
+ "Content-Type": "application/json"
29
+ },
30
+ method: "POST"
31
+ });
32
+ if (!response.ok)
33
+ return { success: false };
34
+ return response.json();
35
+ } catch (e) {
36
+ if (e instanceof Error)
37
+ console.error(e.message);
38
+ return { success: false };
39
+ }
40
+ };
41
+ return {
42
+ translate
43
+ };
44
+ };
45
+
46
+ // src/client/providers/Translator/context.ts
47
+ import { createContext, useContext } from "react";
48
+ var TranslatorContext = createContext(null);
49
+ var useTranslator = () => {
50
+ const context = useContext(TranslatorContext);
51
+ if (context === null)
52
+ throw new Error("useTranslator must be used within TranslatorProvider");
53
+ return context;
54
+ };
55
+
56
+ // src/client/providers/Translator/TranslatorProvider.tsx
57
+ import { jsx } from "react/jsx-runtime";
58
+ var modalSlug = "translator-modal";
59
+ var TranslatorProvider = ({ children }) => {
60
+ const [resolver, setResolver] = useState(null);
61
+ const [data, dispatch] = useAllFormFields();
62
+ const { getFormState } = useServerFunctions();
63
+ const { collectionSlug, getDocPreferences, globalSlug, id } = useDocumentInfo();
64
+ const { setModified } = useForm();
65
+ const modal = useModal();
66
+ const { t } = useTranslation();
67
+ const resolverT = (key) => {
68
+ if (!resolver)
69
+ return "";
70
+ return t(`plugin-translator:resolver_${resolver}_${key}`);
71
+ };
72
+ const locale = useLocale();
73
+ const {
74
+ config: {
75
+ admin: { custom },
76
+ localization,
77
+ routes: { api },
78
+ serverURL
79
+ }
80
+ } = useConfig();
81
+ const apiClient = createClient({ api, serverURL });
82
+ const resolverConfig = useMemo(() => {
83
+ if (!resolver)
84
+ return null;
85
+ const resolvers = custom?.translator?.resolvers || undefined;
86
+ if (!resolvers)
87
+ return null;
88
+ const resolverConfig2 = resolvers.find((each) => each.key === resolver);
89
+ return resolverConfig2 ?? null;
90
+ }, [custom, resolver]);
91
+ if (!localization)
92
+ throw new Error("Localization config is not provided and PluginTranslator is used");
93
+ const localesOptions = localization.locales.filter((each) => each.code !== locale.code);
94
+ const [localeToTranslateFrom, setLocaleToTranslateFrom] = useState("");
95
+ useEffect(() => {
96
+ const defaultFromOptions = localesOptions.find((each) => localization.defaultLocale === each.code);
97
+ if (defaultFromOptions)
98
+ setLocaleToTranslateFrom(defaultFromOptions.code);
99
+ setLocaleToTranslateFrom(localesOptions[0].code);
100
+ }, [locale, localesOptions, localization.defaultLocale]);
101
+ const closeTranslator = () => modal.closeModal(modalSlug);
102
+ const submit = async ({ emptyOnly }) => {
103
+ if (!resolver)
104
+ return;
105
+ const args = {
106
+ collectionSlug,
107
+ data: reduceFieldsToValues(data, true),
108
+ emptyOnly,
109
+ globalSlug,
110
+ id: id === null ? undefined : id,
111
+ locale: locale.code,
112
+ localeFrom: localeToTranslateFrom,
113
+ resolver
114
+ };
115
+ const result = await apiClient.translate(args);
116
+ if (!result.success) {
117
+ toast.error(resolverT("errorMessage"));
118
+ return;
119
+ }
120
+ const { state } = await getFormState({
121
+ collectionSlug,
122
+ data: result.translatedData,
123
+ docPermissions: {
124
+ fields: true,
125
+ update: true
126
+ },
127
+ docPreferences: await getDocPreferences(),
128
+ globalSlug,
129
+ locale: locale.code,
130
+ operation: "update",
131
+ renderAllFields: true,
132
+ schemaPath: collectionSlug || globalSlug || ""
133
+ });
134
+ if (state) {
135
+ dispatch({
136
+ state,
137
+ type: "REPLACE_STATE"
138
+ });
139
+ setModified(true);
140
+ toast.success(resolverT("successMessage"));
141
+ }
142
+ closeTranslator();
143
+ };
144
+ return /* @__PURE__ */ jsx(TranslatorContext.Provider, {
145
+ value: {
146
+ closeTranslator,
147
+ localeToTranslateFrom,
148
+ localesOptions,
149
+ modalSlug,
150
+ openTranslator: ({ resolverKey }) => {
151
+ setResolver(resolverKey);
152
+ modal.openModal(modalSlug);
153
+ },
154
+ resolver: resolverConfig,
155
+ resolverT,
156
+ setLocaleToTranslateFrom,
157
+ submit
158
+ },
159
+ children
160
+ });
161
+ };
162
+
163
+ // src/client/components/ResolverButton/ResolverButton.tsx
164
+ import { Button, useTranslation as useTranslation2 } from "@payloadcms/ui";
165
+ import { jsx as jsx2 } from "react/jsx-runtime";
166
+ var ResolverButton = ({
167
+ resolver: { key: resolverKey }
168
+ }) => {
169
+ const { openTranslator } = useTranslator();
170
+ const { t } = useTranslation2();
171
+ const handleClick = () => openTranslator({ resolverKey });
172
+ return /* @__PURE__ */ jsx2(Button, {
173
+ onClick: handleClick,
174
+ children: t(`plugin-translator:resolver_${resolverKey}_buttonLabel`)
175
+ });
176
+ };
177
+ // src/client/components/TranslatorModal/TranslatorModal.tsx
178
+ import { Modal } from "@payloadcms/ui";
179
+
180
+ // src/client/components/TranslatorModal/Content.tsx
181
+ import { getTranslation as getTranslation2 } from "@payloadcms/translations";
182
+ import { Button as Button2, Popup, PopupList, useTranslation as useTranslation4 } from "@payloadcms/ui";
183
+
184
+ // src/client/components/LocaleLabel/LocaleLabel.tsx
185
+ import { getTranslation } from "@payloadcms/translations";
186
+ import { ChevronIcon, useTranslation as useTranslation3 } from "@payloadcms/ui";
187
+ import { jsx as jsx3, jsxs } from "react/jsx-runtime";
188
+ var baseClass = "localizer-button";
189
+ var LocaleLabel = ({ locale }) => {
190
+ const { i18n, t } = useTranslation3();
191
+ return /* @__PURE__ */ jsxs("div", {
192
+ "aria-label": t("general:locale"),
193
+ className: baseClass,
194
+ children: [
195
+ /* @__PURE__ */ jsx3("div", {
196
+ className: `${baseClass}__label`,
197
+ children: `${t("general:locale")}:`
198
+ }),
199
+ "  ",
200
+ /* @__PURE__ */ jsx3("span", {
201
+ className: `${baseClass}__current-label`,
202
+ children: `${getTranslation(locale.label, i18n)}`
203
+ }),
204
+ " ",
205
+ /* @__PURE__ */ jsx3(ChevronIcon, {
206
+ className: `${baseClass}__chevron`
207
+ })
208
+ ]
209
+ });
210
+ };
211
+ // src/client/components/TranslatorModal/Content.tsx
212
+ import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
213
+ var Content = () => {
214
+ const {
215
+ localeToTranslateFrom: localeCodeToTranslateFrom,
216
+ localesOptions,
217
+ resolverT,
218
+ setLocaleToTranslateFrom,
219
+ submit
220
+ } = useTranslator();
221
+ const { i18n } = useTranslation4();
222
+ const localeToTranslateFrom = localesOptions.find((each) => each.code === localeCodeToTranslateFrom);
223
+ return /* @__PURE__ */ jsxs2("div", {
224
+ className: "translator__content",
225
+ children: [
226
+ /* @__PURE__ */ jsx4("h2", {
227
+ children: resolverT("modalTitle")
228
+ }),
229
+ localeToTranslateFrom && /* @__PURE__ */ jsx4(Popup, {
230
+ button: /* @__PURE__ */ jsx4(LocaleLabel, {
231
+ locale: localeToTranslateFrom
232
+ }),
233
+ horizontalAlign: "center",
234
+ render: ({ close }) => /* @__PURE__ */ jsx4(PopupList.ButtonGroup, {
235
+ children: localesOptions.map((option) => {
236
+ const label = getTranslation2(option.label, i18n);
237
+ return /* @__PURE__ */ jsxs2(PopupList.Button, {
238
+ active: option.code === localeCodeToTranslateFrom,
239
+ onClick: () => {
240
+ setLocaleToTranslateFrom(option.code);
241
+ close();
242
+ },
243
+ children: [
244
+ label,
245
+ label !== option.code && ` (${option.code})`
246
+ ]
247
+ }, option.code);
248
+ })
249
+ }),
250
+ verticalAlign: "bottom"
251
+ }),
252
+ /* @__PURE__ */ jsxs2("div", {
253
+ className: "translator__buttons",
254
+ children: [
255
+ /* @__PURE__ */ jsx4(Button2, {
256
+ onClick: () => submit({ emptyOnly: false }),
257
+ children: resolverT("submitButtonLabelFull")
258
+ }),
259
+ /* @__PURE__ */ jsx4(Button2, {
260
+ onClick: () => submit({ emptyOnly: true }),
261
+ children: resolverT("submitButtonLabelEmpty")
262
+ })
263
+ ]
264
+ })
265
+ ]
266
+ });
267
+ };
268
+
269
+ // src/client/components/TranslatorModal/TranslatorModal.tsx
270
+ import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
271
+ var TranslatorModal = () => {
272
+ const { closeTranslator, modalSlug: modalSlug2, resolver } = useTranslator();
273
+ if (!resolver)
274
+ return;
275
+ return /* @__PURE__ */ jsx5(Modal, {
276
+ className: "translator__modal",
277
+ slug: modalSlug2,
278
+ children: /* @__PURE__ */ jsxs3("div", {
279
+ className: "translator__wrapper",
280
+ children: [
281
+ /* @__PURE__ */ jsx5("button", {
282
+ "aria-label": "Close",
283
+ className: "translator__close",
284
+ onClick: closeTranslator
285
+ }),
286
+ /* @__PURE__ */ jsx5(Content, {})
287
+ ]
288
+ })
289
+ });
290
+ };
291
+ // src/client/components/CustomButton/CustomButtonWithTranslator.tsx
292
+ import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
293
+
294
+ var CustomButtonWithTranslator = ({ type }) => {
295
+ const { config } = useConfig2();
296
+ const DefaultButton = type === "publish" ? PublishButton : SaveButton;
297
+ const { globalSlug, id } = useDocumentInfo2();
298
+ const resolvers = config.admin?.custom?.translator?.resolvers ?? [];
299
+ if (!id && !globalSlug)
300
+ return /* @__PURE__ */ jsx6(DefaultButton, {});
301
+ return /* @__PURE__ */ jsx6(TranslatorProvider, {
302
+ children: /* @__PURE__ */ jsxs4("div", {
303
+ className: "translator__custom-save-button",
304
+ children: [
305
+ /* @__PURE__ */ jsx6(TranslatorModal, {}),
306
+ resolvers.map((resolver) => /* @__PURE__ */ jsx6(ResolverButton, {
307
+ resolver
308
+ }, resolver.key)),
309
+ /* @__PURE__ */ jsx6(DefaultButton, {})
310
+ ]
311
+ })
312
+ });
313
+ };
314
+
315
+ // src/exports/client.ts
316
+ var client_default = CustomButtonWithTranslator;
317
+ export {
318
+ client_default as default,
319
+ CustomButtonWithTranslator
320
+ };
package/dist/index.d.ts CHANGED
@@ -1,11 +1,63 @@
1
- import type { Plugin } from 'payload';
2
- import { translateOperation } from './translate/operation';
3
- import type { TranslatorConfig } from './types';
4
- export { copyResolver } from './resolvers/copy';
5
- export { googleResolver } from './resolvers/google';
6
- export { libreResolver } from './resolvers/libreTranslate';
7
- export { openAIResolver } from './resolvers/openAI';
8
- export * from './resolvers/types';
9
- export { translateOperation };
10
- export declare const translator: (pluginConfig: TranslatorConfig) => Plugin;
11
- //# sourceMappingURL=index.d.ts.map
1
+ import { Payload, PayloadRequest as PayloadRequest2 } from "payload";
2
+ import { TypeWithID } from "payload";
3
+ type Doc = Record<string, unknown> & TypeWithID;
4
+ type TranslateArgs = {
5
+ collectionSlug?: string;
6
+ data?: Record<string, any>;
7
+ emptyOnly?: boolean;
8
+ globalSlug?: string;
9
+ id?: number | string;
10
+ locale: string;
11
+ localeFrom: string;
12
+ overrideAccess?: boolean;
13
+ resolver: string;
14
+ update?: boolean;
15
+ };
16
+ type TranslateResult = {
17
+ success: false;
18
+ } | {
19
+ success: true;
20
+ translatedData: Record<string, any>;
21
+ dataFrom: Doc;
22
+ };
23
+ type TranslateOperationArgs = ({
24
+ payload: Payload;
25
+ } | {
26
+ req: PayloadRequest2;
27
+ }) & TranslateArgs;
28
+ declare const translateOperation: (args: TranslateOperationArgs) => Promise<TranslateResult>;
29
+ import { Plugin } from "payload";
30
+ import { CollectionSlug, GlobalSlug } from "payload";
31
+ import { PayloadRequest as PayloadRequest3 } from "payload";
32
+ type TranslateResolverArgs = {
33
+ localeFrom: string;
34
+ localeTo: string;
35
+ req: PayloadRequest3;
36
+ texts: string[];
37
+ };
38
+ type TranslateResolverResponse = {
39
+ success: false;
40
+ } | {
41
+ success: true;
42
+ translatedTexts: string[];
43
+ };
44
+ type TranslateResolver = {
45
+ key: string;
46
+ resolve: (args: TranslateResolverArgs) => Promise<TranslateResolverResponse> | TranslateResolverResponse;
47
+ };
48
+ type TranslatorConfig = {
49
+ collections: CollectionSlug[];
50
+ disabled?: boolean;
51
+ globals: GlobalSlug[];
52
+ resolvers: TranslateResolver[];
53
+ autoTranslate?: boolean;
54
+ _options?: {
55
+ additionalTraverseRichText?: (args: {
56
+ onText: (siblingData: Record<string, unknown>, attribute?: string) => void;
57
+ root: Record<string, unknown>;
58
+ siblingData?: Record<string, unknown>;
59
+ }) => void;
60
+ };
61
+ };
62
+ declare const translator: (pluginConfig: TranslatorConfig) => Plugin;
63
+ export { translator, translateOperation, translator as default, TranslateResolverResponse, TranslateResolverArgs, TranslateResolver };