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.
Files changed (127) hide show
  1. package/dist/aiCaption.js +0 -2
  2. package/dist/aiCaption.js.map +1 -1
  3. package/dist/aiTranslate.d.ts +1 -1
  4. package/dist/aiTranslate.js +81 -22
  5. package/dist/aiTranslate.js.map +1 -1
  6. package/dist/components/Translator/Translator.scss +111 -0
  7. package/dist/components/Translator/index.js +197 -43
  8. package/dist/components/Translator/index.js.map +1 -1
  9. package/dist/deepCompareAndMerge.js +0 -1
  10. package/dist/deepCompareAndMerge.js.map +1 -1
  11. package/dist/handleTranslate.js +74 -1
  12. package/dist/handleTranslate.js.map +1 -1
  13. package/dist/seoTools.js +0 -1
  14. package/dist/seoTools.js.map +1 -1
  15. package/dist/translateTextAndObjects.js +20 -4
  16. package/dist/translateTextAndObjects.js.map +1 -1
  17. package/package.json +9 -6
  18. package/.editorconfig +0 -10
  19. package/.eslintrc.js +0 -17
  20. package/.prettierrc.js +0 -8
  21. package/dev/.env.example +0 -3
  22. package/dev/Dockerfile +0 -27
  23. package/dev/docker-compose.yml +0 -31
  24. package/dev/jest.config.js +0 -12
  25. package/dev/nodemon.json +0 -6
  26. package/dev/package.json +0 -34
  27. package/dev/plugin.spec.ts +0 -30
  28. package/dev/src/blocks/TextBlock/index.ts +0 -33
  29. package/dev/src/collections/Examples.ts +0 -38
  30. package/dev/src/collections/ExamplesWithVersions.ts +0 -31
  31. package/dev/src/collections/Media.ts +0 -43
  32. package/dev/src/collections/Users.ts +0 -15
  33. package/dev/src/media/IMG_3624-1024x768.jpg +0 -0
  34. package/dev/src/media/IMG_3624.jpeg +0 -0
  35. package/dev/src/mocks/fileStub.js +0 -1
  36. package/dev/src/payload.config.ts +0 -71
  37. package/dev/src/server.ts +0 -18
  38. package/dev/tsconfig.json +0 -34
  39. package/dev-v3/.cursor/rules/access-control-advanced.md +0 -519
  40. package/dev-v3/.cursor/rules/access-control.md +0 -225
  41. package/dev-v3/.cursor/rules/adapters.md +0 -209
  42. package/dev-v3/.cursor/rules/collections.md +0 -171
  43. package/dev-v3/.cursor/rules/components.md +0 -794
  44. package/dev-v3/.cursor/rules/endpoints.md +0 -236
  45. package/dev-v3/.cursor/rules/field-type-guards.md +0 -230
  46. package/dev-v3/.cursor/rules/fields.md +0 -317
  47. package/dev-v3/.cursor/rules/hooks.md +0 -175
  48. package/dev-v3/.cursor/rules/payload-overview.md +0 -126
  49. package/dev-v3/.cursor/rules/plugin-development.md +0 -323
  50. package/dev-v3/.cursor/rules/queries.md +0 -223
  51. package/dev-v3/.cursor/rules/security-critical.mdc +0 -122
  52. package/dev-v3/.env.example +0 -2
  53. package/dev-v3/.prettierrc.json +0 -6
  54. package/dev-v3/.vscode/extensions.json +0 -3
  55. package/dev-v3/.vscode/launch.json +0 -24
  56. package/dev-v3/.vscode/settings.json +0 -40
  57. package/dev-v3/.yarnrc +0 -1
  58. package/dev-v3/AGENTS.md +0 -1141
  59. package/dev-v3/Dockerfile +0 -71
  60. package/dev-v3/README.md +0 -67
  61. package/dev-v3/docker-compose.yml +0 -43
  62. package/dev-v3/eslint.config.mjs +0 -38
  63. package/dev-v3/next.config.mjs +0 -17
  64. package/dev-v3/package.json +0 -61
  65. package/dev-v3/playwright.config.ts +0 -41
  66. package/dev-v3/src/app/(frontend)/layout.tsx +0 -19
  67. package/dev-v3/src/app/(frontend)/page.tsx +0 -59
  68. package/dev-v3/src/app/(frontend)/styles.css +0 -164
  69. package/dev-v3/src/app/(payload)/admin/[[...segments]]/not-found.tsx +0 -24
  70. package/dev-v3/src/app/(payload)/admin/[[...segments]]/page.tsx +0 -24
  71. package/dev-v3/src/app/(payload)/admin/importMap.js +0 -7
  72. package/dev-v3/src/app/(payload)/api/[...slug]/route.ts +0 -19
  73. package/dev-v3/src/app/(payload)/api/graphql/route.ts +0 -8
  74. package/dev-v3/src/app/(payload)/api/graphql-playground/route.ts +0 -7
  75. package/dev-v3/src/app/(payload)/custom.scss +0 -0
  76. package/dev-v3/src/app/(payload)/layout.tsx +0 -31
  77. package/dev-v3/src/app/my-route/route.ts +0 -12
  78. package/dev-v3/src/collections/Media.ts +0 -17
  79. package/dev-v3/src/collections/Random.ts +0 -16
  80. package/dev-v3/src/collections/Users.ts +0 -13
  81. package/dev-v3/src/payload-types.ts +0 -401
  82. package/dev-v3/src/payload.config.ts +0 -61
  83. package/dev-v3/test.env +0 -1
  84. package/dev-v3/tests/e2e/admin.e2e.spec.ts +0 -41
  85. package/dev-v3/tests/e2e/frontend.e2e.spec.ts +0 -20
  86. package/dev-v3/tests/helpers/login.ts +0 -31
  87. package/dev-v3/tests/helpers/seedUser.ts +0 -46
  88. package/dev-v3/tests/int/api.int.spec.ts +0 -20
  89. package/dev-v3/tsconfig.json +0 -44
  90. package/dev-v3/vitest.config.mts +0 -12
  91. package/dev-v3/vitest.setup.ts +0 -4
  92. package/dev-v3/yarn.lock +0 -6102
  93. package/eslint-config/index.js +0 -15
  94. package/eslint-config/rules/import.js +0 -38
  95. package/eslint-config/rules/prettier.js +0 -7
  96. package/eslint-config/rules/style.js +0 -21
  97. package/eslint-config/rules/typescript.js +0 -628
  98. package/src/access/admins.ts +0 -11
  99. package/src/access/adminsOrPublished.ts +0 -16
  100. package/src/access/anyone.ts +0 -3
  101. package/src/access/checkRole.ts +0 -16
  102. package/src/access/validateAccess.ts +0 -28
  103. package/src/aiCaption.ts +0 -90
  104. package/src/aiTranslate.ts +0 -113
  105. package/src/components/AfterDashboard/index.scss +0 -10
  106. package/src/components/AfterDashboard/index.tsx +0 -18
  107. package/src/components/Metadata/index.scss +0 -10
  108. package/src/components/Metadata/index.tsx +0 -55
  109. package/src/components/Translator/Translator.scss +0 -85
  110. package/src/components/Translator/index.tsx +0 -258
  111. package/src/countries.json +0 -193
  112. package/src/deepCompareAndMerge.ts +0 -83
  113. package/src/fsMock.js +0 -1
  114. package/src/generateImage.ts +0 -37
  115. package/src/generateText.ts +0 -40
  116. package/src/handleMissingTranslate.ts +0 -77
  117. package/src/handleTranslate.ts +0 -74
  118. package/src/index.ts +0 -4
  119. package/src/mocks/mockFile.js +0 -1
  120. package/src/onInitExtension.ts +0 -12
  121. package/src/plugin.ts +0 -207
  122. package/src/seoTools.ts +0 -75
  123. package/src/stringTranslations.ts +0 -183
  124. package/src/translateTextAndObjects.ts +0 -310
  125. package/src/types.ts +0 -22
  126. package/src/webpack.ts +0 -8
  127. 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))];
