@extravirgin/payload-enchants-translator 1.0.0

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 (124) hide show
  1. package/README.md +215 -0
  2. package/dist/client/api/index.d.ts +8 -0
  3. package/dist/client/api/index.d.ts.map +1 -0
  4. package/dist/client/api/index.js +28 -0
  5. package/dist/client/api/index.js.map +1 -0
  6. package/dist/client/components/CustomButton/CustomButtonWithTranslator.d.ts +5 -0
  7. package/dist/client/components/CustomButton/CustomButtonWithTranslator.d.ts.map +1 -0
  8. package/dist/client/components/CustomButton/CustomButtonWithTranslator.js +28 -0
  9. package/dist/client/components/CustomButton/CustomButtonWithTranslator.js.map +1 -0
  10. package/dist/client/components/CustomButton/index.d.ts +3 -0
  11. package/dist/client/components/CustomButton/index.d.ts.map +1 -0
  12. package/dist/client/components/CustomButton/index.js +10 -0
  13. package/dist/client/components/CustomButton/index.js.map +1 -0
  14. package/dist/client/components/CustomButton/styles.scss +5 -0
  15. package/dist/client/components/LocaleLabel/LocaleLabel.d.ts +5 -0
  16. package/dist/client/components/LocaleLabel/LocaleLabel.d.ts.map +1 -0
  17. package/dist/client/components/LocaleLabel/LocaleLabel.js +28 -0
  18. package/dist/client/components/LocaleLabel/LocaleLabel.js.map +1 -0
  19. package/dist/client/components/LocaleLabel/index.d.ts +2 -0
  20. package/dist/client/components/LocaleLabel/index.d.ts.map +1 -0
  21. package/dist/client/components/LocaleLabel/index.js +3 -0
  22. package/dist/client/components/LocaleLabel/index.js.map +1 -0
  23. package/dist/client/components/ResolverButton/ResolverButton.d.ts +5 -0
  24. package/dist/client/components/ResolverButton/ResolverButton.d.ts.map +1 -0
  25. package/dist/client/components/ResolverButton/ResolverButton.js +16 -0
  26. package/dist/client/components/ResolverButton/ResolverButton.js.map +1 -0
  27. package/dist/client/components/ResolverButton/index.d.ts +2 -0
  28. package/dist/client/components/ResolverButton/index.d.ts.map +1 -0
  29. package/dist/client/components/ResolverButton/index.js +3 -0
  30. package/dist/client/components/ResolverButton/index.js.map +1 -0
  31. package/dist/client/components/TranslatorModal/Content.d.ts +2 -0
  32. package/dist/client/components/TranslatorModal/Content.d.ts.map +1 -0
  33. package/dist/client/components/TranslatorModal/Content.js +60 -0
  34. package/dist/client/components/TranslatorModal/Content.js.map +1 -0
  35. package/dist/client/components/TranslatorModal/TranslatorModal.d.ts +3 -0
  36. package/dist/client/components/TranslatorModal/TranslatorModal.d.ts.map +1 -0
  37. package/dist/client/components/TranslatorModal/TranslatorModal.js +26 -0
  38. package/dist/client/components/TranslatorModal/TranslatorModal.js.map +1 -0
  39. package/dist/client/components/TranslatorModal/index.d.ts +2 -0
  40. package/dist/client/components/TranslatorModal/index.d.ts.map +1 -0
  41. package/dist/client/components/TranslatorModal/index.js +3 -0
  42. package/dist/client/components/TranslatorModal/index.js.map +1 -0
  43. package/dist/client/components/TranslatorModal/styles.scss +76 -0
  44. package/dist/client/providers/Translator/TranslatorProvider.d.ts +5 -0
  45. package/dist/client/providers/Translator/TranslatorProvider.d.ts.map +1 -0
  46. package/dist/client/providers/Translator/TranslatorProvider.js +114 -0
  47. package/dist/client/providers/Translator/TranslatorProvider.js.map +1 -0
  48. package/dist/client/providers/Translator/context.d.ts +21 -0
  49. package/dist/client/providers/Translator/context.d.ts.map +1 -0
  50. package/dist/client/providers/Translator/context.js +9 -0
  51. package/dist/client/providers/Translator/context.js.map +1 -0
  52. package/dist/exports/client.d.ts +2 -0
  53. package/dist/exports/client.d.ts.map +1 -0
  54. package/dist/exports/client.js +3 -0
  55. package/dist/exports/client.js.map +1 -0
  56. package/dist/i18n-translations.d.ts +87 -0
  57. package/dist/i18n-translations.d.ts.map +1 -0
  58. package/dist/i18n-translations.js +88 -0
  59. package/dist/i18n-translations.js.map +1 -0
  60. package/dist/index.d.ts +11 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +87 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/resolvers/copy.d.ts +3 -0
  65. package/dist/resolvers/copy.d.ts.map +1 -0
  66. package/dist/resolvers/copy.js +14 -0
  67. package/dist/resolvers/copy.js.map +1 -0
  68. package/dist/resolvers/google.d.ts +11 -0
  69. package/dist/resolvers/google.d.ts.map +1 -0
  70. package/dist/resolvers/google.js +47 -0
  71. package/dist/resolvers/google.js.map +1 -0
  72. package/dist/resolvers/libreTranslate.d.ts +16 -0
  73. package/dist/resolvers/libreTranslate.d.ts.map +1 -0
  74. package/dist/resolvers/libreTranslate.js +48 -0
  75. package/dist/resolvers/libreTranslate.js.map +1 -0
  76. package/dist/resolvers/openAI.d.ts +22 -0
  77. package/dist/resolvers/openAI.d.ts.map +1 -0
  78. package/dist/resolvers/openAI.js +100 -0
  79. package/dist/resolvers/openAI.js.map +1 -0
  80. package/dist/resolvers/types.d.ts +20 -0
  81. package/dist/resolvers/types.d.ts.map +1 -0
  82. package/dist/resolvers/types.js +3 -0
  83. package/dist/resolvers/types.js.map +1 -0
  84. package/dist/translate/endpoint.d.ts +3 -0
  85. package/dist/translate/endpoint.d.ts.map +1 -0
  86. package/dist/translate/endpoint.js +23 -0
  87. package/dist/translate/endpoint.js.map +1 -0
  88. package/dist/translate/findEntityWithConfig.d.ts +15 -0
  89. package/dist/translate/findEntityWithConfig.d.ts.map +1 -0
  90. package/dist/translate/findEntityWithConfig.js +35 -0
  91. package/dist/translate/findEntityWithConfig.js.map +1 -0
  92. package/dist/translate/operation.d.ts +9 -0
  93. package/dist/translate/operation.d.ts.map +1 -0
  94. package/dist/translate/operation.js +76 -0
  95. package/dist/translate/operation.js.map +1 -0
  96. package/dist/translate/traverseFields.d.ts +13 -0
  97. package/dist/translate/traverseFields.d.ts.map +1 -0
  98. package/dist/translate/traverseFields.js +233 -0
  99. package/dist/translate/traverseFields.js.map +1 -0
  100. package/dist/translate/traverseRichText.d.ts +6 -0
  101. package/dist/translate/traverseRichText.d.ts.map +1 -0
  102. package/dist/translate/traverseRichText.js +17 -0
  103. package/dist/translate/traverseRichText.js.map +1 -0
  104. package/dist/translate/types.d.ts +25 -0
  105. package/dist/translate/types.d.ts.map +1 -0
  106. package/dist/translate/types.js +3 -0
  107. package/dist/translate/types.js.map +1 -0
  108. package/dist/translate/updateEntity.d.ts +14 -0
  109. package/dist/translate/updateEntity.d.ts.map +1 -0
  110. package/dist/translate/updateEntity.js +26 -0
  111. package/dist/translate/updateEntity.js.map +1 -0
  112. package/dist/types.d.ts +21 -0
  113. package/dist/types.d.ts.map +1 -0
  114. package/dist/types.js +3 -0
  115. package/dist/types.js.map +1 -0
  116. package/dist/utils/chunkArray.d.ts +2 -0
  117. package/dist/utils/chunkArray.d.ts.map +1 -0
  118. package/dist/utils/chunkArray.js +7 -0
  119. package/dist/utils/chunkArray.js.map +1 -0
  120. package/dist/utils/isEmpty.d.ts +2 -0
  121. package/dist/utils/isEmpty.d.ts.map +1 -0
  122. package/dist/utils/isEmpty.js +8 -0
  123. package/dist/utils/isEmpty.js.map +1 -0
  124. package/package.json +119 -0
