@easyling/sanity-connector 0.0.1

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 (244) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +482 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/actions/bulkTranslate.d.ts +7 -0
  5. package/dist/actions/bulkTranslate.d.ts.map +1 -0
  6. package/dist/actions/bulkTranslate.js +543 -0
  7. package/dist/actions/bulkTranslate.js.map +1 -0
  8. package/dist/actions/manageDNTFields.d.ts +12 -0
  9. package/dist/actions/manageDNTFields.d.ts.map +1 -0
  10. package/dist/actions/manageDNTFields.js +100 -0
  11. package/dist/actions/manageDNTFields.js.map +1 -0
  12. package/dist/actions/translateDocument.d.ts +7 -0
  13. package/dist/actions/translateDocument.d.ts.map +1 -0
  14. package/dist/actions/translateDocument.js +256 -0
  15. package/dist/actions/translateDocument.js.map +1 -0
  16. package/dist/components/RadioWithDefault.d.ts +17 -0
  17. package/dist/components/RadioWithDefault.d.ts.map +1 -0
  18. package/dist/components/RadioWithDefault.js +29 -0
  19. package/dist/components/RadioWithDefault.js.map +1 -0
  20. package/dist/components/auth/AuthNavbar.d.ts +18 -0
  21. package/dist/components/auth/AuthNavbar.d.ts.map +1 -0
  22. package/dist/components/auth/AuthNavbar.js +15 -0
  23. package/dist/components/auth/AuthNavbar.js.map +1 -0
  24. package/dist/components/auth/AuthStatus.d.ts +27 -0
  25. package/dist/components/auth/AuthStatus.d.ts.map +1 -0
  26. package/dist/components/auth/AuthStatus.js +82 -0
  27. package/dist/components/auth/AuthStatus.js.map +1 -0
  28. package/dist/components/auth/AuthStatusWrapper.d.ts +15 -0
  29. package/dist/components/auth/AuthStatusWrapper.d.ts.map +1 -0
  30. package/dist/components/auth/AuthStatusWrapper.js +39 -0
  31. package/dist/components/auth/AuthStatusWrapper.js.map +1 -0
  32. package/dist/components/auth/MigrationPrompt.d.ts +20 -0
  33. package/dist/components/auth/MigrationPrompt.d.ts.map +1 -0
  34. package/dist/components/auth/MigrationPrompt.js +16 -0
  35. package/dist/components/auth/MigrationPrompt.js.map +1 -0
  36. package/dist/components/auth/MigrationPromptWrapper.d.ts +14 -0
  37. package/dist/components/auth/MigrationPromptWrapper.d.ts.map +1 -0
  38. package/dist/components/auth/MigrationPromptWrapper.js +16 -0
  39. package/dist/components/auth/MigrationPromptWrapper.js.map +1 -0
  40. package/dist/components/auth/OAuthCallback.d.ts +20 -0
  41. package/dist/components/auth/OAuthCallback.d.ts.map +1 -0
  42. package/dist/components/auth/OAuthCallback.js +12 -0
  43. package/dist/components/auth/OAuthCallback.js.map +1 -0
  44. package/dist/components/auth/index.d.ts +15 -0
  45. package/dist/components/auth/index.d.ts.map +1 -0
  46. package/dist/components/auth/index.js +12 -0
  47. package/dist/components/auth/index.js.map +1 -0
  48. package/dist/components/config/LocaleConfigTool.d.ts +17 -0
  49. package/dist/components/config/LocaleConfigTool.d.ts.map +1 -0
  50. package/dist/components/config/LocaleConfigTool.js +186 -0
  51. package/dist/components/config/LocaleConfigTool.js.map +1 -0
  52. package/dist/components/config/LocaleConfigToolWrapper.d.ts +13 -0
  53. package/dist/components/config/LocaleConfigToolWrapper.d.ts.map +1 -0
  54. package/dist/components/config/LocaleConfigToolWrapper.js +26 -0
  55. package/dist/components/config/LocaleConfigToolWrapper.js.map +1 -0
  56. package/dist/components/config/OAuthConfig.d.ts +26 -0
  57. package/dist/components/config/OAuthConfig.d.ts.map +1 -0
  58. package/dist/components/config/OAuthConfig.js +152 -0
  59. package/dist/components/config/OAuthConfig.js.map +1 -0
  60. package/dist/components/config/OAuthConfigWrapper.d.ts +13 -0
  61. package/dist/components/config/OAuthConfigWrapper.d.ts.map +1 -0
  62. package/dist/components/config/OAuthConfigWrapper.js +41 -0
  63. package/dist/components/config/OAuthConfigWrapper.js.map +1 -0
  64. package/dist/components/config/PasswordInput.d.ts +14 -0
  65. package/dist/components/config/PasswordInput.d.ts.map +1 -0
  66. package/dist/components/config/PasswordInput.js +23 -0
  67. package/dist/components/config/PasswordInput.js.map +1 -0
  68. package/dist/components/config/index.d.ts +9 -0
  69. package/dist/components/config/index.d.ts.map +1 -0
  70. package/dist/components/config/index.js +8 -0
  71. package/dist/components/config/index.js.map +1 -0
  72. package/dist/components/config/localeConfigToolDefinition.d.ts +13 -0
  73. package/dist/components/config/localeConfigToolDefinition.d.ts.map +1 -0
  74. package/dist/components/config/localeConfigToolDefinition.js +19 -0
  75. package/dist/components/config/localeConfigToolDefinition.js.map +1 -0
  76. package/dist/components/config/oauthConfigToolDefinition.d.ts +13 -0
  77. package/dist/components/config/oauthConfigToolDefinition.d.ts.map +1 -0
  78. package/dist/components/config/oauthConfigToolDefinition.js +19 -0
  79. package/dist/components/config/oauthConfigToolDefinition.js.map +1 -0
  80. package/dist/components/dialogs/ConfirmationDialog.d.ts +21 -0
  81. package/dist/components/dialogs/ConfirmationDialog.d.ts.map +1 -0
  82. package/dist/components/dialogs/ConfirmationDialog.js +28 -0
  83. package/dist/components/dialogs/ConfirmationDialog.js.map +1 -0
  84. package/dist/components/dialogs/ErrorDialog.d.ts +21 -0
  85. package/dist/components/dialogs/ErrorDialog.d.ts.map +1 -0
  86. package/dist/components/dialogs/ErrorDialog.js +28 -0
  87. package/dist/components/dialogs/ErrorDialog.js.map +1 -0
  88. package/dist/components/dialogs/LocaleSelectionDialog.d.ts +41 -0
  89. package/dist/components/dialogs/LocaleSelectionDialog.d.ts.map +1 -0
  90. package/dist/components/dialogs/LocaleSelectionDialog.js +117 -0
  91. package/dist/components/dialogs/LocaleSelectionDialog.js.map +1 -0
  92. package/dist/components/dialogs/SuccessDialog.d.ts +19 -0
  93. package/dist/components/dialogs/SuccessDialog.d.ts.map +1 -0
  94. package/dist/components/dialogs/SuccessDialog.js +37 -0
  95. package/dist/components/dialogs/SuccessDialog.js.map +1 -0
  96. package/dist/components/dialogs/index.d.ts +12 -0
  97. package/dist/components/dialogs/index.d.ts.map +1 -0
  98. package/dist/components/dialogs/index.js +8 -0
  99. package/dist/components/dialogs/index.js.map +1 -0
  100. package/dist/components/dnt/DNTFieldBadge.d.ts +16 -0
  101. package/dist/components/dnt/DNTFieldBadge.d.ts.map +1 -0
  102. package/dist/components/dnt/DNTFieldBadge.js +56 -0
  103. package/dist/components/dnt/DNTFieldBadge.js.map +1 -0
  104. package/dist/components/dnt/DNTFieldComponent.d.ts +17 -0
  105. package/dist/components/dnt/DNTFieldComponent.d.ts.map +1 -0
  106. package/dist/components/dnt/DNTFieldComponent.js +21 -0
  107. package/dist/components/dnt/DNTFieldComponent.js.map +1 -0
  108. package/dist/components/dnt/DNTFieldInput.d.ts +14 -0
  109. package/dist/components/dnt/DNTFieldInput.d.ts.map +1 -0
  110. package/dist/components/dnt/DNTFieldInput.js +76 -0
  111. package/dist/components/dnt/DNTFieldInput.js.map +1 -0
  112. package/dist/components/dnt/index.d.ts +7 -0
  113. package/dist/components/dnt/index.d.ts.map +1 -0
  114. package/dist/components/dnt/index.js +7 -0
  115. package/dist/components/dnt/index.js.map +1 -0
  116. package/dist/config/index.d.ts +6 -0
  117. package/dist/config/index.d.ts.map +1 -0
  118. package/dist/config/index.js +6 -0
  119. package/dist/config/index.js.map +1 -0
  120. package/dist/config/pluginConfig.d.ts +163 -0
  121. package/dist/config/pluginConfig.d.ts.map +1 -0
  122. package/dist/config/pluginConfig.js +548 -0
  123. package/dist/config/pluginConfig.js.map +1 -0
  124. package/dist/index.d.ts +12 -0
  125. package/dist/index.d.ts.map +1 -0
  126. package/dist/index.js +12 -0
  127. package/dist/index.js.map +1 -0
  128. package/dist/plugin.d.ts +3 -0
  129. package/dist/plugin.d.ts.map +1 -0
  130. package/dist/plugin.js +137 -0
  131. package/dist/plugin.js.map +1 -0
  132. package/dist/services/authStateManager.d.ts +94 -0
  133. package/dist/services/authStateManager.d.ts.map +1 -0
  134. package/dist/services/authStateManager.js +208 -0
  135. package/dist/services/authStateManager.js.map +1 -0
  136. package/dist/services/contentExtractor.d.ts +95 -0
  137. package/dist/services/contentExtractor.d.ts.map +1 -0
  138. package/dist/services/contentExtractor.js +516 -0
  139. package/dist/services/contentExtractor.js.map +1 -0
  140. package/dist/services/dialogService.d.ts +96 -0
  141. package/dist/services/dialogService.d.ts.map +1 -0
  142. package/dist/services/dialogService.js +244 -0
  143. package/dist/services/dialogService.js.map +1 -0
  144. package/dist/services/dntServiceManager.d.ts +44 -0
  145. package/dist/services/dntServiceManager.d.ts.map +1 -0
  146. package/dist/services/dntServiceManager.js +74 -0
  147. package/dist/services/dntServiceManager.js.map +1 -0
  148. package/dist/services/dntStorageAdapter.d.ts +73 -0
  149. package/dist/services/dntStorageAdapter.d.ts.map +1 -0
  150. package/dist/services/dntStorageAdapter.js +192 -0
  151. package/dist/services/dntStorageAdapter.js.map +1 -0
  152. package/dist/services/documentCreationService.d.ts +139 -0
  153. package/dist/services/documentCreationService.d.ts.map +1 -0
  154. package/dist/services/documentCreationService.js +938 -0
  155. package/dist/services/documentCreationService.js.map +1 -0
  156. package/dist/services/localeService.d.ts +160 -0
  157. package/dist/services/localeService.d.ts.map +1 -0
  158. package/dist/services/localeService.js +300 -0
  159. package/dist/services/localeService.js.map +1 -0
  160. package/dist/services/localeStorageAdapter.d.ts +42 -0
  161. package/dist/services/localeStorageAdapter.d.ts.map +1 -0
  162. package/dist/services/localeStorageAdapter.js +107 -0
  163. package/dist/services/localeStorageAdapter.js.map +1 -0
  164. package/dist/services/oauthConfigStorage.d.ts +46 -0
  165. package/dist/services/oauthConfigStorage.d.ts.map +1 -0
  166. package/dist/services/oauthConfigStorage.js +122 -0
  167. package/dist/services/oauthConfigStorage.js.map +1 -0
  168. package/dist/services/oauthService.d.ts +48 -0
  169. package/dist/services/oauthService.d.ts.map +1 -0
  170. package/dist/services/oauthService.js +71 -0
  171. package/dist/services/oauthService.js.map +1 -0
  172. package/dist/services/oauthServiceManager.d.ts +189 -0
  173. package/dist/services/oauthServiceManager.d.ts.map +1 -0
  174. package/dist/services/oauthServiceManager.js +380 -0
  175. package/dist/services/oauthServiceManager.js.map +1 -0
  176. package/dist/services/tokenStorage.d.ts +54 -0
  177. package/dist/services/tokenStorage.d.ts.map +1 -0
  178. package/dist/services/tokenStorage.js +140 -0
  179. package/dist/services/tokenStorage.js.map +1 -0
  180. package/dist/services/translationService.d.ts +374 -0
  181. package/dist/services/translationService.d.ts.map +1 -0
  182. package/dist/services/translationService.js +687 -0
  183. package/dist/services/translationService.js.map +1 -0
  184. package/dist/services/unifiedConfigStorage.d.ts +124 -0
  185. package/dist/services/unifiedConfigStorage.d.ts.map +1 -0
  186. package/dist/services/unifiedConfigStorage.js +304 -0
  187. package/dist/services/unifiedConfigStorage.js.map +1 -0
  188. package/dist/test-utils.d.ts +9 -0
  189. package/dist/test-utils.d.ts.map +1 -0
  190. package/dist/test-utils.js +13 -0
  191. package/dist/test-utils.js.map +1 -0
  192. package/dist/types/dialog.d.ts +107 -0
  193. package/dist/types/dialog.d.ts.map +1 -0
  194. package/dist/types/dialog.js +6 -0
  195. package/dist/types/dialog.js.map +1 -0
  196. package/dist/types/dnt.d.ts +84 -0
  197. package/dist/types/dnt.d.ts.map +1 -0
  198. package/dist/types/dnt.js +5 -0
  199. package/dist/types/dnt.js.map +1 -0
  200. package/dist/types/index.d.ts +12 -0
  201. package/dist/types/index.d.ts.map +1 -0
  202. package/dist/types/index.js +6 -0
  203. package/dist/types/index.js.map +1 -0
  204. package/dist/types/locale.d.ts +116 -0
  205. package/dist/types/locale.d.ts.map +1 -0
  206. package/dist/types/locale.js +189 -0
  207. package/dist/types/locale.js.map +1 -0
  208. package/dist/types/oauth.d.ts +90 -0
  209. package/dist/types/oauth.d.ts.map +1 -0
  210. package/dist/types/oauth.js +62 -0
  211. package/dist/types/oauth.js.map +1 -0
  212. package/dist/types/pluginConfig.d.ts +45 -0
  213. package/dist/types/pluginConfig.d.ts.map +1 -0
  214. package/dist/types/pluginConfig.js +6 -0
  215. package/dist/types/pluginConfig.js.map +1 -0
  216. package/dist/types/translation.d.ts +122 -0
  217. package/dist/types/translation.d.ts.map +1 -0
  218. package/dist/types/translation.js +6 -0
  219. package/dist/types/translation.js.map +1 -0
  220. package/dist/utils/htmlFormatter.d.ts +66 -0
  221. package/dist/utils/htmlFormatter.d.ts.map +1 -0
  222. package/dist/utils/htmlFormatter.js +191 -0
  223. package/dist/utils/htmlFormatter.js.map +1 -0
  224. package/dist/utils/index.d.ts +15 -0
  225. package/dist/utils/index.d.ts.map +1 -0
  226. package/dist/utils/index.js +16 -0
  227. package/dist/utils/index.js.map +1 -0
  228. package/dist/utils/logger.d.ts +105 -0
  229. package/dist/utils/logger.d.ts.map +1 -0
  230. package/dist/utils/logger.js +229 -0
  231. package/dist/utils/logger.js.map +1 -0
  232. package/dist/utils/oauthErrorFeedback.d.ts +76 -0
  233. package/dist/utils/oauthErrorFeedback.d.ts.map +1 -0
  234. package/dist/utils/oauthErrorFeedback.js +134 -0
  235. package/dist/utils/oauthErrorFeedback.js.map +1 -0
  236. package/dist/utils/oauthLogger.d.ts +176 -0
  237. package/dist/utils/oauthLogger.d.ts.map +1 -0
  238. package/dist/utils/oauthLogger.js +282 -0
  239. package/dist/utils/oauthLogger.js.map +1 -0
  240. package/dist/utils/validator.d.ts +67 -0
  241. package/dist/utils/validator.d.ts.map +1 -0
  242. package/dist/utils/validator.js +390 -0
  243. package/dist/utils/validator.js.map +1 -0
  244. package/package.json +80 -0