@@ -1 +1 @@
1
- {"version":3,"file":"aiCaption.js","sourceRoot":"","sources":["../src/aiCaption.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aiCaption.js","sourceRoot":"","sources":["../src/aiCaption.ts"],"names":[],"mappings":"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"}
@@ -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>;
@@ -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, _i, translationResults_1, translatedContent, updatedLanguage;
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 (_d) {
97
- switch (_d.label) {
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
- translationPromises = localCodes
119
- .filter(function (targetLanguage) {
118
+ targetLanguages = localCodes.filter(function (targetLanguage) {
120
119
  return targetLanguage !== sourceLanguageI && (!codes || codes.includes(targetLanguage));
121
- })
122
- .map(function (tL) { return __awaiter(_this, void 0, void 0, function () {
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 1:
146
- translationResults = _d.sent();
147
- _i = 0, translationResults_1 = translationResults;
148
- _d.label = 2;
149
- case 2:
150
- if (!(_i < translationResults_1.length)) return [3 /*break*/, 5];
151
- translatedContent = translationResults_1[_i];
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 3:
165
- updatedLanguage = _d.sent();
166
- _d.label = 4;
167
- case 4:
168
- _i++;
169
- return [3 /*break*/, 2];
170
- case 5: return [2 /*return*/];
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
  });
@@ -1 +1 @@
1
- {"version":3,"file":"aiTranslate.js","sourceRoot":"","sources":["../src/aiTranslate.ts"],"names":[],"mappings":"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"}
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('default'), selectedModel = _h[0], setSelectedModel = _h[1];
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 _j = react_1.default.useState(activeLocaleCode), selectedSourceLocale = _j[0], setSelectedSourceLocal = _j[1];
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, 4, 5, 6]);
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
- return [4 /*yield*/, response.json()];
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
- _b.sent();
166
- return [3 /*break*/, 6];
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*/, 6];
171
- case 5:
346
+ return [3 /*break*/, 8];
347
+ case 7:
172
348
  setIsLoading(false);
173
349
  return [7 /*endfinally*/];
174
- case 6: return [2 /*return*/];
350
+ case 8: return [2 /*return*/];
175
351
  }
176
352
  });
177
353
  });
178
354
  };
179
- var handleOpenTranslator = (0, react_1.useCallback)(function () {
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") },