@@ -0,0 +1,76 @@
1
+ .translator {
2
+ &__modal {
3
+ display: flex;
4
+ position: relative;
5
+ justify-content: center;
6
+ align-items: center;
7
+ width: fit-content;
8
+ height: fit-content;
9
+ }
10
+
11
+ &__wrapper {
12
+ display: flex;
13
+ position: relative;
14
+ flex-direction: column;
15
+ gap: var(--base);
16
+ z-index: 1;
17
+ background: var(--theme-elevation-50);
18
+ padding: 50px;
19
+ }
20
+
21
+ &__content {
22
+ display: flex;
23
+ flex-direction: column;
24
+ align-items: center;
25
+ gap: var(--base);
26
+ max-width: 400px;
27
+
28
+ h2 {
29
+ margin: 0;
30
+ text-align: center;
31
+ }
32
+ }
33
+
34
+ &__buttons {
35
+ display: flex;
36
+ justify-content: center;
37
+ gap: 10px;
38
+ width: 100%;
39
+
40
+ button {
41
+ margin: 0;
42
+ }
43
+ }
44
+
45
+ &__close {
46
+ position: absolute;
47
+ top: 10px;
48
+ right: 10px;
49
+ transition: 0.25s;
50
+ cursor: pointer;
51
+ width: 32px;
52
+ height: 32px;
53
+
54
+ &:hover {
55
+ opacity: 0.6;
56
+ }
57
+
58
+ &:before,
59
+ &:after {
60
+ position: absolute;
61
+ left: 15px;
62
+ background-color: var(--theme-elevation-800);
63
+ width: 2px;
64
+ height: 33px;
65
+ content: ' ';
66
+ }
67
+
68
+ &:before {
69
+ transform: rotate(45deg);
70
+ }
71
+
72
+ &:after {
73
+ transform: rotate(-45deg);
74
+ }
75
+ }
76
+ }
@@ -0,0 +1,5 @@
1
+ import { type ReactNode } from 'react';
2
+ export declare const TranslatorProvider: ({ children }: {
3
+ children: ReactNode;
4
+ }) => import("react").JSX.Element;
5
+ //# sourceMappingURL=TranslatorProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TranslatorProvider.d.ts","sourceRoot":"","sources":["../../../../src/client/providers/Translator/TranslatorProvider.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,SAAS,EAAgC,MAAM,OAAO,CAAC;AASrE,eAAO,MAAM,kBAAkB,iBAAkB;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,gCAkJvE,CAAC"}
@@ -0,0 +1,114 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { toast, useAllFormFields, useConfig, useDocumentInfo, useForm, useLocale, useModal, useServerFunctions, useTranslation } from '@payloadcms/ui';
3
+ import { reduceFieldsToValues } from 'payload/shared';
4
+ import { useEffect, useMemo, useState } from 'react';
5
+ import { createClient } from '../../api';
6
+ import { TranslatorContext } from './context';
7
+ const modalSlug = 'translator-modal';
8
+ export const TranslatorProvider = ({ children })=>{
9
+ const [resolver, setResolver] = useState(null);
10
+ const [data, dispatch] = useAllFormFields();
11
+ const { getFormState } = useServerFunctions();
12
+ const { collectionSlug, getDocPreferences, globalSlug, id } = useDocumentInfo();
13
+ const { setModified } = useForm();
14
+ const modal = useModal();
15
+ const { t } = useTranslation();
16
+ const resolverT = (key)=>{
17
+ if (!resolver) return '';
18
+ return t(`plugin-translator:resolver_${resolver}_${key}`);
19
+ };
20
+ const locale = useLocale();
21
+ const { config: { admin: { custom }, localization, routes: { api }, serverURL } } = useConfig();
22
+ const apiClient = createClient({
23
+ api,
24
+ serverURL
25
+ });
26
+ const resolverConfig = useMemo(()=>{
27
+ if (!resolver) return null;
28
+ const resolvers = custom?.translator?.resolvers || undefined;
29
+ if (!resolvers) return null;
30
+ const resolverConfig = resolvers.find((each)=>each.key === resolver);
31
+ return resolverConfig ?? null;
32
+ }, [
33
+ custom,
34
+ resolver
35
+ ]);
36
+ if (!localization) throw new Error('Localization config is not provided and PluginTranslator is used');
37
+ const localesOptions = localization.locales.filter((each)=>each.code !== locale.code);
38
+ const [localeToTranslateFrom, setLocaleToTranslateFrom] = useState('');
39
+ useEffect(()=>{
40
+ const localeToTranslateFromExists = localesOptions.find((each)=>localeToTranslateFrom === each.code);
41
+ if (localeToTranslateFrom && localeToTranslateFromExists) return;
42
+ const defaultFromOptions = localesOptions.find((each)=>localization.defaultLocale === each.code);
43
+ if (defaultFromOptions) {
44
+ setLocaleToTranslateFrom(defaultFromOptions.code);
45
+ return;
46
+ }
47
+ setLocaleToTranslateFrom(localesOptions[0].code);
48
+ }, [
49
+ locale,
50
+ localesOptions,
51
+ localization.defaultLocale
52
+ ]);
53
+ const closeTranslator = ()=>modal.closeModal(modalSlug);
54
+ const submit = async ({ emptyOnly })=>{
55
+ if (!resolver) return;
56
+ const args = {
57
+ collectionSlug,
58
+ data: reduceFieldsToValues(data, true),
59
+ emptyOnly,
60
+ globalSlug,
61
+ id: id === null ? undefined : id,
62
+ locale: locale.code,
63
+ localeFrom: localeToTranslateFrom,
64
+ resolver
65
+ };
66
+ const result = await apiClient.translate(args);
67
+ if (!result.success) {
68
+ toast.error(resolverT('errorMessage'));
69
+ return;
70
+ }
71
+ const { state } = await getFormState({
72
+ collectionSlug,
73
+ data: result.translatedData,
74
+ docPermissions: {
75
+ fields: true,
76
+ update: true
77
+ },
78
+ docPreferences: await getDocPreferences(),
79
+ globalSlug,
80
+ locale: locale.code,
81
+ operation: 'update',
82
+ renderAllFields: true,
83
+ schemaPath: collectionSlug || globalSlug || ''
84
+ });
85
+ if (state) {
86
+ dispatch({
87
+ state,
88
+ type: 'REPLACE_STATE'
89
+ });
90
+ setModified(true);
91
+ toast.success(resolverT('successMessage'));
92
+ }
93
+ closeTranslator();
94
+ };
95
+ return /*#__PURE__*/ _jsx(TranslatorContext.Provider, {
96
+ value: {
97
+ closeTranslator,
98
+ localeToTranslateFrom,
99
+ localesOptions,
100
+ modalSlug,
101
+ openTranslator: ({ resolverKey })=>{
102
+ setResolver(resolverKey);
103
+ modal.openModal(modalSlug);
104
+ },
105
+ resolver: resolverConfig,
106
+ resolverT,
107
+ setLocaleToTranslateFrom,
108
+ submit
109
+ },
110
+ children: children
111
+ });
112
+ };
113
+
114
+ //# sourceMappingURL=TranslatorProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/client/providers/Translator/TranslatorProvider.tsx"],"sourcesContent":["import {\n toast,\n useAllFormFields,\n useConfig,\n useDocumentInfo,\n useForm,\n useLocale,\n useModal,\n useServerFunctions,\n useTranslation,\n} from '@payloadcms/ui';\nimport { reduceFieldsToValues } from 'payload/shared';\nimport { type ReactNode, useEffect, useMemo, useState } from 'react';\n\nimport type { TranslateResolver } from '../../../resolvers/types';\nimport type { TranslateArgs } from '../../../translate/types';\nimport { createClient } from '../../api';\nimport { TranslatorContext } from './context';\n\nconst modalSlug = 'translator-modal';\n\nexport const TranslatorProvider = ({ children }: { children: ReactNode }) => {\n const [resolver, setResolver] = useState<null | string>(null);\n\n const [data, dispatch] = useAllFormFields();\n\n const { getFormState } = useServerFunctions();\n\n const { collectionSlug, getDocPreferences, globalSlug, id } = useDocumentInfo();\n\n const { setModified } = useForm();\n\n const modal = useModal();\n\n const { t } = useTranslation();\n\n const resolverT = (\n key:\n | 'buttonLabel'\n | 'errorMessage'\n | 'modalTitle'\n | 'submitButtonLabelEmpty'\n | 'submitButtonLabelFull'\n | 'successMessage',\n ) => {\n if (!resolver) return '';\n\n return t(`plugin-translator:resolver_${resolver}_${key}` as Parameters<typeof t>[0]);\n };\n\n const locale = useLocale();\n\n const {\n config: {\n admin: { custom },\n localization,\n routes: { api },\n serverURL,\n },\n } = useConfig();\n\n const apiClient = createClient({ api, serverURL });\n\n const resolverConfig = useMemo(() => {\n if (!resolver) return null;\n\n const resolvers = (custom?.translator?.resolvers as TranslateResolver[]) || undefined;\n\n if (!resolvers) return null;\n\n const resolverConfig = resolvers.find((each) => each.key === resolver);\n\n return resolverConfig ?? null;\n }, [custom, resolver]);\n\n if (!localization)\n throw new Error('Localization config is not provided and PluginTranslator is used');\n\n const localesOptions = localization.locales.filter((each) => each.code !== locale.code);\n\n const [localeToTranslateFrom, setLocaleToTranslateFrom] = useState<string>('');\n\n useEffect(()=>{\n const localeToTranslateFromExists = localesOptions.find((each)=>localeToTranslateFrom === each.code);\n if (localeToTranslateFrom && localeToTranslateFromExists) return;\n const defaultFromOptions = localesOptions.find((each)=>localization.defaultLocale === each.code);\n if (defaultFromOptions) {\n setLocaleToTranslateFrom(defaultFromOptions.code);\n return;\n }\n setLocaleToTranslateFrom(localesOptions[0].code);\n}, [\n locale,\n localesOptions,\n localization.defaultLocale\n]);\n\n const closeTranslator = () => modal.closeModal(modalSlug);\n\n const submit = async ({ emptyOnly }: { emptyOnly: boolean }) => {\n if (!resolver) return;\n\n const args: TranslateArgs = {\n collectionSlug,\n data: reduceFieldsToValues(data, true),\n emptyOnly,\n globalSlug,\n id: id === null ? undefined : id,\n locale: locale.code,\n localeFrom: localeToTranslateFrom,\n resolver,\n };\n\n const result = await apiClient.translate(args);\n\n if (!result.success) {\n toast.error(resolverT('errorMessage'));\n\n return;\n }\n\n const { state } = await getFormState({\n collectionSlug,\n data: result.translatedData,\n docPermissions: {\n fields: true,\n update: true,\n },\n docPreferences: await getDocPreferences(),\n globalSlug,\n locale: locale.code,\n operation: 'update',\n renderAllFields: true,\n schemaPath: collectionSlug || globalSlug || '',\n });\n\n if (state) {\n dispatch({\n state,\n type: 'REPLACE_STATE',\n });\n setModified(true);\n toast.success(resolverT('successMessage'));\n }\n closeTranslator();\n };\n\n return (\n <TranslatorContext.Provider\n value={{\n closeTranslator,\n localeToTranslateFrom,\n localesOptions,\n modalSlug,\n openTranslator: ({ resolverKey }) => {\n setResolver(resolverKey);\n modal.openModal(modalSlug);\n },\n resolver: resolverConfig,\n resolverT,\n setLocaleToTranslateFrom,\n submit,\n }}\n >\n {children}\n </TranslatorContext.Provider>\n );\n};\n"],"names":["toast","useAllFormFields","useConfig","useDocumentInfo","useForm","useLocale","useModal","useServerFunctions","useTranslation","reduceFieldsToValues","useEffect","useMemo","useState","createClient","TranslatorContext","modalSlug","TranslatorProvider","children","resolver","setResolver","data","dispatch","getFormState","collectionSlug","getDocPreferences","globalSlug","id","setModified","modal","t","resolverT","key","locale","config","admin","custom","localization","routes","api","serverURL","apiClient","resolverConfig","resolvers","translator","undefined","find","each","Error","localesOptions","locales","filter","code","localeToTranslateFrom","setLocaleToTranslateFrom","localeToTranslateFromExists","defaultFromOptions","defaultLocale","closeTranslator","closeModal","submit","emptyOnly","args","localeFrom","result","translate","success","error","state","translatedData","docPermissions","fields","update","docPreferences","operation","renderAllFields","schemaPath","type","Provider","value","openTranslator","resolverKey","openModal"],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { Locale } from 'payload';
2
+ import type { TranslateResolver } from '../../../resolvers/types';
3
+ type TranslatorContextData = {
4
+ closeTranslator: () => void;
5
+ localeToTranslateFrom: string;
6
+ localesOptions: Locale[];
7
+ modalSlug: string;
8
+ openTranslator: (args: {
9
+ resolverKey: string;
10
+ }) => void;
11
+ resolver: TranslateResolver | null;
12
+ resolverT: (key: 'buttonLabel' | 'errorMessage' | 'modalTitle' | 'submitButtonLabelEmpty' | 'submitButtonLabelFull' | 'successMessage') => string;
13
+ setLocaleToTranslateFrom: (code: string) => void;
14
+ submit: (args: {
15
+ emptyOnly: boolean;
16
+ }) => Promise<void>;
17
+ };
18
+ export declare const TranslatorContext: import("react").Context<TranslatorContextData | null>;
19
+ export declare const useTranslator: () => TranslatorContextData;
20
+ export {};
21
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../src/client/providers/Translator/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,KAAK,qBAAqB,GAAG;IAC3B,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,CAAC,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACxD,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACnC,SAAS,EAAE,CACT,GAAG,EACC,aAAa,GACb,cAAc,GACd,YAAY,GACZ,wBAAwB,GACxB,uBAAuB,GACvB,gBAAgB,KACjB,MAAM,CAAC;IACZ,wBAAwB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,MAAM,EAAE,CAAC,IAAI,EAAE;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD,CAAC;AAEF,eAAO,MAAM,iBAAiB,uDAAoD,CAAC;AAEnF,eAAO,MAAM,aAAa,6BAMzB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { createContext, useContext } from 'react';
2
+ export const TranslatorContext = createContext(null);
3
+ export const useTranslator = ()=>{
4
+ const context = useContext(TranslatorContext);
5
+ if (context === null) throw new Error('useTranslator must be used within TranslatorProvider');
6
+ return context;
7
+ };
8
+
9
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/client/providers/Translator/context.ts"],"sourcesContent":["import type { Locale } from 'payload';\nimport { createContext, useContext } from 'react';\n\nimport type { TranslateResolver } from '../../../resolvers/types';\n\ntype TranslatorContextData = {\n closeTranslator: () => void;\n localeToTranslateFrom: string;\n localesOptions: Locale[];\n modalSlug: string;\n openTranslator: (args: { resolverKey: string }) => void;\n resolver: TranslateResolver | null;\n resolverT: (\n key:\n | 'buttonLabel'\n | 'errorMessage'\n | 'modalTitle'\n | 'submitButtonLabelEmpty'\n | 'submitButtonLabelFull'\n | 'successMessage',\n ) => string;\n setLocaleToTranslateFrom: (code: string) => void;\n submit: (args: { emptyOnly: boolean }) => Promise<void>;\n};\n\nexport const TranslatorContext = createContext<TranslatorContextData | null>(null);\n\nexport const useTranslator = () => {\n const context = useContext(TranslatorContext);\n\n if (context === null) throw new Error('useTranslator must be used within TranslatorProvider');\n\n return context;\n};\n"],"names":["createContext","useContext","TranslatorContext","useTranslator","context","Error"],"mappings":"AACA,SAASA,aAAa,EAAEC,UAAU,QAAQ,QAAQ;AAwBlD,OAAO,MAAMC,oBAAoBF,cAA4C,MAAM;AAEnF,OAAO,MAAMG,gBAAgB;IAC3B,MAAMC,UAAUH,WAAWC;IAE3B,IAAIE,YAAY,MAAM,MAAM,IAAIC,MAAM;IAEtC,OAAOD;AACT,EAAE"}
@@ -0,0 +1,2 @@
1
+ export { CustomButtonWithTranslator } from '../client/components/CustomButton/CustomButtonWithTranslator';
2
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/exports/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,8DAA8D,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { CustomButtonWithTranslator } from '../client/components/CustomButton/CustomButtonWithTranslator';
2
+
3
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/exports/client.ts"],"sourcesContent":["export { CustomButtonWithTranslator } from '../client/components/CustomButton/CustomButtonWithTranslator';\n"],"names":["CustomButtonWithTranslator"],"mappings":"AAAA,SAASA,0BAA0B,QAAQ,+DAA+D"}
@@ -0,0 +1,87 @@
1
+ export declare const translations: {
2
+ en: {
3
+ 'plugin-translator': {
4
+ resolver_copy_buttonLabel: string;
5
+ resolver_copy_errorMessage: string;
6
+ resolver_copy_modalTitle: string;
7
+ resolver_copy_submitButtonLabelEmpty: string;
8
+ resolver_copy_submitButtonLabelFull: string;
9
+ resolver_copy_successMessage: string;
10
+ resolver_google_buttonLabel: string;
11
+ resolver_google_errorMessage: string;
12
+ resolver_google_modalTitle: string;
13
+ resolver_google_submitButtonLabelEmpty: string;
14
+ resolver_google_submitButtonLabelFull: string;
15
+ resolver_google_successMessage: string;
16
+ resolver_libre_buttonLabel: string;
17
+ resolver_libre_errorMessage: string;
18
+ resolver_libre_modalTitle: string;
19
+ resolver_libre_submitButtonLabelEmpty: string;
20
+ resolver_libre_submitButtonLabelFull: string;
21
+ resolver_libre_successMessage: string;
22
+ resolver_openai_buttonLabel: string;
23
+ resolver_openai_errorMessage: string;
24
+ resolver_openai_modalTitle: string;
25
+ resolver_openai_submitButtonLabelEmpty: string;
26
+ resolver_openai_submitButtonLabelFull: string;
27
+ resolver_openai_successMessage: string;
28
+ };
29
+ };
30
+ uk: {
31
+ 'plugin-translator': {
32
+ resolver_copy_buttonLabel: string;
33
+ resolver_copy_errorMessage: string;
34
+ resolver_copy_modalTitle: string;
35
+ resolver_copy_submitButtonLabelEmpty: string;
36
+ resolver_copy_submitButtonLabelFull: string;
37
+ resolver_copy_successMessage: string;
38
+ resolver_google_buttonLabel: string;
39
+ resolver_google_errorMessage: string;
40
+ resolver_google_modalTitle: string;
41
+ resolver_google_submitButtonLabelEmpty: string;
42
+ resolver_google_submitButtonLabelFull: string;
43
+ resolver_google_successMessage: string;
44
+ resolver_libre_buttonLabel: string;
45
+ resolver_libre_errorMessage: string;
46
+ resolver_libre_modalTitle: string;
47
+ resolver_libre_submitButtonLabelEmpty: string;
48
+ resolver_libre_submitButtonLabelFull: string;
49
+ resolver_libre_successMessage: string;
50
+ resolver_openai_buttonLabel: string;
51
+ resolver_openai_errorMessage: string;
52
+ resolver_openai_modalTitle: string;
53
+ resolver_openai_submitButtonLabelEmpty: string;
54
+ resolver_openai_submitButtonLabelFull: string;
55
+ resolver_openai_successMessage: string;
56
+ };
57
+ };
58
+ zh: {
59
+ 'plugin-translator': {
60
+ resolver_copy_buttonLabel: string;
61
+ resolver_copy_errorMessage: string;
62
+ resolver_copy_modalTitle: string;
63
+ resolver_copy_submitButtonLabelEmpty: string;
64
+ resolver_copy_submitButtonLabelFull: string;
65
+ resolver_copy_successMessage: string;
66
+ resolver_google_buttonLabel: string;
67
+ resolver_google_errorMessage: string;
68
+ resolver_google_modalTitle: string;
69
+ resolver_google_submitButtonLabelEmpty: string;
70
+ resolver_google_submitButtonLabelFull: string;
71
+ resolver_google_successMessage: string;
72
+ resolver_libre_buttonLabel: string;
73
+ resolver_libre_errorMessage: string;
74
+ resolver_libre_modalTitle: string;
75
+ resolver_libre_submitButtonLabelEmpty: string;
76
+ resolver_libre_submitButtonLabelFull: string;
77
+ resolver_libre_successMessage: string;
78
+ resolver_openai_buttonLabel: string;
79
+ resolver_openai_errorMessage: string;
80
+ resolver_openai_modalTitle: string;
81
+ resolver_openai_submitButtonLabelEmpty: string;
82
+ resolver_openai_submitButtonLabelFull: string;
83
+ resolver_openai_successMessage: string;
84
+ };
85
+ };
86
+ };
87
+ //# sourceMappingURL=i18n-translations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n-translations.d.ts","sourceRoot":"","sources":["../src/i18n-translations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkGxB,CAAC"}
@@ -0,0 +1,88 @@
1
+ export const translations = {
2
+ en: {
3
+ 'plugin-translator': {
4
+ resolver_copy_buttonLabel: 'Copy from other locale',
5
+ resolver_copy_errorMessage: 'An error occurred when trying to translate the data',
6
+ resolver_copy_modalTitle: 'Choose the locale to copy from',
7
+ resolver_copy_submitButtonLabelEmpty: 'Copy only empty fields',
8
+ resolver_copy_submitButtonLabelFull: 'Copy all',
9
+ resolver_copy_successMessage: 'Successfully copied. Press "Save" to apply the changes.',
10
+ resolver_google_buttonLabel: 'Google Translate',
11
+ resolver_google_errorMessage: 'An error occurred when trying to translate the data',
12
+ resolver_google_modalTitle: 'Choose the locale to translate from',
13
+ resolver_google_submitButtonLabelEmpty: 'Translate only empty fields',
14
+ resolver_google_submitButtonLabelFull: 'Translate all',
15
+ resolver_google_successMessage: 'Successfully translated. Press "Save" to apply the changes.',
16
+ resolver_libre_buttonLabel: 'Libre Translate',
17
+ resolver_libre_errorMessage: 'An error occurred when trying to translate the data',
18
+ resolver_libre_modalTitle: 'Choose the locale to translate from',
19
+ resolver_libre_submitButtonLabelEmpty: 'Translate only empty fields',
20
+ resolver_libre_submitButtonLabelFull: 'Translate all',
21
+ resolver_libre_successMessage: 'Successfully translated. Press "Save" to apply the changes.',
22
+ resolver_openai_buttonLabel: 'AI Translate',
23
+ resolver_openai_errorMessage: 'An error occurred when trying to translate the data',
24
+ resolver_openai_modalTitle: 'Choose the locale to translate from',
25
+ resolver_openai_submitButtonLabelEmpty: 'Translate only empty fields',
26
+ resolver_openai_submitButtonLabelFull: 'Translate all',
27
+ resolver_openai_successMessage: 'Successfully translated. Press "Save" to apply the changes.'
28
+ }
29
+ },
30
+ uk: {
31
+ 'plugin-translator': {
32
+ resolver_copy_buttonLabel: 'Копіювати з іншої локалі',
33
+ resolver_copy_errorMessage: 'Сталася помилка під час спроби перекладу даних',
34
+ resolver_copy_modalTitle: 'Виберіть локаль для копіювання',
35
+ resolver_copy_submitButtonLabelEmpty: 'Копіювати лише порожні поля',
36
+ resolver_copy_submitButtonLabelFull: 'Копіювати все',
37
+ resolver_copy_successMessage: 'Успішно скопійовано. Натисніть "Зберегти", щоб застосувати зміни.',
38
+ resolver_google_buttonLabel: 'Переклад Google',
39
+ resolver_google_errorMessage: 'Сталася помилка під час спроби перекладу даних',
40
+ resolver_google_modalTitle: 'Виберіть локаль для перекладу',
41
+ resolver_google_submitButtonLabelEmpty: 'Перекласти лише порожні поля',
42
+ resolver_google_submitButtonLabelFull: 'Перекласти все',
43
+ resolver_google_successMessage: 'Успішно перекладено. Натисніть "Зберегти", щоб застосувати зміни.',
44
+ resolver_libre_buttonLabel: 'Переклад Libre',
45
+ resolver_libre_errorMessage: 'Сталася помилка під час спроби перекладу даних',
46
+ resolver_libre_modalTitle: 'Виберіть локаль для перекладу',
47
+ resolver_libre_submitButtonLabelEmpty: 'Перекласти лише порожні поля',
48
+ resolver_libre_submitButtonLabelFull: 'Перекласти все',
49
+ resolver_libre_successMessage: 'Успішно перекладено. Натисніть "Зберегти", щоб застосувати зміни.',
50
+ resolver_openai_buttonLabel: 'Переклад AI',
51
+ resolver_openai_errorMessage: 'Сталася помилка під час спроби перекладу даних',
52
+ resolver_openai_modalTitle: 'Виберіть локаль для перекладу',
53
+ resolver_openai_submitButtonLabelEmpty: 'Перекласти лише порожні поля',
54
+ resolver_openai_submitButtonLabelFull: 'Перекласти все',
55
+ resolver_openai_successMessage: 'Успішно перекладено. Натисніть "Зберегти", щоб застосувати зміни.'
56
+ }
57
+ },
58
+ zh: {
59
+ 'plugin-translator': {
60
+ resolver_copy_buttonLabel: '从其他语言复制',
61
+ resolver_copy_errorMessage: '尝试翻译数据时发生错误',
62
+ resolver_copy_modalTitle: '选择要复制的语言',
63
+ resolver_copy_submitButtonLabelEmpty: '仅复制空字段',
64
+ resolver_copy_submitButtonLabelFull: '复制全部',
65
+ resolver_copy_successMessage: '复制成功。按下“保存”以应用更改。',
66
+ resolver_google_buttonLabel: '谷歌翻译',
67
+ resolver_google_errorMessage: '尝试翻译数据时发生错误',
68
+ resolver_google_modalTitle: '选择要翻译的语言',
69
+ resolver_google_submitButtonLabelEmpty: '仅翻译空字段',
70
+ resolver_google_submitButtonLabelFull: '翻译全部',
71
+ resolver_google_successMessage: '翻译成功。按下“保存”以应用更改。',
72
+ resolver_libre_buttonLabel: '自由翻译',
73
+ resolver_libre_errorMessage: '尝试翻译数据时发生错误',
74
+ resolver_libre_modalTitle: '选择要翻译的语言',
75
+ resolver_libre_submitButtonLabelEmpty: '仅翻译空字段',
76
+ resolver_libre_submitButtonLabelFull: '翻译全部',
77
+ resolver_libre_successMessage: '翻译成功。按下“保存”以应用更改。',
78
+ resolver_openai_buttonLabel: 'AI翻译',
79
+ resolver_openai_errorMessage: '尝试翻译数据时发生错误',
80
+ resolver_openai_modalTitle: '选择要翻译的语言',
81
+ resolver_openai_submitButtonLabelEmpty: '仅翻译空字段',
82
+ resolver_openai_submitButtonLabelFull: '翻译全部',
83
+ resolver_openai_successMessage: '翻译成功。按下“保存”以应用更改。'
84
+ }
85
+ }
86
+ };
87
+
88
+ //# sourceMappingURL=i18n-translations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/i18n-translations.ts"],"sourcesContent":["export const translations = {\n en: {\n 'plugin-translator': {\n resolver_copy_buttonLabel: 'Copy from other locale',\n resolver_copy_errorMessage: 'An error occurred when trying to translate the data',\n resolver_copy_modalTitle: 'Choose the locale to copy from',\n resolver_copy_submitButtonLabelEmpty: 'Copy only empty fields',\n resolver_copy_submitButtonLabelFull: 'Copy all',\n resolver_copy_successMessage: 'Successfully copied. Press \"Save\" to apply the changes.',\n\n resolver_google_buttonLabel: 'Google Translate',\n resolver_google_errorMessage: 'An error occurred when trying to translate the data',\n resolver_google_modalTitle: 'Choose the locale to translate from',\n resolver_google_submitButtonLabelEmpty: 'Translate only empty fields',\n resolver_google_submitButtonLabelFull: 'Translate all',\n resolver_google_successMessage: 'Successfully translated. Press \"Save\" to apply the changes.',\n\n resolver_libre_buttonLabel: 'Libre Translate',\n resolver_libre_errorMessage: 'An error occurred when trying to translate the data',\n resolver_libre_modalTitle: 'Choose the locale to translate from',\n resolver_libre_submitButtonLabelEmpty: 'Translate only empty fields',\n resolver_libre_submitButtonLabelFull: 'Translate all',\n resolver_libre_successMessage: 'Successfully translated. Press \"Save\" to apply the changes.',\n\n resolver_openai_buttonLabel: 'AI Translate',\n resolver_openai_errorMessage: 'An error occurred when trying to translate the data',\n resolver_openai_modalTitle: 'Choose the locale to translate from',\n resolver_openai_submitButtonLabelEmpty: 'Translate only empty fields',\n resolver_openai_submitButtonLabelFull: 'Translate all',\n resolver_openai_successMessage: 'Successfully translated. Press \"Save\" to apply the changes.',\n },\n },\n uk: {\n 'plugin-translator': {\n resolver_copy_buttonLabel: 'Копіювати з іншої локалі',\n resolver_copy_errorMessage: 'Сталася помилка під час спроби перекладу даних',\n resolver_copy_modalTitle: 'Виберіть локаль для копіювання',\n resolver_copy_submitButtonLabelEmpty: 'Копіювати лише порожні поля',\n resolver_copy_submitButtonLabelFull: 'Копіювати все',\n resolver_copy_successMessage:\n 'Успішно скопійовано. Натисніть \"Зберегти\", щоб застосувати зміни.',\n\n resolver_google_buttonLabel: 'Переклад Google',\n resolver_google_errorMessage: 'Сталася помилка під час спроби перекладу даних',\n resolver_google_modalTitle: 'Виберіть локаль для перекладу',\n resolver_google_submitButtonLabelEmpty: 'Перекласти лише порожні поля',\n resolver_google_submitButtonLabelFull: 'Перекласти все',\n resolver_google_successMessage:\n 'Успішно перекладено. Натисніть \"Зберегти\", щоб застосувати зміни.',\n\n resolver_libre_buttonLabel: 'Переклад Libre',\n resolver_libre_errorMessage: 'Сталася помилка під час спроби перекладу даних',\n resolver_libre_modalTitle: 'Виберіть локаль для перекладу',\n resolver_libre_submitButtonLabelEmpty: 'Перекласти лише порожні поля',\n resolver_libre_submitButtonLabelFull: 'Перекласти все',\n resolver_libre_successMessage:\n 'Успішно перекладено. Натисніть \"Зберегти\", щоб застосувати зміни.',\n\n resolver_openai_buttonLabel: 'Переклад AI',\n resolver_openai_errorMessage: 'Сталася помилка під час спроби перекладу даних',\n resolver_openai_modalTitle: 'Виберіть локаль для перекладу',\n resolver_openai_submitButtonLabelEmpty: 'Перекласти лише порожні поля',\n resolver_openai_submitButtonLabelFull: 'Перекласти все',\n resolver_openai_successMessage:\n 'Успішно перекладено. Натисніть \"Зберегти\", щоб застосувати зміни.',\n },\n },\n zh: {\n 'plugin-translator': {\n resolver_copy_buttonLabel: '从其他语言复制',\n resolver_copy_errorMessage: '尝试翻译数据时发生错误',\n resolver_copy_modalTitle: '选择要复制的语言',\n resolver_copy_submitButtonLabelEmpty: '仅复制空字段',\n resolver_copy_submitButtonLabelFull: '复制全部',\n resolver_copy_successMessage: '复制成功。按下“保存”以应用更改。',\n\n resolver_google_buttonLabel: '谷歌翻译',\n resolver_google_errorMessage: '尝试翻译数据时发生错误',\n resolver_google_modalTitle: '选择要翻译的语言',\n resolver_google_submitButtonLabelEmpty: '仅翻译空字段',\n resolver_google_submitButtonLabelFull: '翻译全部',\n resolver_google_successMessage: '翻译成功。按下“保存”以应用更改。',\n\n resolver_libre_buttonLabel: '自由翻译',\n resolver_libre_errorMessage: '尝试翻译数据时发生错误',\n resolver_libre_modalTitle: '选择要翻译的语言',\n resolver_libre_submitButtonLabelEmpty: '仅翻译空字段',\n resolver_libre_submitButtonLabelFull: '翻译全部',\n resolver_libre_successMessage: '翻译成功。按下“保存”以应用更改。',\n\n resolver_openai_buttonLabel: 'AI翻译',\n resolver_openai_errorMessage: '尝试翻译数据时发生错误',\n resolver_openai_modalTitle: '选择要翻译的语言',\n resolver_openai_submitButtonLabelEmpty: '仅翻译空字段',\n resolver_openai_submitButtonLabelFull: '翻译全部',\n resolver_openai_successMessage: '翻译成功。按下“保存”以应用更改。',\n },\n },\n};\n"],"names":["translations","en","resolver_copy_buttonLabel","resolver_copy_errorMessage","resolver_copy_modalTitle","resolver_copy_submitButtonLabelEmpty","resolver_copy_submitButtonLabelFull","resolver_copy_successMessage","resolver_google_buttonLabel","resolver_google_errorMessage","resolver_google_modalTitle","resolver_google_submitButtonLabelEmpty","resolver_google_submitButtonLabelFull","resolver_google_successMessage","resolver_libre_buttonLabel","resolver_libre_errorMessage","resolver_libre_modalTitle","resolver_libre_submitButtonLabelEmpty","resolver_libre_submitButtonLabelFull","resolver_libre_successMessage","resolver_openai_buttonLabel","resolver_openai_errorMessage","resolver_openai_modalTitle","resolver_openai_submitButtonLabelEmpty","resolver_openai_submitButtonLabelFull","resolver_openai_successMessage","uk","zh"],"mappings":"AAAA,OAAO,MAAMA,eAAe;IAC1BC,IAAI;QACF,qBAAqB;YACnBC,2BAA2B;YAC3BC,4BAA4B;YAC5BC,0BAA0B;YAC1BC,sCAAsC;YACtCC,qCAAqC;YACrCC,8BAA8B;YAE9BC,6BAA6B;YAC7BC,8BAA8B;YAC9BC,4BAA4B;YAC5BC,wCAAwC;YACxCC,uCAAuC;YACvCC,gCAAgC;YAEhCC,4BAA4B;YAC5BC,6BAA6B;YAC7BC,2BAA2B;YAC3BC,uCAAuC;YACvCC,sCAAsC;YACtCC,+BAA+B;YAE/BC,6BAA6B;YAC7BC,8BAA8B;YAC9BC,4BAA4B;YAC5BC,wCAAwC;YACxCC,uCAAuC;YACvCC,gCAAgC;QAClC;IACF;IACAC,IAAI;QACF,qBAAqB;YACnBxB,2BAA2B;YAC3BC,4BAA4B;YAC5BC,0BAA0B;YAC1BC,sCAAsC;YACtCC,qCAAqC;YACrCC,8BACE;YAEFC,6BAA6B;YAC7BC,8BAA8B;YAC9BC,4BAA4B;YAC5BC,wCAAwC;YACxCC,uCAAuC;YACvCC,gCACE;YAEFC,4BAA4B;YAC5BC,6BAA6B;YAC7BC,2BAA2B;YAC3BC,uCAAuC;YACvCC,sCAAsC;YACtCC,+BACE;YAEFC,6BAA6B;YAC7BC,8BAA8B;YAC9BC,4BAA4B;YAC5BC,wCAAwC;YACxCC,uCAAuC;YACvCC,gCACE;QACJ;IACF;IACAE,IAAI;QACF,qBAAqB;YACnBzB,2BAA2B;YAC3BC,4BAA4B;YAC5BC,0BAA0B;YAC1BC,sCAAsC;YACtCC,qCAAqC;YACrCC,8BAA8B;YAE9BC,6BAA6B;YAC7BC,8BAA8B;YAC9BC,4BAA4B;YAC5BC,wCAAwC;YACxCC,uCAAuC;YACvCC,gCAAgC;YAEhCC,4BAA4B;YAC5BC,6BAA6B;YAC7BC,2BAA2B;YAC3BC,uCAAuC;YACvCC,sCAAsC;YACtCC,+BAA+B;YAE/BC,6BAA6B;YAC7BC,8BAA8B;YAC9BC,4BAA4B;YAC5BC,wCAAwC;YACxCC,uCAAuC;YACvCC,gCAAgC;QAClC;IACF;AACF,EAAE"}
@@ -0,0 +1,11 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsC,MAAM,EAAE,MAAM,SAAS,CAAC;AAM1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,cAAc,mBAAmB,CAAC;AAElC,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,eAAO,MAAM,UAAU,EAAE,CAAC,YAAY,EAAE,gBAAgB,KAAK,MA+E5D,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,87 @@
1
+ import { deepMerge } from 'payload/shared';
2
+ import { CustomButton } from './client/components/CustomButton';
3
+ import { translations } from './i18n-translations';
4
+ import { translateEndpoint } from './translate/endpoint';
5
+ import { translateOperation } from './translate/operation';
6
+ export { copyResolver } from './resolvers/copy';
7
+ export { googleResolver } from './resolvers/google';
8
+ export { libreResolver } from './resolvers/libreTranslate';
9
+ export { openAIResolver } from './resolvers/openAI';
10
+ export * from './resolvers/types';
11
+ export { translateOperation };
12
+ export const translator = (pluginConfig)=>{
13
+ return (config)=>{
14
+ if (pluginConfig.disabled || !config.localization || config.localization.locales.length < 2) return config;
15
+ const updatedConfig = {
16
+ ...config,
17
+ admin: {
18
+ ...config.admin ?? {},
19
+ custom: {
20
+ ...config.admin?.custom ?? {},
21
+ translator: {
22
+ resolvers: pluginConfig.resolvers.map(({ key })=>({
23
+ key
24
+ }))
25
+ }
26
+ }
27
+ },
28
+ collections: config.collections?.map((collection)=>{
29
+ if (!pluginConfig.collections.includes(collection.slug)) return collection;
30
+ return {
31
+ ...collection,
32
+ admin: {
33
+ ...collection.admin ?? {},
34
+ components: {
35
+ ...collection.admin?.components ?? {},
36
+ edit: {
37
+ ...collection.admin?.components?.edit ?? {},
38
+ PublishButton: CustomButton('publish'),
39
+ SaveButton: CustomButton('save')
40
+ }
41
+ }
42
+ }
43
+ };
44
+ }) ?? [],
45
+ custom: {
46
+ ...config.custom ?? {},
47
+ translator: {
48
+ resolvers: pluginConfig.resolvers
49
+ }
50
+ },
51
+ endpoints: [
52
+ ...config.endpoints ?? [],
53
+ {
54
+ handler: translateEndpoint,
55
+ method: 'post',
56
+ path: '/translator/translate'
57
+ }
58
+ ],
59
+ globals: config.globals?.map((global)=>{
60
+ if (!pluginConfig.globals.includes(global.slug)) return global;
61
+ return {
62
+ ...global,
63
+ admin: {
64
+ ...global.admin ?? {},
65
+ components: {
66
+ ...global.admin?.components ?? {},
67
+ elements: {
68
+ ...global.admin?.components?.elements ?? {},
69
+ PublishButton: CustomButton('publish'),
70
+ SaveButton: CustomButton('save')
71
+ }
72
+ }
73
+ }
74
+ };
75
+ }) ?? [],
76
+ i18n: {
77
+ ...config.i18n,
78
+ translations: {
79
+ ...deepMerge(config.i18n?.translations ?? {}, translations)
80
+ }
81
+ }
82
+ };
83
+ return updatedConfig;
84
+ };
85
+ };
86
+
87
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { CollectionSlug, Config, GlobalSlug, Plugin } from 'payload';\nimport { deepMerge } from 'payload/shared';\n\nimport { CustomButton } from './client/components/CustomButton';\nimport { translations } from './i18n-translations';\nimport { translateEndpoint } from './translate/endpoint';\nimport { translateOperation } from './translate/operation';\nimport type { TranslatorConfig } from './types';\n\nexport { copyResolver } from './resolvers/copy';\n\nexport { googleResolver } from './resolvers/google';\n\nexport { libreResolver } from './resolvers/libreTranslate';\n\nexport { openAIResolver } from './resolvers/openAI';\nexport * from './resolvers/types';\n\nexport { translateOperation };\n\nexport const translator: (pluginConfig: TranslatorConfig) => Plugin = (pluginConfig) => {\n return (config) => {\n if (pluginConfig.disabled || !config.localization || config.localization.locales.length < 2)\n return config;\n\n const updatedConfig: Config = {\n ...config,\n admin: {\n ...(config.admin ?? {}),\n custom: {\n ...(config.admin?.custom ?? {}),\n translator: {\n resolvers: pluginConfig.resolvers.map(({ key }) => ({ key })),\n },\n },\n },\n collections:\n config.collections?.map((collection) => {\n if (!pluginConfig.collections.includes(collection.slug as CollectionSlug))\n return collection;\n\n return {\n ...collection,\n admin: {\n ...(collection.admin ?? {}),\n components: {\n ...(collection.admin?.components ?? {}),\n edit: {\n ...(collection.admin?.components?.edit ?? {}),\n PublishButton: CustomButton('publish'),\n SaveButton: CustomButton('save'),\n },\n },\n },\n };\n }) ?? [],\n custom: {\n ...(config.custom ?? {}),\n translator: {\n resolvers: pluginConfig.resolvers,\n },\n },\n endpoints: [\n ...(config.endpoints ?? []),\n {\n handler: translateEndpoint,\n method: 'post',\n path: '/translator/translate',\n },\n ],\n globals:\n config.globals?.map((global) => {\n if (!pluginConfig.globals.includes(global.slug as GlobalSlug)) return global;\n\n return {\n ...global,\n admin: {\n ...(global.admin ?? {}),\n components: {\n ...(global.admin?.components ?? {}),\n elements: {\n ...(global.admin?.components?.elements ?? {}),\n PublishButton: CustomButton('publish'),\n SaveButton: CustomButton('save'),\n },\n },\n },\n };\n }) ?? [],\n i18n: {\n ...config.i18n,\n translations: {\n ...deepMerge(config.i18n?.translations ?? {}, translations),\n },\n },\n };\n\n return updatedConfig;\n };\n};\n"],"names":["deepMerge","CustomButton","translations","translateEndpoint","translateOperation","copyResolver","googleResolver","libreResolver","openAIResolver","translator","pluginConfig","config","disabled","localization","locales","length","updatedConfig","admin","custom","resolvers","map","key","collections","collection","includes","slug","components","edit","PublishButton","SaveButton","endpoints","handler","method","path","globals","global","elements","i18n"],"mappings":"AACA,SAASA,SAAS,QAAQ,iBAAiB;AAE3C,SAASC,YAAY,QAAQ,mCAAmC;AAChE,SAASC,YAAY,QAAQ,sBAAsB;AACnD,SAASC,iBAAiB,QAAQ,uBAAuB;AACzD,SAASC,kBAAkB,QAAQ,wBAAwB;AAG3D,SAASC,YAAY,QAAQ,mBAAmB;AAEhD,SAASC,cAAc,QAAQ,qBAAqB;AAEpD,SAASC,aAAa,QAAQ,6BAA6B;AAE3D,SAASC,cAAc,QAAQ,qBAAqB;AACpD,cAAc,oBAAoB;AAElC,SAASJ,kBAAkB,GAAG;AAE9B,OAAO,MAAMK,aAAyD,CAACC;IACrE,OAAO,CAACC;QACN,IAAID,aAAaE,QAAQ,IAAI,CAACD,OAAOE,YAAY,IAAIF,OAAOE,YAAY,CAACC,OAAO,CAACC,MAAM,GAAG,GACxF,OAAOJ;QAET,MAAMK,gBAAwB;YAC5B,GAAGL,MAAM;YACTM,OAAO;gBACL,GAAIN,OAAOM,KAAK,IAAI,CAAC,CAAC;gBACtBC,QAAQ;oBACN,GAAIP,OAAOM,KAAK,EAAEC,UAAU,CAAC,CAAC;oBAC9BT,YAAY;wBACVU,WAAWT,aAAaS,SAAS,CAACC,GAAG,CAAC,CAAC,EAAEC,GAAG,EAAE,GAAM,CAAA;gCAAEA;4BAAI,CAAA;oBAC5D;gBACF;YACF;YACAC,aACEX,OAAOW,WAAW,EAAEF,IAAI,CAACG;gBACvB,IAAI,CAACb,aAAaY,WAAW,CAACE,QAAQ,CAACD,WAAWE,IAAI,GACpD,OAAOF;gBAET,OAAO;oBACL,GAAGA,UAAU;oBACbN,OAAO;wBACL,GAAIM,WAAWN,KAAK,IAAI,CAAC,CAAC;wBAC1BS,YAAY;4BACV,GAAIH,WAAWN,KAAK,EAAES,cAAc,CAAC,CAAC;4BACtCC,MAAM;gCACJ,GAAIJ,WAAWN,KAAK,EAAES,YAAYC,QAAQ,CAAC,CAAC;gCAC5CC,eAAe3B,aAAa;gCAC5B4B,YAAY5B,aAAa;4BAC3B;wBACF;oBACF;gBACF;YACF,MAAM,EAAE;YACViB,QAAQ;gBACN,GAAIP,OAAOO,MAAM,IAAI,CAAC,CAAC;gBACvBT,YAAY;oBACVU,WAAWT,aAAaS,SAAS;gBACnC;YACF;YACAW,WAAW;mBACLnB,OAAOmB,SAAS,IAAI,EAAE;gBAC1B;oBACEC,SAAS5B;oBACT6B,QAAQ;oBACRC,MAAM;gBACR;aACD;YACDC,SACEvB,OAAOuB,OAAO,EAAEd,IAAI,CAACe;gBACnB,IAAI,CAACzB,aAAawB,OAAO,CAACV,QAAQ,CAACW,OAAOV,IAAI,GAAiB,OAAOU;gBAEtE,OAAO;oBACL,GAAGA,MAAM;oBACTlB,OAAO;wBACL,GAAIkB,OAAOlB,KAAK,IAAI,CAAC,CAAC;wBACtBS,YAAY;4BACV,GAAIS,OAAOlB,KAAK,EAAES,cAAc,CAAC,CAAC;4BAClCU,UAAU;gCACR,GAAID,OAAOlB,KAAK,EAAES,YAAYU,YAAY,CAAC,CAAC;gCAC5CR,eAAe3B,aAAa;gCAC5B4B,YAAY5B,aAAa;4BAC3B;wBACF;oBACF;gBACF;YACF,MAAM,EAAE;YACVoC,MAAM;gBACJ,GAAG1B,OAAO0B,IAAI;gBACdnC,cAAc;oBACZ,GAAGF,UAAUW,OAAO0B,IAAI,EAAEnC,gBAAgB,CAAC,GAAGA,aAAa;gBAC7D;YACF;QACF;QAEA,OAAOc;IACT;AACF,EAAE"}
@@ -0,0 +1,3 @@
1
+ import type { TranslateResolver } from './types';
2
+ export declare const copyResolver: () => TranslateResolver;
3
+ //# sourceMappingURL=copy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../src/resolvers/copy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,eAAO,MAAM,YAAY,QAAO,iBAY/B,CAAC"}
@@ -0,0 +1,14 @@
1
+ export const copyResolver = ()=>{
2
+ return {
3
+ key: 'copy',
4
+ resolve: (args)=>{
5
+ const { texts } = args;
6
+ return {
7
+ success: true,
8
+ translatedTexts: texts
9
+ };
10
+ }
11
+ };
12
+ };
13
+
14
+ //# sourceMappingURL=copy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/resolvers/copy.ts"],"sourcesContent":["import type { TranslateResolver } from './types';\n\nexport const copyResolver = (): TranslateResolver => {\n return {\n key: 'copy',\n resolve: (args) => {\n const { texts } = args;\n\n return {\n success: true,\n translatedTexts: texts,\n };\n },\n };\n};\n"],"names":["copyResolver","key","resolve","args","texts","success","translatedTexts"],"mappings":"AAEA,OAAO,MAAMA,eAAe;IAC1B,OAAO;QACLC,KAAK;QACLC,SAAS,CAACC;YACR,MAAM,EAAEC,KAAK,EAAE,GAAGD;YAElB,OAAO;gBACLE,SAAS;gBACTC,iBAAiBF;YACnB;QACF;IACF;AACF,EAAE"}