@@ -0,0 +1,7 @@
1
+ import { Tool } from 'sanity';
2
+ /**
3
+ * Bulk Translation Tool Definition
4
+ * Requirements: 2.1, 2.5, 4.1, 4.2
5
+ */
6
+ export declare const bulkTranslateTool: Tool;
7
+ //# sourceMappingURL=bulkTranslate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulkTranslate.d.ts","sourceRoot":"","sources":["../../src/actions/bulkTranslate.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAA6B,MAAM,QAAQ,CAAC;AA8lCzD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,IAK/B,CAAC"}
@@ -0,0 +1,543 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useCallback, useEffect } from 'react';
3
+ import { useClient } from 'sanity';
4
+ import { TranslateIcon, CheckmarkIcon, CloseIcon, WarningOutlineIcon, RefreshIcon, ChevronDownIcon, ChevronRightIcon } from '@sanity/icons';
5
+ import { Card, Stack, Text, Button, Flex, Box, Spinner, Badge, Checkbox } from '@sanity/ui';
6
+ import { ContentExtractor } from '../services/contentExtractor';
7
+ import { DocumentCreationService } from '../services/documentCreationService';
8
+ import { LocaleService } from '../services/localeService';
9
+ import { SanityLocaleStorageAdapter } from '../services/localeStorageAdapter';
10
+ import { useDialogService } from '../services/dialogService';
11
+ import { OAuthServiceManager } from '../services/oauthServiceManager';
12
+ /**
13
+ * Bulk Translation Tool Component
14
+ * Requirements: 2.2, 2.4, 3.1, 3.4, 4.1, 4.3
15
+ */
16
+ const BulkTranslateTool = () => {
17
+ const client = useClient();
18
+ const dialogService = useDialogService();
19
+ const [state, setState] = useState({
20
+ isProcessing: false,
21
+ isLoadingDocuments: false,
22
+ selectedDocuments: [],
23
+ availableDocuments: {},
24
+ selectedTypes: new Set(),
25
+ selectedDocumentIds: new Set(),
26
+ expandedTypes: new Set(),
27
+ summary: null,
28
+ error: null,
29
+ processingStatus: [],
30
+ currentProcessingIndex: -1,
31
+ createDocuments: false,
32
+ documentCreationResult: null,
33
+ selectedLocales: null
34
+ });
35
+ /**
36
+ * Fetch all documents from Sanity, grouped by type and ordered by creation date
37
+ */
38
+ const fetchDocuments = useCallback(async () => {
39
+ setState(prev => ({ ...prev, isLoadingDocuments: true, error: null }));
40
+ try {
41
+ // Query all documents, excluding system documents, Sanity internal documents, and plugin internal types (EL_*)
42
+ const query = `*[!(_id in path("_.**")) && !(_type match "sanity.**") && !(_type match "EL_*")] | order(_createdAt desc) {
43
+ _id,
44
+ _type,
45
+ _createdAt,
46
+ _updatedAt,
47
+ _rev,
48
+ title,
49
+ name,
50
+ heading,
51
+ label,
52
+ ...
53
+ }`;
54
+ console.log('Fetching documents from Sanity...');
55
+ const documents = await client.fetch(query);
56
+ console.log(`Fetched ${documents.length} documents`);
57
+ // Group documents by type
58
+ const documentsByType = {};
59
+ documents.forEach(doc => {
60
+ if (!documentsByType[doc._type]) {
61
+ documentsByType[doc._type] = [];
62
+ }
63
+ documentsByType[doc._type].push(doc);
64
+ });
65
+ // Log the grouping for debugging
66
+ Object.keys(documentsByType).forEach(type => {
67
+ console.log(`Type "${type}": ${documentsByType[type].length} documents`);
68
+ });
69
+ setState(prev => ({
70
+ ...prev,
71
+ availableDocuments: documentsByType,
72
+ isLoadingDocuments: false
73
+ }));
74
+ }
75
+ catch (error) {
76
+ console.error('Failed to fetch documents:', error);
77
+ setState(prev => ({
78
+ ...prev,
79
+ error: error instanceof Error ? error.message : 'Failed to fetch documents',
80
+ isLoadingDocuments: false
81
+ }));
82
+ }
83
+ }, [client]);
84
+ // Load documents on component mount
85
+ useEffect(() => {
86
+ fetchDocuments();
87
+ }, [fetchDocuments]);
88
+ /**
89
+ * Handle document type selection (select/deselect all documents of a type)
90
+ */
91
+ const handleTypeSelection = useCallback((type, selected) => {
92
+ setState(prev => {
93
+ const newSelectedTypes = new Set(prev.selectedTypes);
94
+ const newSelectedDocumentIds = new Set(prev.selectedDocumentIds);
95
+ if (selected) {
96
+ newSelectedTypes.add(type);
97
+ // Add all documents of this type to selected documents
98
+ if (prev.availableDocuments[type]) {
99
+ prev.availableDocuments[type].forEach(doc => {
100
+ newSelectedDocumentIds.add(doc._id);
101
+ });
102
+ }
103
+ }
104
+ else {
105
+ newSelectedTypes.delete(type);
106
+ // Remove all documents of this type from selected documents
107
+ if (prev.availableDocuments[type]) {
108
+ prev.availableDocuments[type].forEach(doc => {
109
+ newSelectedDocumentIds.delete(doc._id);
110
+ });
111
+ }
112
+ }
113
+ // Update selected documents array based on selected IDs
114
+ const newSelectedDocuments = Object.values(prev.availableDocuments)
115
+ .flat()
116
+ .filter(doc => newSelectedDocumentIds.has(doc._id));
117
+ // Create processing status for selected documents
118
+ const processingStatus = newSelectedDocuments.map(doc => ({
119
+ documentId: doc._id,
120
+ title: getDocumentTitle(doc),
121
+ status: 'pending'
122
+ }));
123
+ return {
124
+ ...prev,
125
+ selectedTypes: newSelectedTypes,
126
+ selectedDocumentIds: newSelectedDocumentIds,
127
+ selectedDocuments: newSelectedDocuments,
128
+ processingStatus,
129
+ summary: null,
130
+ error: null,
131
+ currentProcessingIndex: -1
132
+ };
133
+ });
134
+ }, []);
135
+ /**
136
+ * Handle individual document selection
137
+ */
138
+ const handleDocumentSelection = useCallback((document, selected) => {
139
+ setState(prev => {
140
+ const newSelectedDocumentIds = new Set(prev.selectedDocumentIds);
141
+ const newSelectedTypes = new Set(prev.selectedTypes);
142
+ if (selected) {
143
+ newSelectedDocumentIds.add(document._id);
144
+ }
145
+ else {
146
+ newSelectedDocumentIds.delete(document._id);
147
+ // If no documents of this type are selected, remove the type from selectedTypes
148
+ const typeDocuments = prev.availableDocuments[document._type] || [];
149
+ const hasOtherSelectedInType = typeDocuments.some(doc => doc._id !== document._id && newSelectedDocumentIds.has(doc._id));
150
+ if (!hasOtherSelectedInType) {
151
+ newSelectedTypes.delete(document._type);
152
+ }
153
+ }
154
+ // Check if all documents of this type are now selected
155
+ const typeDocuments = prev.availableDocuments[document._type] || [];
156
+ const allTypeDocumentsSelected = typeDocuments.every(doc => newSelectedDocumentIds.has(doc._id));
157
+ if (allTypeDocumentsSelected && typeDocuments.length > 0) {
158
+ newSelectedTypes.add(document._type);
159
+ }
160
+ // Update selected documents array
161
+ const newSelectedDocuments = Object.values(prev.availableDocuments)
162
+ .flat()
163
+ .filter(doc => newSelectedDocumentIds.has(doc._id));
164
+ // Create processing status for selected documents
165
+ const processingStatus = newSelectedDocuments.map(doc => ({
166
+ documentId: doc._id,
167
+ title: getDocumentTitle(doc),
168
+ status: 'pending'
169
+ }));
170
+ return {
171
+ ...prev,
172
+ selectedTypes: newSelectedTypes,
173
+ selectedDocumentIds: newSelectedDocumentIds,
174
+ selectedDocuments: newSelectedDocuments,
175
+ processingStatus,
176
+ summary: null,
177
+ error: null,
178
+ currentProcessingIndex: -1
179
+ };
180
+ });
181
+ }, []);
182
+ /**
183
+ * Toggle expansion of document type to show individual documents
184
+ */
185
+ const handleTypeExpansion = useCallback((type) => {
186
+ setState(prev => {
187
+ const newExpandedTypes = new Set(prev.expandedTypes);
188
+ if (newExpandedTypes.has(type)) {
189
+ newExpandedTypes.delete(type);
190
+ }
191
+ else {
192
+ newExpandedTypes.add(type);
193
+ }
194
+ return {
195
+ ...prev,
196
+ expandedTypes: newExpandedTypes
197
+ };
198
+ });
199
+ }, []);
200
+ /**
201
+ * Select all documents of all types
202
+ */
203
+ const handleSelectAll = useCallback(() => {
204
+ const allTypes = Object.keys(state.availableDocuments);
205
+ const allDocuments = Object.values(state.availableDocuments).flat();
206
+ const allDocumentIds = new Set(allDocuments.map(doc => doc._id));
207
+ const processingStatus = allDocuments.map(doc => ({
208
+ documentId: doc._id,
209
+ title: getDocumentTitle(doc),
210
+ status: 'pending'
211
+ }));
212
+ setState(prev => ({
213
+ ...prev,
214
+ selectedTypes: new Set(allTypes),
215
+ selectedDocumentIds: allDocumentIds,
216
+ selectedDocuments: allDocuments,
217
+ processingStatus,
218
+ summary: null,
219
+ error: null,
220
+ currentProcessingIndex: -1,
221
+ documentCreationResult: null
222
+ }));
223
+ }, [state.availableDocuments]);
224
+ /**
225
+ * Clear all selections
226
+ */
227
+ const handleClearSelection = useCallback(() => {
228
+ setState(prev => ({
229
+ ...prev,
230
+ selectedTypes: new Set(),
231
+ selectedDocumentIds: new Set(),
232
+ selectedDocuments: [],
233
+ processingStatus: [],
234
+ summary: null,
235
+ error: null,
236
+ currentProcessingIndex: -1,
237
+ documentCreationResult: null
238
+ }));
239
+ }, []);
240
+ /**
241
+ * Get document title from various possible fields
242
+ */
243
+ const getDocumentTitle = (doc) => {
244
+ const titleFields = ['title', 'name', 'heading', 'label'];
245
+ for (const field of titleFields) {
246
+ if (doc[field] && typeof doc[field] === 'string') {
247
+ return doc[field];
248
+ }
249
+ }
250
+ return `${doc._type} (${doc._id})`;
251
+ };
252
+ const handleBulkTranslate = useCallback(async () => {
253
+ if (state.selectedDocuments.length === 0) {
254
+ await dialogService.showError({
255
+ title: 'No Documents Selected',
256
+ message: 'Please select at least one document to translate.',
257
+ error: new Error('No documents selected for translation')
258
+ });
259
+ return;
260
+ }
261
+ try {
262
+ // Get OAuth service manager and check authentication
263
+ // Requirements: 4.1, 4.2, 4.3, 10.5
264
+ const serviceManager = OAuthServiceManager.getInstance(client);
265
+ const authStateManager = serviceManager.getAuthStateManager();
266
+ const authState = authStateManager.getState();
267
+ // If OAuth is configured but not authenticated, prompt user to authenticate
268
+ if (serviceManager.isOAuthConfigured() && authState.state !== 'authenticated') {
269
+ await dialogService.showError({
270
+ title: 'Authentication Required',
271
+ message: 'You need to configure your Easyling credentials to use translation services.',
272
+ error: new Error('Please go to the Easyling Configuration tool to enter your access token and project ID.')
273
+ });
274
+ return;
275
+ }
276
+ // Initialize locale service
277
+ const storageAdapter = new SanityLocaleStorageAdapter(client);
278
+ const localeService = new LocaleService(storageAdapter);
279
+ // Load locale configuration
280
+ await localeService.loadConfig();
281
+ const enabledLocales = localeService.getEnabledLocales();
282
+ // Check if locales are configured
283
+ if (enabledLocales.length === 0) {
284
+ await dialogService.showError({
285
+ title: 'No Locales Configured',
286
+ message: 'Please configure target locales before translating documents.',
287
+ error: new Error('No translation locales have been configured. Please use the Locale Configuration tool to add target languages.')
288
+ });
289
+ return;
290
+ }
291
+ // Show locale selection dialog
292
+ const selectedLocalesResult = await dialogService.showLocaleSelection({
293
+ title: 'Select Target Locales',
294
+ message: `Choose the languages to translate ${state.selectedDocuments.length} document${state.selectedDocuments.length !== 1 ? 's' : ''} into:`,
295
+ availableLocales: enabledLocales,
296
+ selectedLocales: [],
297
+ selectedDocuments: state.selectedDocuments,
298
+ mode: 'bulk',
299
+ allowMultiple: true,
300
+ required: true,
301
+ showCreationModeOption: true,
302
+ defaultCreationMode: 'draft'
303
+ });
304
+ // User cancelled locale selection
305
+ if (!selectedLocalesResult || !selectedLocalesResult.locales || selectedLocalesResult.locales.length === 0) {
306
+ return;
307
+ }
308
+ const selectedLocales = selectedLocalesResult.locales;
309
+ const creationMode = selectedLocalesResult.creationMode || 'draft';
310
+ // Ask user if they want to create new documents
311
+ const shouldCreateDocuments = await dialogService.showConfirmation({
312
+ title: 'Confirm Bulk Translation',
313
+ message: `Translate ${state.selectedDocuments.length} document${state.selectedDocuments.length !== 1 ? 's' : ''} to ${selectedLocales.length} locale${selectedLocales.length !== 1 ? 's' : ''}?`,
314
+ details: `This will:\n• Send translation requests for all selected documents\n• Create new documents with translated content for successful translations\n• Preserve the original document structures\n\nTarget locales: ${selectedLocales.join(', ')}`,
315
+ confirmText: 'Translate & Create Documents',
316
+ cancelText: 'Cancel',
317
+ tone: 'primary'
318
+ });
319
+ // User cancelled confirmation
320
+ if (!shouldCreateDocuments) {
321
+ return;
322
+ }
323
+ setState(prev => ({
324
+ ...prev,
325
+ isProcessing: true,
326
+ error: null,
327
+ summary: null,
328
+ currentProcessingIndex: 0,
329
+ createDocuments: shouldCreateDocuments,
330
+ documentCreationResult: null,
331
+ selectedLocales
332
+ }));
333
+ // Initialize services
334
+ const contentExtractor = new ContentExtractor();
335
+ const translationService = serviceManager.getTranslationService();
336
+ const documentCreationService = new DocumentCreationService(client);
337
+ console.log(`Starting bulk translation for ${state.selectedDocuments.length} documents`);
338
+ // Extract content from all selected documents
339
+ const extractedContents = await contentExtractor.extractBulkStructuredContent(state.selectedDocuments);
340
+ // Filter out documents with no content and update status
341
+ const validContents = extractedContents.filter(content => {
342
+ const hasContent = content.htmlContent && content.htmlContent.trim().length > 0;
343
+ if (!hasContent) {
344
+ // Update status for documents with no content
345
+ setState(prev => ({
346
+ ...prev,
347
+ processingStatus: prev.processingStatus.map(status => status.documentId === content.documentId
348
+ ? { ...status, status: 'failed', error: 'No translatable content found' }
349
+ : status)
350
+ }));
351
+ }
352
+ return hasContent;
353
+ });
354
+ if (validContents.length === 0) {
355
+ throw new Error('No translatable content found in selected documents');
356
+ }
357
+ console.log(`Processing ${validContents.length} documents with valid content`);
358
+ // Process documents one by one with progress updates
359
+ const summary = {
360
+ totalDocuments: state.selectedDocuments.length,
361
+ processedDocuments: 0,
362
+ failedDocuments: 0,
363
+ requests: [],
364
+ responses: []
365
+ };
366
+ for (let i = 0; i < validContents.length; i++) {
367
+ const content = validContents[i];
368
+ // Update current processing index and document status
369
+ setState(prev => ({
370
+ ...prev,
371
+ currentProcessingIndex: i,
372
+ processingStatus: prev.processingStatus.map(status => status.documentId === content.documentId
373
+ ? { ...status, status: 'processing' }
374
+ : status)
375
+ }));
376
+ try {
377
+ // Prepare and send translation request with selected locales
378
+ const request = translationService.prepareTranslationRequest(content, undefined, // documentType - use default
379
+ undefined, // sourceLanguage - use default
380
+ undefined, // targetLanguage - not used for multi-locale
381
+ selectedLocales // targetLocales array
382
+ );
383
+ const response = await translationService.sendTranslationRequest(request);
384
+ // Update summary
385
+ summary.requests.push(request);
386
+ summary.responses.push(response);
387
+ if (response.success) {
388
+ summary.processedDocuments++;
389
+ // Update document status to completed
390
+ setState(prev => ({
391
+ ...prev,
392
+ processingStatus: prev.processingStatus.map(status => status.documentId === content.documentId
393
+ ? { ...status, status: 'completed', response }
394
+ : status)
395
+ }));
396
+ }
397
+ else {
398
+ summary.failedDocuments++;
399
+ // Update document status to failed
400
+ setState(prev => ({
401
+ ...prev,
402
+ processingStatus: prev.processingStatus.map(status => status.documentId === content.documentId
403
+ ? { ...status, status: 'failed', error: response.error, response }
404
+ : status)
405
+ }));
406
+ }
407
+ // Add a small delay to make progress visible
408
+ await new Promise(resolve => setTimeout(resolve, 500));
409
+ }
410
+ catch (error) {
411
+ console.error(`Failed to process document ${content.documentId}:`, error);
412
+ summary.failedDocuments++;
413
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
414
+ summary.responses.push({
415
+ success: false,
416
+ error: errorMessage
417
+ });
418
+ // Update document status to failed
419
+ setState(prev => ({
420
+ ...prev,
421
+ processingStatus: prev.processingStatus.map(status => status.documentId === content.documentId
422
+ ? { ...status, status: 'failed', error: errorMessage }
423
+ : status)
424
+ }));
425
+ }
426
+ }
427
+ // Create documents if user requested and we have successful translations
428
+ let documentCreationResult = null;
429
+ if (shouldCreateDocuments && summary.processedDocuments > 0) {
430
+ console.log('Creating new documents from successful translations...');
431
+ // Get successful translations and their corresponding original documents
432
+ const successfulResponses = summary.responses.filter(response => response.success);
433
+ const successfulDocuments = state.selectedDocuments.filter(doc => {
434
+ const responseIndex = summary.responses.findIndex((_, index) => {
435
+ const request = summary.requests[index];
436
+ return request && request.documentId === doc._id;
437
+ });
438
+ return responseIndex >= 0 && summary.responses[responseIndex].success;
439
+ });
440
+ if (successfulDocuments.length > 0 && successfulResponses.length > 0) {
441
+ documentCreationResult = await documentCreationService.createBulkDocumentsFromTranslations(successfulDocuments, successfulResponses, {
442
+ targetLanguage: 'translated',
443
+ createAsVariant: true,
444
+ creationMode: creationMode
445
+ });
446
+ console.log('Document Creation Summary:', {
447
+ totalDocuments: documentCreationResult.totalDocuments,
448
+ successfulCreations: documentCreationResult.successfulCreations,
449
+ failedCreations: documentCreationResult.failedCreations,
450
+ errors: documentCreationResult.errors
451
+ });
452
+ }
453
+ }
454
+ // Log bulk operation summary
455
+ console.log('Bulk Translation Summary:', {
456
+ timestamp: new Date().toISOString(),
457
+ totalDocuments: summary.totalDocuments,
458
+ processedDocuments: summary.processedDocuments,
459
+ failedDocuments: summary.failedDocuments,
460
+ successRate: summary.totalDocuments > 0
461
+ ? ((summary.processedDocuments / summary.totalDocuments) * 100).toFixed(2) + '%'
462
+ : '0%'
463
+ });
464
+ setState(prev => ({
465
+ ...prev,
466
+ summary,
467
+ documentCreationResult,
468
+ isProcessing: false,
469
+ currentProcessingIndex: -1
470
+ }));
471
+ console.log('Bulk translation completed:', summary);
472
+ // Show completion message to user
473
+ if (shouldCreateDocuments && documentCreationResult) {
474
+ dialogService.showSuccess({
475
+ title: 'Bulk Translation Completed',
476
+ message: `Successfully translated ${summary.processedDocuments} of ${summary.totalDocuments} documents to ${selectedLocales.length} locale${selectedLocales.length !== 1 ? 's' : ''}`,
477
+ details: `Translations: ${summary.processedDocuments}/${summary.totalDocuments} successful\nDocuments created: ${documentCreationResult.successfulCreations}/${documentCreationResult.totalDocuments} successful\nTarget locales: ${selectedLocales.join(', ')}\n\nCheck the console for detailed results and new document structures.`
478
+ });
479
+ }
480
+ else {
481
+ dialogService.showSuccess({
482
+ title: 'Bulk Translation Completed',
483
+ message: `Successfully translated ${summary.processedDocuments} of ${summary.totalDocuments} documents`,
484
+ details: `Translations: ${summary.processedDocuments}/${summary.totalDocuments} successful\nTarget locales: ${selectedLocales.join(', ')}\n\nTranslation responses have been logged to the console for verification.`
485
+ });
486
+ }
487
+ }
488
+ catch (error) {
489
+ console.error('Bulk translation failed:', error);
490
+ // Show error dialog
491
+ await dialogService.showError({
492
+ title: 'Bulk Translation Failed',
493
+ message: 'An error occurred during bulk translation.',
494
+ error: error instanceof Error ? error : new Error('An unexpected error occurred')
495
+ });
496
+ setState(prev => ({
497
+ ...prev,
498
+ error: error instanceof Error ? error.message : 'An unexpected error occurred',
499
+ isProcessing: false,
500
+ currentProcessingIndex: -1
501
+ }));
502
+ }
503
+ }, [state.selectedDocuments, client, dialogService]);
504
+ return (_jsx(Card, { padding: 4, children: _jsxs(Stack, { space: 4, children: [_jsx(Text, { size: 2, weight: "semibold", children: "Bulk Document Translation" }), _jsx(Text, { size: 1, muted: true, children: "Select multiple documents to translate them in batch. Translation requests will be logged to the console for verification." }), _jsx(Card, { padding: 3, border: true, children: _jsxs(Stack, { space: 3, children: [_jsxs(Flex, { align: "center", justify: "space-between", children: [_jsx(Text, { size: 1, weight: "medium", children: "Document Selection" }), _jsxs(Flex, { gap: 2, children: [_jsx(Button, { text: "Refresh", icon: RefreshIcon, onClick: fetchDocuments, disabled: state.isLoadingDocuments, mode: "ghost", fontSize: 1 }), state.selectedDocuments.length > 0 && (_jsx(Button, { text: "Clear All", tone: "critical", mode: "ghost", onClick: handleClearSelection, fontSize: 1 }))] })] }), state.isLoadingDocuments ? (_jsxs(Flex, { align: "center", gap: 2, children: [_jsx(Spinner, { size: 1 }), _jsx(Text, { size: 1, muted: true, children: "Loading documents..." })] })) : Object.keys(state.availableDocuments).length === 0 ? (_jsx(Text, { size: 1, muted: true, children: "No documents found" })) : (_jsxs(Stack, { space: 3, children: [_jsxs(Flex, { align: "center", justify: "space-between", children: [_jsxs(Text, { size: 1, children: ["Selected: ", state.selectedDocuments.length, " documents from ", state.selectedTypes.size, " types"] }), _jsx(Button, { text: "Select All Types", onClick: handleSelectAll, mode: "ghost", fontSize: 1 })] }), _jsxs(Stack, { space: 2, children: [_jsx(Text, { size: 1, weight: "medium", children: "Document Types" }), Object.entries(state.availableDocuments)
505
+ .sort(([a], [b]) => a.localeCompare(b))
506
+ .map(([type, documents]) => {
507
+ const isExpanded = state.expandedTypes.has(type);
508
+ const selectedInType = documents.filter(doc => state.selectedDocumentIds.has(doc._id)).length;
509
+ const isPartiallySelected = selectedInType > 0 && selectedInType < documents.length;
510
+ const isFullySelected = selectedInType === documents.length;
511
+ return (_jsx(Card, { padding: 2, border: true, children: _jsxs(Stack, { space: 2, children: [_jsxs(Flex, { align: "center", justify: "space-between", children: [_jsxs(Flex, { align: "center", gap: 2, children: [_jsx(Checkbox, { checked: isFullySelected, indeterminate: isPartiallySelected, onChange: (event) => handleTypeSelection(type, event.currentTarget.checked) }), _jsx(Button, { icon: isExpanded ? ChevronDownIcon : ChevronRightIcon, mode: "ghost", onClick: () => handleTypeExpansion(type), style: { minWidth: 'auto', padding: '4px' } }), _jsxs(Box, { children: [_jsx(Text, { size: 1, weight: "medium", children: type }), _jsxs(Text, { size: 0, muted: true, children: [selectedInType, "/", documents.length, " selected \u2022 Latest: ", new Date(documents[0]._createdAt).toLocaleDateString()] })] })] }), _jsx(Badge, { tone: selectedInType > 0 ? "positive" : "primary", fontSize: 0, children: selectedInType > 0 ? `${selectedInType}/${documents.length}` : documents.length })] }), isExpanded && (_jsx(Box, { style: { marginLeft: '32px' }, children: _jsx(Stack, { space: 1, children: documents.map((doc) => (_jsx(Card, { padding: 2, tone: "transparent", border: true, children: _jsxs(Flex, { align: "center", justify: "space-between", children: [_jsxs(Flex, { align: "center", gap: 2, children: [_jsx(Checkbox, { checked: state.selectedDocumentIds.has(doc._id), onChange: (event) => handleDocumentSelection(doc, event.currentTarget.checked) }), _jsxs(Box, { children: [_jsx(Text, { size: 1, children: getDocumentTitle(doc) }), _jsxs(Text, { size: 0, muted: true, children: [doc._id, " \u2022 ", new Date(doc._createdAt).toLocaleDateString()] })] })] }), state.selectedDocumentIds.has(doc._id) && (_jsx(Badge, { tone: "positive", fontSize: 0, children: "Selected" }))] }) }, doc._id))) }) }))] }) }, type));
512
+ })] }), state.selectedDocuments.length > 0 && (_jsxs(Stack, { space: 2, children: [_jsxs(Text, { size: 1, weight: "medium", children: ["Selected Documents (", state.selectedDocuments.length, ")"] }), _jsx(Box, { style: { maxHeight: '200px', overflowY: 'auto' }, children: _jsxs(Stack, { space: 1, children: [state.selectedDocuments.slice(0, 10).map((doc) => (_jsx(Card, { padding: 2, tone: "primary", children: _jsxs(Flex, { align: "center", justify: "space-between", children: [_jsxs(Box, { children: [_jsx(Text, { size: 1, weight: "medium", children: getDocumentTitle(doc) }), _jsxs(Text, { size: 0, muted: true, children: [doc._type, " \u2022 ", new Date(doc._createdAt).toLocaleDateString()] })] }), _jsx(Badge, { tone: "primary", fontSize: 0, children: doc._type })] }) }, doc._id))), state.selectedDocuments.length > 10 && (_jsxs(Text, { size: 0, muted: true, style: { textAlign: 'center', padding: '8px' }, children: ["... and ", state.selectedDocuments.length - 10, " more documents"] }))] }) })] }))] }))] }) }), state.selectedDocuments.length > 0 && (_jsx(Card, { padding: 3, border: true, children: _jsxs(Stack, { space: 3, children: [_jsx(Text, { size: 1, weight: "medium", children: "Translation Action" }), state.selectedLocales && state.selectedLocales.length > 0 && (_jsx(Card, { padding: 2, tone: "primary", children: _jsxs(Text, { size: 1, children: ["Target Locales: ", state.selectedLocales.join(', ')] }) })), _jsx(Button, { text: state.isProcessing ? 'Processing...' : `Translate ${state.selectedDocuments.length} Documents`, icon: state.isProcessing ? Spinner : TranslateIcon, onClick: handleBulkTranslate, tone: "primary", disabled: state.isProcessing })] }) })), state.isProcessing && state.processingStatus.length > 0 && (_jsx(Card, { padding: 3, border: true, children: _jsxs(Stack, { space: 3, children: [_jsx(Text, { size: 1, weight: "medium", children: "Translation Progress" }), _jsxs(Stack, { space: 2, children: [_jsxs(Flex, { align: "center", justify: "space-between", children: [_jsxs(Text, { size: 1, children: ["Overall Progress: ", state.currentProcessingIndex + 1, " of ", state.selectedDocuments.length] }), _jsx(Text, { size: 1, muted: true, children: state.currentProcessingIndex >= 0
513
+ ? `${Math.round(((state.currentProcessingIndex + 1) / state.selectedDocuments.length) * 100)}%`
514
+ : '0%' })] }), _jsx(Box, { style: {
515
+ width: '100%',
516
+ height: '8px',
517
+ backgroundColor: '#e0e0e0',
518
+ borderRadius: '4px',
519
+ overflow: 'hidden'
520
+ }, children: _jsx(Box, { style: {
521
+ width: `${state.currentProcessingIndex >= 0
522
+ ? ((state.currentProcessingIndex + 1) / state.selectedDocuments.length) * 100
523
+ : 0}%`,
524
+ height: '100%',
525
+ backgroundColor: '#0066cc',
526
+ transition: 'width 0.3s ease'
527
+ } }) })] }), _jsxs(Stack, { space: 2, children: [_jsx(Text, { size: 1, weight: "medium", children: "Document Status" }), state.processingStatus.map((status) => (_jsx(Card, { padding: 2, border: true, children: _jsxs(Flex, { align: "center", justify: "space-between", children: [_jsxs(Box, { flex: 1, children: [_jsx(Text, { size: 1, weight: "medium", children: status.title }), _jsxs(Text, { size: 0, muted: true, children: ["ID: ", status.documentId] }), status.error && (_jsxs(Text, { size: 0, style: { color: 'red' }, children: ["Error: ", status.error] }))] }), _jsxs(Box, { children: [status.status === 'pending' && (_jsx(Badge, { tone: "default", fontSize: 0, children: "Pending" })), status.status === 'processing' && (_jsx(Badge, { tone: "primary", fontSize: 0, children: _jsxs(Flex, { align: "center", gap: 1, children: [_jsx(Spinner, { size: 0 }), "Processing"] }) })), status.status === 'completed' && (_jsx(Badge, { tone: "positive", fontSize: 0, children: _jsxs(Flex, { align: "center", gap: 1, children: [_jsx(CheckmarkIcon, {}), "Completed"] }) })), status.status === 'failed' && (_jsx(Badge, { tone: "critical", fontSize: 0, children: _jsxs(Flex, { align: "center", gap: 1, children: [_jsx(CloseIcon, {}), "Failed"] }) }))] })] }) }, status.documentId)))] })] }) })), state.error && (_jsx(Card, { padding: 3, tone: "critical", border: true, children: _jsxs(Text, { size: 1, weight: "medium", children: ["Error: ", state.error] }) })), state.summary && (_jsx(Card, { padding: 3, tone: state.summary.failedDocuments === 0 ? "positive" : "caution", border: true, children: _jsxs(Stack, { space: 3, children: [_jsxs(Flex, { align: "center", gap: 2, children: [state.summary.failedDocuments === 0 ? (_jsx(CheckmarkIcon, { style: { color: 'green' } })) : (_jsx(WarningOutlineIcon, { style: { color: 'orange' } })), _jsx(Text, { size: 1, weight: "medium", children: "Translation Summary" })] }), _jsxs(Stack, { space: 2, children: [_jsxs(Flex, { align: "center", justify: "space-between", children: [_jsx(Text, { size: 1, children: "Total Documents:" }), _jsx(Badge, { tone: "primary", children: state.summary.totalDocuments })] }), _jsxs(Flex, { align: "center", justify: "space-between", children: [_jsx(Text, { size: 1, children: "Successfully Processed:" }), _jsx(Badge, { tone: "positive", children: state.summary.processedDocuments })] }), _jsxs(Flex, { align: "center", justify: "space-between", children: [_jsx(Text, { size: 1, children: "Failed:" }), _jsx(Badge, { tone: "critical", children: state.summary.failedDocuments })] }), _jsxs(Flex, { align: "center", justify: "space-between", children: [_jsx(Text, { size: 1, children: "Success Rate:" }), _jsx(Badge, { tone: state.summary.failedDocuments === 0 ? "positive" : "caution", children: state.summary.totalDocuments > 0
528
+ ? `${((state.summary.processedDocuments / state.summary.totalDocuments) * 100).toFixed(1)}%`
529
+ : '0%' })] })] }), state.processingStatus.length > 0 && (_jsxs(Stack, { space: 2, children: [_jsx(Text, { size: 1, weight: "medium", children: "Detailed Results" }), state.processingStatus.map((status) => (_jsx(Card, { padding: 2, border: true, children: _jsxs(Flex, { align: "center", justify: "space-between", children: [_jsxs(Box, { flex: 1, children: [_jsx(Text, { size: 1, weight: "medium", children: status.title }), _jsxs(Text, { size: 0, muted: true, children: ["ID: ", status.documentId] }), status.error && (_jsxs(Text, { size: 0, style: { color: 'red' }, children: ["Error: ", status.error] }))] }), _jsxs(Box, { children: [status.status === 'pending' && (_jsx(Badge, { tone: "default", fontSize: 0, children: "Pending" })), status.status === 'processing' && (_jsx(Badge, { tone: "primary", fontSize: 0, children: _jsxs(Flex, { align: "center", gap: 1, children: [_jsx(Spinner, { size: 0 }), "Processing"] }) })), status.status === 'completed' && (_jsx(Badge, { tone: "positive", fontSize: 0, children: _jsxs(Flex, { align: "center", gap: 1, children: [_jsx(CheckmarkIcon, {}), "Completed"] }) })), status.status === 'failed' && (_jsx(Badge, { tone: "critical", fontSize: 0, children: _jsxs(Flex, { align: "center", gap: 1, children: [_jsx(CloseIcon, {}), "Failed"] }) }))] })] }) }, status.documentId)))] }))] }) })), state.documentCreationResult && (_jsx(Card, { padding: 3, tone: state.documentCreationResult.failedCreations === 0 ? "positive" : "caution", border: true, children: _jsxs(Stack, { space: 3, children: [_jsxs(Flex, { align: "center", gap: 2, children: [state.documentCreationResult.failedCreations === 0 ? (_jsx(CheckmarkIcon, { style: { color: 'green' } })) : (_jsx(WarningOutlineIcon, { style: { color: 'orange' } })), _jsx(Text, { size: 1, weight: "medium", children: "Document Creation Summary" })] }), _jsxs(Stack, { space: 2, children: [_jsxs(Flex, { align: "center", justify: "space-between", children: [_jsx(Text, { size: 1, children: "Documents to Create:" }), _jsx(Badge, { tone: "primary", children: state.documentCreationResult.totalDocuments })] }), _jsxs(Flex, { align: "center", justify: "space-between", children: [_jsx(Text, { size: 1, children: "Successfully Created:" }), _jsx(Badge, { tone: "positive", children: state.documentCreationResult.successfulCreations })] }), _jsxs(Flex, { align: "center", justify: "space-between", children: [_jsx(Text, { size: 1, children: "Failed to Create:" }), _jsx(Badge, { tone: "critical", children: state.documentCreationResult.failedCreations })] }), _jsxs(Flex, { align: "center", justify: "space-between", children: [_jsx(Text, { size: 1, children: "Creation Success Rate:" }), _jsx(Badge, { tone: state.documentCreationResult.failedCreations === 0 ? "positive" : "caution", children: state.documentCreationResult.totalDocuments > 0
530
+ ? `${((state.documentCreationResult.successfulCreations / state.documentCreationResult.totalDocuments) * 100).toFixed(1)}%`
531
+ : '0%' })] })] }), state.documentCreationResult.errors.length > 0 && (_jsxs(Stack, { space: 2, children: [_jsx(Text, { size: 1, weight: "medium", children: "Creation Errors" }), _jsx(Box, { style: { maxHeight: '150px', overflowY: 'auto' }, children: _jsx(Stack, { space: 1, children: state.documentCreationResult.errors.map((error, index) => (_jsx(Card, { padding: 2, tone: "critical", children: _jsx(Text, { size: 0, style: { color: 'red' }, children: error }) }, index))) }) })] }))] }) }))] }) }));
532
+ };
533
+ /**
534
+ * Bulk Translation Tool Definition
535
+ * Requirements: 2.1, 2.5, 4.1, 4.2
536
+ */
537
+ export const bulkTranslateTool = {
538
+ name: 'bulk-translate',
539
+ title: 'Bulk Translate',
540
+ icon: TranslateIcon,
541
+ component: BulkTranslateTool
542
+ };
543
+ //# sourceMappingURL=bulkTranslate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulkTranslate.js","sourceRoot":"","sources":["../../src/actions/bulkTranslate.tsx"],"names":[],"mappings":"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"}