payload-ai 1.0.1 → 1.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.
- package/dist/aiCaption.js +0 -2
- package/dist/aiCaption.js.map +1 -1
- package/dist/aiTranslate.d.ts +1 -1
- package/dist/aiTranslate.js +81 -22
- package/dist/aiTranslate.js.map +1 -1
- package/dist/components/Translator/Translator.scss +111 -0
- package/dist/components/Translator/index.js +197 -43
- package/dist/components/Translator/index.js.map +1 -1
- package/dist/deepCompareAndMerge.js +0 -1
- package/dist/deepCompareAndMerge.js.map +1 -1
- package/dist/handleTranslate.js +74 -1
- package/dist/handleTranslate.js.map +1 -1
- package/dist/seoTools.js +0 -1
- package/dist/seoTools.js.map +1 -1
- package/dist/translateTextAndObjects.js +20 -4
- package/dist/translateTextAndObjects.js.map +1 -1
- package/package.json +9 -6
- package/.editorconfig +0 -10
- package/.eslintrc.js +0 -17
- package/.prettierrc.js +0 -8
- package/dev/.env.example +0 -3
- package/dev/Dockerfile +0 -27
- package/dev/docker-compose.yml +0 -31
- package/dev/jest.config.js +0 -12
- package/dev/nodemon.json +0 -6
- package/dev/package.json +0 -34
- package/dev/plugin.spec.ts +0 -30
- package/dev/src/blocks/TextBlock/index.ts +0 -33
- package/dev/src/collections/Examples.ts +0 -38
- package/dev/src/collections/ExamplesWithVersions.ts +0 -31
- package/dev/src/collections/Media.ts +0 -43
- package/dev/src/collections/Users.ts +0 -15
- package/dev/src/media/IMG_3624-1024x768.jpg +0 -0
- package/dev/src/media/IMG_3624.jpeg +0 -0
- package/dev/src/mocks/fileStub.js +0 -1
- package/dev/src/payload.config.ts +0 -71
- package/dev/src/server.ts +0 -18
- package/dev/tsconfig.json +0 -34
- package/dev-v3/.cursor/rules/access-control-advanced.md +0 -519
- package/dev-v3/.cursor/rules/access-control.md +0 -225
- package/dev-v3/.cursor/rules/adapters.md +0 -209
- package/dev-v3/.cursor/rules/collections.md +0 -171
- package/dev-v3/.cursor/rules/components.md +0 -794
- package/dev-v3/.cursor/rules/endpoints.md +0 -236
- package/dev-v3/.cursor/rules/field-type-guards.md +0 -230
- package/dev-v3/.cursor/rules/fields.md +0 -317
- package/dev-v3/.cursor/rules/hooks.md +0 -175
- package/dev-v3/.cursor/rules/payload-overview.md +0 -126
- package/dev-v3/.cursor/rules/plugin-development.md +0 -323
- package/dev-v3/.cursor/rules/queries.md +0 -223
- package/dev-v3/.cursor/rules/security-critical.mdc +0 -122
- package/dev-v3/.env.example +0 -2
- package/dev-v3/.prettierrc.json +0 -6
- package/dev-v3/.vscode/extensions.json +0 -3
- package/dev-v3/.vscode/launch.json +0 -24
- package/dev-v3/.vscode/settings.json +0 -40
- package/dev-v3/.yarnrc +0 -1
- package/dev-v3/AGENTS.md +0 -1141
- package/dev-v3/Dockerfile +0 -71
- package/dev-v3/README.md +0 -67
- package/dev-v3/docker-compose.yml +0 -43
- package/dev-v3/eslint.config.mjs +0 -38
- package/dev-v3/next.config.mjs +0 -17
- package/dev-v3/package.json +0 -61
- package/dev-v3/playwright.config.ts +0 -41
- package/dev-v3/src/app/(frontend)/layout.tsx +0 -19
- package/dev-v3/src/app/(frontend)/page.tsx +0 -59
- package/dev-v3/src/app/(frontend)/styles.css +0 -164
- package/dev-v3/src/app/(payload)/admin/[[...segments]]/not-found.tsx +0 -24
- package/dev-v3/src/app/(payload)/admin/[[...segments]]/page.tsx +0 -24
- package/dev-v3/src/app/(payload)/admin/importMap.js +0 -7
- package/dev-v3/src/app/(payload)/api/[...slug]/route.ts +0 -19
- package/dev-v3/src/app/(payload)/api/graphql/route.ts +0 -8
- package/dev-v3/src/app/(payload)/api/graphql-playground/route.ts +0 -7
- package/dev-v3/src/app/(payload)/custom.scss +0 -0
- package/dev-v3/src/app/(payload)/layout.tsx +0 -31
- package/dev-v3/src/app/my-route/route.ts +0 -12
- package/dev-v3/src/collections/Media.ts +0 -17
- package/dev-v3/src/collections/Random.ts +0 -16
- package/dev-v3/src/collections/Users.ts +0 -13
- package/dev-v3/src/payload-types.ts +0 -401
- package/dev-v3/src/payload.config.ts +0 -61
- package/dev-v3/test.env +0 -1
- package/dev-v3/tests/e2e/admin.e2e.spec.ts +0 -41
- package/dev-v3/tests/e2e/frontend.e2e.spec.ts +0 -20
- package/dev-v3/tests/helpers/login.ts +0 -31
- package/dev-v3/tests/helpers/seedUser.ts +0 -46
- package/dev-v3/tests/int/api.int.spec.ts +0 -20
- package/dev-v3/tsconfig.json +0 -44
- package/dev-v3/vitest.config.mts +0 -12
- package/dev-v3/vitest.setup.ts +0 -4
- package/dev-v3/yarn.lock +0 -6102
- package/eslint-config/index.js +0 -15
- package/eslint-config/rules/import.js +0 -38
- package/eslint-config/rules/prettier.js +0 -7
- package/eslint-config/rules/style.js +0 -21
- package/eslint-config/rules/typescript.js +0 -628
- package/src/access/admins.ts +0 -11
- package/src/access/adminsOrPublished.ts +0 -16
- package/src/access/anyone.ts +0 -3
- package/src/access/checkRole.ts +0 -16
- package/src/access/validateAccess.ts +0 -28
- package/src/aiCaption.ts +0 -90
- package/src/aiTranslate.ts +0 -113
- package/src/components/AfterDashboard/index.scss +0 -10
- package/src/components/AfterDashboard/index.tsx +0 -18
- package/src/components/Metadata/index.scss +0 -10
- package/src/components/Metadata/index.tsx +0 -55
- package/src/components/Translator/Translator.scss +0 -85
- package/src/components/Translator/index.tsx +0 -258
- package/src/countries.json +0 -193
- package/src/deepCompareAndMerge.ts +0 -83
- package/src/fsMock.js +0 -1
- package/src/generateImage.ts +0 -37
- package/src/generateText.ts +0 -40
- package/src/handleMissingTranslate.ts +0 -77
- package/src/handleTranslate.ts +0 -74
- package/src/index.ts +0 -4
- package/src/mocks/mockFile.js +0 -1
- package/src/onInitExtension.ts +0 -12
- package/src/plugin.ts +0 -207
- package/src/seoTools.ts +0 -75
- package/src/stringTranslations.ts +0 -183
- package/src/translateTextAndObjects.ts +0 -310
- package/src/types.ts +0 -22
- package/src/webpack.ts +0 -8
- package/tsconfig.json +0 -23
package/dist/aiCaption.js
CHANGED
|
@@ -99,7 +99,6 @@ function processImageRequest(url) {
|
|
|
99
99
|
})];
|
|
100
100
|
case 2:
|
|
101
101
|
responseGpt = _a.sent();
|
|
102
|
-
console.log('GPT Response:', responseGpt.choices[0].message.content);
|
|
103
102
|
return [2 /*return*/, responseGpt];
|
|
104
103
|
}
|
|
105
104
|
});
|
|
@@ -115,7 +114,6 @@ function translateCollection(_a) {
|
|
|
115
114
|
case 0:
|
|
116
115
|
if (context.triggerAfterChange === false /* || req.locale !== sourceLanguageI */)
|
|
117
116
|
return [2 /*return*/];
|
|
118
|
-
console.log('upload doc', doc);
|
|
119
117
|
if (!((_c = (_b = doc === null || doc === void 0 ? void 0 : doc.sizes) === null || _b === void 0 ? void 0 : _b.tablet) === null || _c === void 0 ? void 0 : _c.url))
|
|
120
118
|
return [2 /*return*/];
|
|
121
119
|
return [4 /*yield*/, processImageRequest("http://localhost:3000".concat(doc.sizes.tablet.url))];
|
package/dist/aiCaption.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aiCaption.js","sourceRoot":"","sources":["../src/aiCaption.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAyB;AACzB,kDAA2B;AAG3B,IAAM,aAAa,GACjB,UACE,EAIqE,EACrE,QAAiB;QAJf,iBAAiB,uBAAA,EACjB,UAAU,gBAAA,EACV,aAAa,mBAAA;IAIjB,OAAA,UAAO,EAA8C;YAA5C,GAAG,SAAA,EAAE,GAAG,SAAA,EAAE,WAAW,iBAAA,EAAE,OAAO,aAAA,EAAE,UAAU,gBAAA;;;;;;;wBAC3C,QAAQ,GAAG,MAAA,MAAA,aAAa,CAAC,WAAW,0CAAG,UAAU,CAAC,IAAI,CAAC,0CAAE,QAAQ,CAAA;wBAEhE,qBAAM,mBAAmB,CAAC;gCAC/B,GAAG,KAAA;gCACH,GAAG,KAAA;gCACH,WAAW,aAAA;gCACX,OAAO,SAAA;gCACP,UAAU,YAAA;gCACV,iBAAiB,mBAAA;gCACjB,QAAQ,UAAA;6BACT,CAAC,EAAA;4BARF,sBAAO,SAQL,EAAA;;;;KACH;AAZD,CAYC,CAAA;AAEH,kBAAe,aAAa,CAAA;AAE5B,SAAe,mBAAmB,CAAC,GAAW;;;;;wBAC3B,qBAAM,eAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC,EAAA;;oBAAhE,QAAQ,GAAG,SAAqD;oBAChE,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;oBAClD,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;oBAC5C,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;oBAC3C,YAAY,GAAG,eAAQ,QAAQ,qBAAW,WAAW,CAAE,CAAA;oBAEvD,MAAM,GAAG,IAAI,gBAAM,CAAC;wBACxB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;qBACnC,CAAC,CAAA;oBAEkB,qBAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;4BACvD,KAAK,EAAE,QAAQ;4BACf,QAAQ,EAAE;gCACR;oCACE,IAAI,EAAE,MAAM;oCACZ,OAAO,EAAE;wCACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE;wCAClD,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE;qCACxD;iCACF;6BACF;4BACD,UAAU,EAAE,IAAI;yBACjB,CAAC,EAAA;;oBAZI,WAAW,GAAG,SAYlB;oBAEF,
|
|
1
|
+
{"version":3,"file":"aiCaption.js","sourceRoot":"","sources":["../src/aiCaption.ts"],"names":[],"mappings":"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"}
|
package/dist/aiTranslate.d.ts
CHANGED
|
@@ -5,4 +5,4 @@ declare const aiTranslateHook: ({ collectionOptions, collection, pluginOptions,
|
|
|
5
5
|
pluginOptions: any;
|
|
6
6
|
}, fallback?: string) => CollectionAfterChangeHook;
|
|
7
7
|
export default aiTranslateHook;
|
|
8
|
-
export declare function translateCollection({ req, doc, collection, previousDoc, context, collectionOptions, onlyMissing, codes, settings, sourceLanguage, }: any): Promise<void>;
|
|
8
|
+
export declare function translateCollection({ req, doc, collection, previousDoc, context, collectionOptions, onlyMissing, codes, settings, sourceLanguage, onProgress, }: any): Promise<void>;
|
package/dist/aiTranslate.js
CHANGED
|
@@ -89,12 +89,12 @@ var aiTranslateHook = function (_a, fallback) {
|
|
|
89
89
|
exports.default = aiTranslateHook;
|
|
90
90
|
function translateCollection(_a) {
|
|
91
91
|
var _b, _c;
|
|
92
|
-
var req = _a.req, doc = _a.doc, collection = _a.collection, previousDoc = _a.previousDoc, context = _a.context, collectionOptions = _a.collectionOptions, onlyMissing = _a.onlyMissing, codes = _a.codes, settings = _a.settings, sourceLanguage = _a.sourceLanguage;
|
|
92
|
+
var req = _a.req, doc = _a.doc, collection = _a.collection, previousDoc = _a.previousDoc, context = _a.context, collectionOptions = _a.collectionOptions, onlyMissing = _a.onlyMissing, codes = _a.codes, settings = _a.settings, sourceLanguage = _a.sourceLanguage, onProgress = _a.onProgress;
|
|
93
93
|
return __awaiter(this, void 0, void 0, function () {
|
|
94
|
-
var localization, previousDocument, locales, localCodes, sourceLanguageI, translationPromises, translationResults,
|
|
94
|
+
var localization, previousDocument, locales, localCodes, sourceLanguageI, targetLanguages, _i, targetLanguages_1, targetLanguage, targetDoc, targetDocWithTranslation, id, _status, updatedAt, createdAt, publishedDate, dataNew, error_1, translationPromises, translationResults, _d, translationResults_1, translatedContent, updatedLanguage;
|
|
95
95
|
var _this = this;
|
|
96
|
-
return __generator(this, function (
|
|
97
|
-
switch (
|
|
96
|
+
return __generator(this, function (_e) {
|
|
97
|
+
switch (_e.label) {
|
|
98
98
|
case 0:
|
|
99
99
|
localization = (_c = (_b = req === null || req === void 0 ? void 0 : req.payload) === null || _b === void 0 ? void 0 : _b.config) === null || _c === void 0 ? void 0 : _c.localization;
|
|
100
100
|
previousDocument = previousDoc || {};
|
|
@@ -115,11 +115,70 @@ function translateCollection(_a) {
|
|
|
115
115
|
return [2 /*return*/];
|
|
116
116
|
if (!Array.isArray(localCodes) || localCodes.length < 2 || !sourceLanguageI)
|
|
117
117
|
return [2 /*return*/];
|
|
118
|
-
|
|
119
|
-
.filter(function (targetLanguage) {
|
|
118
|
+
targetLanguages = localCodes.filter(function (targetLanguage) {
|
|
120
119
|
return targetLanguage !== sourceLanguageI && (!codes || codes.includes(targetLanguage));
|
|
121
|
-
})
|
|
122
|
-
|
|
120
|
+
});
|
|
121
|
+
if (!targetLanguages.length)
|
|
122
|
+
return [2 /*return*/];
|
|
123
|
+
if (!(typeof onProgress === 'function')) return [3 /*break*/, 12];
|
|
124
|
+
_i = 0, targetLanguages_1 = targetLanguages;
|
|
125
|
+
_e.label = 1;
|
|
126
|
+
case 1:
|
|
127
|
+
if (!(_i < targetLanguages_1.length)) return [3 /*break*/, 11];
|
|
128
|
+
targetLanguage = targetLanguages_1[_i];
|
|
129
|
+
return [4 /*yield*/, onProgress({ language: targetLanguage, status: 'processing' })];
|
|
130
|
+
case 2:
|
|
131
|
+
_e.sent();
|
|
132
|
+
_e.label = 3;
|
|
133
|
+
case 3:
|
|
134
|
+
_e.trys.push([3, 8, , 10]);
|
|
135
|
+
return [4 /*yield*/, req.payload.findByID({
|
|
136
|
+
collection: collection.slug,
|
|
137
|
+
id: doc.id,
|
|
138
|
+
locale: targetLanguage,
|
|
139
|
+
fallbackLocale: false,
|
|
140
|
+
limit: 0,
|
|
141
|
+
depth: 0,
|
|
142
|
+
})];
|
|
143
|
+
case 4:
|
|
144
|
+
targetDoc = _e.sent();
|
|
145
|
+
return [4 /*yield*/, (0, deepCompareAndMerge_1.deepCompareTranslateAndMerge)(doc, previousDocument, targetDoc, collectionOptions.fields, targetLanguage, previousDocument.id ? 'update' : 'create', onlyMissing, sourceLanguageI, __assign(__assign({}, settings), { namespace: doc === null || doc === void 0 ? void 0 : doc.namespace, localization: localization }))];
|
|
146
|
+
case 5:
|
|
147
|
+
targetDocWithTranslation = _e.sent();
|
|
148
|
+
id = targetDocWithTranslation.id, _status = targetDocWithTranslation._status, updatedAt = targetDocWithTranslation.updatedAt, createdAt = targetDocWithTranslation.createdAt, publishedDate = targetDocWithTranslation.publishedDate, dataNew = __rest(targetDocWithTranslation, ["id", "_status", "updatedAt", "createdAt", "publishedDate"]);
|
|
149
|
+
return [4 /*yield*/, req.payload.update({
|
|
150
|
+
collection: collection.slug,
|
|
151
|
+
id: doc.id,
|
|
152
|
+
data: dataNew,
|
|
153
|
+
locale: targetLanguage,
|
|
154
|
+
limit: 1,
|
|
155
|
+
depth: 0,
|
|
156
|
+
context: {
|
|
157
|
+
triggerAfterChange: false,
|
|
158
|
+
},
|
|
159
|
+
})];
|
|
160
|
+
case 6:
|
|
161
|
+
_e.sent();
|
|
162
|
+
return [4 /*yield*/, onProgress({ language: targetLanguage, status: 'completed' })];
|
|
163
|
+
case 7:
|
|
164
|
+
_e.sent();
|
|
165
|
+
return [3 /*break*/, 10];
|
|
166
|
+
case 8:
|
|
167
|
+
error_1 = _e.sent();
|
|
168
|
+
return [4 /*yield*/, onProgress({
|
|
169
|
+
language: targetLanguage,
|
|
170
|
+
status: 'failed',
|
|
171
|
+
error: (error_1 === null || error_1 === void 0 ? void 0 : error_1.message) || 'Translation failed',
|
|
172
|
+
})];
|
|
173
|
+
case 9:
|
|
174
|
+
_e.sent();
|
|
175
|
+
throw error_1;
|
|
176
|
+
case 10:
|
|
177
|
+
_i++;
|
|
178
|
+
return [3 /*break*/, 1];
|
|
179
|
+
case 11: return [2 /*return*/];
|
|
180
|
+
case 12:
|
|
181
|
+
translationPromises = targetLanguages.map(function (tL) { return __awaiter(_this, void 0, void 0, function () {
|
|
123
182
|
var targetDoc, targetDocWithTranslation, id, _status, updatedAt, createdAt, publishedDate, dataNew;
|
|
124
183
|
return __generator(this, function (_a) {
|
|
125
184
|
switch (_a.label) {
|
|
@@ -142,13 +201,13 @@ function translateCollection(_a) {
|
|
|
142
201
|
});
|
|
143
202
|
}); });
|
|
144
203
|
return [4 /*yield*/, Promise.all(translationPromises)];
|
|
145
|
-
case
|
|
146
|
-
translationResults =
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
case
|
|
150
|
-
if (!(
|
|
151
|
-
translatedContent = translationResults_1[
|
|
204
|
+
case 13:
|
|
205
|
+
translationResults = _e.sent();
|
|
206
|
+
_d = 0, translationResults_1 = translationResults;
|
|
207
|
+
_e.label = 14;
|
|
208
|
+
case 14:
|
|
209
|
+
if (!(_d < translationResults_1.length)) return [3 /*break*/, 17];
|
|
210
|
+
translatedContent = translationResults_1[_d];
|
|
152
211
|
return [4 /*yield*/, req.payload.update({
|
|
153
212
|
//req,
|
|
154
213
|
collection: collection.slug,
|
|
@@ -161,13 +220,13 @@ function translateCollection(_a) {
|
|
|
161
220
|
triggerAfterChange: false,
|
|
162
221
|
},
|
|
163
222
|
})];
|
|
164
|
-
case
|
|
165
|
-
updatedLanguage =
|
|
166
|
-
|
|
167
|
-
case
|
|
168
|
-
|
|
169
|
-
return [3 /*break*/,
|
|
170
|
-
case
|
|
223
|
+
case 15:
|
|
224
|
+
updatedLanguage = _e.sent();
|
|
225
|
+
_e.label = 16;
|
|
226
|
+
case 16:
|
|
227
|
+
_d++;
|
|
228
|
+
return [3 /*break*/, 14];
|
|
229
|
+
case 17: return [2 /*return*/];
|
|
171
230
|
}
|
|
172
231
|
});
|
|
173
232
|
});
|
package/dist/aiTranslate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aiTranslate.js","sourceRoot":"","sources":["../src/aiTranslate.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,6DAAoE;AAEpE,IAAM,eAAe,GACnB,UACE,EAIqE,EACrE,QAAiB;QAJf,iBAAiB,uBAAA,EACjB,UAAU,gBAAA,EACV,aAAa,mBAAA;IAIjB,OAAA,UAAO,EAA8C;YAA5C,GAAG,SAAA,EAAE,GAAG,SAAA,EAAE,WAAW,iBAAA,EAAE,OAAO,aAAA,EAAE,UAAU,gBAAA;;;;;;;wBAC3C,QAAQ,GAAG,MAAA,MAAA,aAAa,CAAC,WAAW,0CAAG,UAAU,CAAC,IAAI,CAAC,0CAAE,QAAQ,CAAA;wBAEhE,qBAAM,mBAAmB,CAAC;gCAC/B,GAAG,KAAA;gCACH,GAAG,KAAA;gCACH,WAAW,aAAA;gCACX,OAAO,SAAA;gCACP,UAAU,YAAA;gCACV,iBAAiB,mBAAA;gCACjB,QAAQ,UAAA;6BACT,CAAC,EAAA;4BARF,sBAAO,SAQL,EAAA;;;;KACH;AAZD,CAYC,CAAA;AAEH,kBAAe,eAAe,CAAA;AAE9B,SAAsB,mBAAmB,CAAC,
|
|
1
|
+
{"version":3,"file":"aiTranslate.js","sourceRoot":"","sources":["../src/aiTranslate.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,6 +41,104 @@
|
|
|
41
41
|
color: var(--theme-elevation-700);
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
+
&__status-message {
|
|
45
|
+
margin: 0;
|
|
46
|
+
font-size: 0.875rem;
|
|
47
|
+
color: var(--theme-elevation-800);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
&__status-panel {
|
|
51
|
+
display: flex;
|
|
52
|
+
flex-direction: column;
|
|
53
|
+
gap: calc(var(--base) * 0.5);
|
|
54
|
+
padding: calc(var(--base) * 0.75);
|
|
55
|
+
border: 1px solid var(--theme-elevation-100);
|
|
56
|
+
border-radius: var(--style-radius-s);
|
|
57
|
+
background: var(--theme-elevation-50);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
&__status-list {
|
|
61
|
+
display: flex;
|
|
62
|
+
flex-direction: column;
|
|
63
|
+
gap: calc(var(--base) * 0.5);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
&__status-item {
|
|
67
|
+
display: flex;
|
|
68
|
+
align-items: flex-start;
|
|
69
|
+
justify-content: space-between;
|
|
70
|
+
gap: calc(var(--base) * 0.75);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
&__status-language,
|
|
74
|
+
&__status-error {
|
|
75
|
+
margin: 0;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
&__status-language {
|
|
79
|
+
font-size: 0.95rem;
|
|
80
|
+
font-weight: 600;
|
|
81
|
+
color: var(--theme-elevation-900);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
&__status-error {
|
|
85
|
+
margin-top: calc(var(--base) * 0.15);
|
|
86
|
+
font-size: 0.825rem;
|
|
87
|
+
color: var(--theme-error-500);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
&__status-pill {
|
|
91
|
+
display: inline-flex;
|
|
92
|
+
align-items: center;
|
|
93
|
+
gap: calc(var(--base) * 0.25);
|
|
94
|
+
padding: calc(var(--base) * 0.2) calc(var(--base) * 0.45);
|
|
95
|
+
border-radius: 999px;
|
|
96
|
+
font-size: 0.8rem;
|
|
97
|
+
font-weight: 600;
|
|
98
|
+
white-space: nowrap;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
&__status-pill--queued {
|
|
102
|
+
color: var(--theme-elevation-800);
|
|
103
|
+
background: var(--theme-elevation-100);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
&__status-pill--processing {
|
|
107
|
+
color: var(--theme-warning-200);
|
|
108
|
+
background: color-mix(in srgb, var(--theme-warning-500) 35%, white);
|
|
109
|
+
|
|
110
|
+
.ai-translator__status-dot {
|
|
111
|
+
animation: ai-translator-pulse 1.1s ease-in-out infinite;
|
|
112
|
+
background: var(--theme-warning-500);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
&__status-pill--completed {
|
|
117
|
+
color: var(--theme-success-200);
|
|
118
|
+
background: color-mix(in srgb, var(--theme-success-500) 35%, white);
|
|
119
|
+
|
|
120
|
+
.ai-translator__status-dot {
|
|
121
|
+
background: var(--theme-success-500);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
&__status-pill--failed {
|
|
126
|
+
color: var(--theme-error-200);
|
|
127
|
+
background: color-mix(in srgb, var(--theme-error-500) 35%, white);
|
|
128
|
+
|
|
129
|
+
.ai-translator__status-dot {
|
|
130
|
+
background: var(--theme-error-500);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
&__status-dot {
|
|
135
|
+
width: 0.5rem;
|
|
136
|
+
height: 0.5rem;
|
|
137
|
+
border-radius: 50%;
|
|
138
|
+
background: currentColor;
|
|
139
|
+
flex-shrink: 0;
|
|
140
|
+
}
|
|
141
|
+
|
|
44
142
|
&__field {
|
|
45
143
|
display: flex;
|
|
46
144
|
flex-direction: column;
|
|
@@ -82,4 +180,17 @@
|
|
|
82
180
|
&__loading {
|
|
83
181
|
width: fit-content;
|
|
84
182
|
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
@keyframes ai-translator-pulse {
|
|
186
|
+
0%,
|
|
187
|
+
100% {
|
|
188
|
+
transform: scale(1);
|
|
189
|
+
opacity: 1;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
50% {
|
|
193
|
+
transform: scale(0.8);
|
|
194
|
+
opacity: 0.45;
|
|
195
|
+
}
|
|
85
196
|
}
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
'use client';
|
|
3
|
+
var __assign = (this && this.__assign) || function () {
|
|
4
|
+
__assign = Object.assign || function(t) {
|
|
5
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
6
|
+
s = arguments[i];
|
|
7
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
8
|
+
t[p] = s[p];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
return __assign.apply(this, arguments);
|
|
13
|
+
};
|
|
3
14
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
15
|
if (k2 === undefined) k2 = k;
|
|
5
16
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -64,13 +75,30 @@ exports.Translator = void 0;
|
|
|
64
75
|
var react_1 = __importStar(require("react"));
|
|
65
76
|
var ui_1 = require("@payloadcms/ui");
|
|
66
77
|
require("./Translator.scss");
|
|
78
|
+
var getTargetLocaleCodes = function (_a) {
|
|
79
|
+
var codes = _a.codes, locales = _a.locales, selectedSourceLocale = _a.selectedSourceLocale;
|
|
80
|
+
var requestedCodes = Array.isArray(codes) && codes.length ? codes : locales.map(function (locale) { return locale.code; });
|
|
81
|
+
return requestedCodes.filter(function (code) {
|
|
82
|
+
if (code === selectedSourceLocale)
|
|
83
|
+
return false;
|
|
84
|
+
return locales.some(function (locale) { return locale.code === code; });
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
var statusLabelMap = {
|
|
88
|
+
queued: 'Queued',
|
|
89
|
+
processing: 'Translating',
|
|
90
|
+
completed: 'Done',
|
|
91
|
+
failed: 'Failed',
|
|
92
|
+
};
|
|
67
93
|
var Translator = function (_a) {
|
|
68
94
|
var _b, _c, _d, _e;
|
|
69
95
|
var localization = _a.localization;
|
|
70
96
|
var baseClass = 'ai-translator';
|
|
71
97
|
var _f = react_1.default.useState(false), isOpen = _f[0], setIsOpen = _f[1];
|
|
72
98
|
var _g = react_1.default.useState(false), isLoading = _g[0], setIsLoading = _g[1];
|
|
73
|
-
var _h = react_1.default.useState(
|
|
99
|
+
var _h = react_1.default.useState({}), languageStatuses = _h[0], setLanguageStatuses = _h[1];
|
|
100
|
+
var _j = react_1.default.useState(null), statusMessage = _j[0], setStatusMessage = _j[1];
|
|
101
|
+
var _k = react_1.default.useState('default'), selectedModel = _k[0], setSelectedModel = _k[1];
|
|
74
102
|
var activeLocaleFromURL = react_1.default.useMemo(function () {
|
|
75
103
|
if (typeof window === 'undefined')
|
|
76
104
|
return undefined;
|
|
@@ -107,7 +135,7 @@ var Translator = function (_a) {
|
|
|
107
135
|
? activeLocaleFromURL
|
|
108
136
|
: defaultLocaleCode;
|
|
109
137
|
var fallbackLocaleLabel = ((_b = locales.find(function (locale) { return locale.code === activeLocaleCode; })) === null || _b === void 0 ? void 0 : _b.label) || activeLocaleCode;
|
|
110
|
-
var
|
|
138
|
+
var _l = react_1.default.useState(activeLocaleCode), selectedSourceLocale = _l[0], setSelectedSourceLocal = _l[1];
|
|
111
139
|
var documentInfo = (0, ui_1.useDocumentInfo)();
|
|
112
140
|
var routeMatch = typeof window !== 'undefined'
|
|
113
141
|
? window.location.pathname.match(/\/admin\/collections\/([^/]+)\/([^/?#]+)/)
|
|
@@ -124,10 +152,62 @@ var Translator = function (_a) {
|
|
|
124
152
|
documentId !== null &&
|
|
125
153
|
documentId !== '' &&
|
|
126
154
|
documentId !== 'create';
|
|
155
|
+
var handleOpenTranslator = (0, react_1.useCallback)(function () {
|
|
156
|
+
setIsOpen(true);
|
|
157
|
+
}, []);
|
|
158
|
+
var handleCloseTranslator = (0, react_1.useCallback)(function () {
|
|
159
|
+
setIsOpen(false);
|
|
160
|
+
}, []);
|
|
161
|
+
var modelOptions = [
|
|
162
|
+
{
|
|
163
|
+
label: 'Default',
|
|
164
|
+
value: 'default',
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
label: 'GPT-5 Mini ($0.25 in / $2.00 out per 1M)',
|
|
168
|
+
value: 'gpt-5-mini',
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
label: 'GPT-4.1 Mini ($0.80 in / $3.20 out per 1M)',
|
|
172
|
+
value: 'gpt-4.1-mini',
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
label: 'o3 ($2.00 in / $8.00 out per 1M)',
|
|
176
|
+
value: 'o3',
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
label: 'GPT-3.5 Turbo (1106)',
|
|
180
|
+
value: 'gpt-3.5-turbo-1106',
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
label: 'GPT-4 Turbo (Preview)',
|
|
184
|
+
value: 'gpt-4-turbo-preview',
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
label: 'GPT-5 ($1.25 in / $10.00 out per 1M)',
|
|
188
|
+
value: 'gpt-5',
|
|
189
|
+
},
|
|
190
|
+
];
|
|
191
|
+
var sourceLocaleOptions = locales.map(function (locale) { return ({
|
|
192
|
+
label: locale.label,
|
|
193
|
+
value: locale.code,
|
|
194
|
+
}); });
|
|
195
|
+
var visibleLanguageStatuses = Object.entries(languageStatuses)
|
|
196
|
+
.map(function (_a) {
|
|
197
|
+
var _b;
|
|
198
|
+
var code = _a[0], value = _a[1];
|
|
199
|
+
return ({
|
|
200
|
+
code: code,
|
|
201
|
+
error: value.error,
|
|
202
|
+
label: ((_b = locales.find(function (locale) { return locale.code === code; })) === null || _b === void 0 ? void 0 : _b.label) || code,
|
|
203
|
+
status: value.status,
|
|
204
|
+
});
|
|
205
|
+
})
|
|
206
|
+
.sort(function (left, right) { return left.label.localeCompare(right.label); });
|
|
127
207
|
var translate = function (_a) {
|
|
128
208
|
var codes = _a.codes;
|
|
129
209
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
130
|
-
var settings, response, error_1;
|
|
210
|
+
var targetLocaleCodes, settings, response, reader, decoder, buffer, translationFailed_1, _loop_1, state_1, error_1;
|
|
131
211
|
return __generator(this, function (_b) {
|
|
132
212
|
switch (_b.label) {
|
|
133
213
|
case 0:
|
|
@@ -139,16 +219,31 @@ var Translator = function (_a) {
|
|
|
139
219
|
});
|
|
140
220
|
return [2 /*return*/];
|
|
141
221
|
}
|
|
222
|
+
targetLocaleCodes = getTargetLocaleCodes({
|
|
223
|
+
codes: codes,
|
|
224
|
+
locales: locales,
|
|
225
|
+
selectedSourceLocale: selectedSourceLocale,
|
|
226
|
+
});
|
|
227
|
+
if (!targetLocaleCodes.length) {
|
|
228
|
+
setLanguageStatuses({});
|
|
229
|
+
setStatusMessage('No target languages available for the current source locale.');
|
|
230
|
+
return [2 /*return*/];
|
|
231
|
+
}
|
|
142
232
|
settings = {
|
|
143
233
|
model: selectedModel === 'default' ? undefined : selectedModel,
|
|
144
234
|
};
|
|
235
|
+
setLanguageStatuses(Object.fromEntries(targetLocaleCodes.map(function (code) { return [code, { status: 'queued' }]; })));
|
|
236
|
+
setStatusMessage(targetLocaleCodes.length === 1
|
|
237
|
+
? 'Translation started for 1 language.'
|
|
238
|
+
: "Translation started for ".concat(targetLocaleCodes.length, " languages."));
|
|
145
239
|
setIsLoading(true);
|
|
146
240
|
_b.label = 1;
|
|
147
241
|
case 1:
|
|
148
|
-
_b.trys.push([1,
|
|
242
|
+
_b.trys.push([1, 6, 7, 8]);
|
|
149
243
|
return [4 /*yield*/, fetch("/api/".concat(collectionSlug, "/translate?locale=").concat(activeLocaleCode), {
|
|
150
244
|
method: 'POST',
|
|
151
245
|
headers: {
|
|
246
|
+
Accept: 'application/x-ndjson',
|
|
152
247
|
'Content-Type': 'application/json',
|
|
153
248
|
},
|
|
154
249
|
body: JSON.stringify({
|
|
@@ -160,56 +255,115 @@ var Translator = function (_a) {
|
|
|
160
255
|
})];
|
|
161
256
|
case 2:
|
|
162
257
|
response = _b.sent();
|
|
163
|
-
|
|
258
|
+
if (!response.ok) {
|
|
259
|
+
throw new Error("Translation request failed with status ".concat(response.status));
|
|
260
|
+
}
|
|
261
|
+
if (!response.body) {
|
|
262
|
+
throw new Error('Translation response did not include a progress stream.');
|
|
263
|
+
}
|
|
264
|
+
reader = response.body.getReader();
|
|
265
|
+
decoder = new TextDecoder();
|
|
266
|
+
buffer = '';
|
|
267
|
+
translationFailed_1 = false;
|
|
268
|
+
_loop_1 = function () {
|
|
269
|
+
var _c, done, value, lines, event_1, nextStatus_1;
|
|
270
|
+
return __generator(this, function (_d) {
|
|
271
|
+
switch (_d.label) {
|
|
272
|
+
case 0: return [4 /*yield*/, reader.read()];
|
|
273
|
+
case 1:
|
|
274
|
+
_c = _d.sent(), done = _c.done, value = _c.value;
|
|
275
|
+
buffer += decoder.decode(value || new Uint8Array(), { stream: !done });
|
|
276
|
+
lines = buffer.split('\n');
|
|
277
|
+
buffer = lines.pop() || '';
|
|
278
|
+
lines.forEach(function (line) {
|
|
279
|
+
var trimmedLine = line.trim();
|
|
280
|
+
if (!trimmedLine)
|
|
281
|
+
return;
|
|
282
|
+
var event = JSON.parse(trimmedLine);
|
|
283
|
+
var nextStatus = event.status;
|
|
284
|
+
if (event.type === 'language' && event.language && nextStatus) {
|
|
285
|
+
setLanguageStatuses(function (previousState) {
|
|
286
|
+
var _a;
|
|
287
|
+
return (__assign(__assign({}, previousState), (_a = {}, _a[event.language] = {
|
|
288
|
+
error: event.error,
|
|
289
|
+
status: nextStatus,
|
|
290
|
+
}, _a)));
|
|
291
|
+
});
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
if (event.type === 'error') {
|
|
295
|
+
translationFailed_1 = true;
|
|
296
|
+
setStatusMessage(event.message || 'Translation failed.');
|
|
297
|
+
}
|
|
298
|
+
if (event.type === 'complete') {
|
|
299
|
+
setStatusMessage('Translation finished.');
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
if (done) {
|
|
303
|
+
if (buffer.trim()) {
|
|
304
|
+
event_1 = JSON.parse(buffer.trim());
|
|
305
|
+
nextStatus_1 = event_1.status;
|
|
306
|
+
if (event_1.type === 'language' && event_1.language && nextStatus_1) {
|
|
307
|
+
setLanguageStatuses(function (previousState) {
|
|
308
|
+
var _a;
|
|
309
|
+
return (__assign(__assign({}, previousState), (_a = {}, _a[event_1.language] = {
|
|
310
|
+
error: event_1.error,
|
|
311
|
+
status: nextStatus_1,
|
|
312
|
+
}, _a)));
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
if (event_1.type === 'error') {
|
|
316
|
+
translationFailed_1 = true;
|
|
317
|
+
setStatusMessage(event_1.message || 'Translation failed.');
|
|
318
|
+
}
|
|
319
|
+
if (event_1.type === 'complete') {
|
|
320
|
+
setStatusMessage('Translation finished.');
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
if (translationFailed_1) {
|
|
324
|
+
throw new Error('Translation failed.');
|
|
325
|
+
}
|
|
326
|
+
return [2 /*return*/, "break"];
|
|
327
|
+
}
|
|
328
|
+
return [2 /*return*/];
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
};
|
|
332
|
+
_b.label = 3;
|
|
164
333
|
case 3:
|
|
165
|
-
|
|
166
|
-
return [
|
|
334
|
+
if (!true) return [3 /*break*/, 5];
|
|
335
|
+
return [5 /*yield**/, _loop_1()];
|
|
167
336
|
case 4:
|
|
337
|
+
state_1 = _b.sent();
|
|
338
|
+
if (state_1 === "break")
|
|
339
|
+
return [3 /*break*/, 5];
|
|
340
|
+
return [3 /*break*/, 3];
|
|
341
|
+
case 5: return [3 /*break*/, 8];
|
|
342
|
+
case 6:
|
|
168
343
|
error_1 = _b.sent();
|
|
344
|
+
setStatusMessage((error_1 === null || error_1 === void 0 ? void 0 : error_1.message) || 'Translation failed.');
|
|
169
345
|
console.error(error_1);
|
|
170
|
-
return [3 /*break*/,
|
|
171
|
-
case
|
|
346
|
+
return [3 /*break*/, 8];
|
|
347
|
+
case 7:
|
|
172
348
|
setIsLoading(false);
|
|
173
349
|
return [7 /*endfinally*/];
|
|
174
|
-
case
|
|
350
|
+
case 8: return [2 /*return*/];
|
|
175
351
|
}
|
|
176
352
|
});
|
|
177
353
|
});
|
|
178
354
|
};
|
|
179
|
-
var
|
|
180
|
-
setIsOpen(true);
|
|
181
|
-
}, []);
|
|
182
|
-
var handleCloseTranslator = (0, react_1.useCallback)(function () {
|
|
183
|
-
setIsOpen(false);
|
|
184
|
-
}, []);
|
|
185
|
-
var modelOptions = [
|
|
186
|
-
{
|
|
187
|
-
label: 'Default',
|
|
188
|
-
value: 'default',
|
|
189
|
-
},
|
|
190
|
-
{
|
|
191
|
-
label: 'GPT-5 Mini ($0.25 in / $2.00 out per 1M)',
|
|
192
|
-
value: 'gpt-5-mini',
|
|
193
|
-
},
|
|
194
|
-
{
|
|
195
|
-
label: 'GPT-4.1 Mini ($0.80 in / $3.20 out per 1M)',
|
|
196
|
-
value: 'gpt-4.1-mini',
|
|
197
|
-
},
|
|
198
|
-
{
|
|
199
|
-
label: 'o3 ($2.00 in / $8.00 out per 1M)',
|
|
200
|
-
value: 'o3',
|
|
201
|
-
},
|
|
202
|
-
{
|
|
203
|
-
label: 'GPT-5 ($1.25 in / $10.00 out per 1M)',
|
|
204
|
-
value: 'gpt-5',
|
|
205
|
-
},
|
|
206
|
-
];
|
|
207
|
-
var sourceLocaleOptions = locales.map(function (locale) { return ({
|
|
208
|
-
label: locale.label,
|
|
209
|
-
value: locale.code,
|
|
210
|
-
}); });
|
|
211
|
-
var translatorControls = isLoading ? (react_1.default.createElement(ui_1.Button, { className: "".concat(baseClass, "__loading"), disabled: true }, "Results are loading...")) : (react_1.default.createElement("div", { className: "".concat(baseClass, "__content") },
|
|
355
|
+
var translatorControls = (react_1.default.createElement("div", { className: "".concat(baseClass, "__content") },
|
|
212
356
|
react_1.default.createElement("p", { className: "".concat(baseClass, "__description") }, "Choose source locale and AI model, then start translation for this document."),
|
|
357
|
+
statusMessage ? react_1.default.createElement("p", { className: "".concat(baseClass, "__status-message") }, statusMessage) : null,
|
|
358
|
+
visibleLanguageStatuses.length ? (react_1.default.createElement("div", { className: "".concat(baseClass, "__status-panel"), "aria-live": "polite" },
|
|
359
|
+
react_1.default.createElement("p", { className: "".concat(baseClass, "__label") }, "Language status"),
|
|
360
|
+
react_1.default.createElement("div", { className: "".concat(baseClass, "__status-list") }, visibleLanguageStatuses.map(function (language) { return (react_1.default.createElement("div", { key: language.code, className: "".concat(baseClass, "__status-item") },
|
|
361
|
+
react_1.default.createElement("div", null,
|
|
362
|
+
react_1.default.createElement("p", { className: "".concat(baseClass, "__status-language") }, language.label),
|
|
363
|
+
language.error ? (react_1.default.createElement("p", { className: "".concat(baseClass, "__status-error") }, language.error)) : null),
|
|
364
|
+
react_1.default.createElement("span", { className: "".concat(baseClass, "__status-pill ").concat(baseClass, "__status-pill--").concat(language.status) },
|
|
365
|
+
react_1.default.createElement("span", { className: "".concat(baseClass, "__status-dot") }),
|
|
366
|
+
statusLabelMap[language.status]))); })))) : null,
|
|
213
367
|
react_1.default.createElement("div", { className: "".concat(baseClass, "__field") },
|
|
214
368
|
react_1.default.createElement("p", { className: "".concat(baseClass, "__label") }, "Model"),
|
|
215
369
|
react_1.default.createElement("div", { className: "".concat(baseClass, "__radio-group"), role: "radiogroup", "aria-label": "Model" }, modelOptions.map(function (option) { return (react_1.default.createElement("label", { key: option.value, className: "".concat(baseClass, "__radio-option") },
|