@translationstudio/translationstudio-strapi-extension 2.0.2 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +1 -1
  2. package/dist/Types.d.ts +36 -0
  3. package/dist/_chunks/App-BR-y9Q87.js +331 -0
  4. package/dist/_chunks/App-Cc3EklWX.mjs +331 -0
  5. package/dist/_chunks/HistoryPage-BG_RchOk.js +1057 -0
  6. package/dist/_chunks/HistoryPage-CSMW8AED.mjs +1057 -0
  7. package/dist/_chunks/index-B9kFLfY3.js +834 -0
  8. package/dist/_chunks/index-ChM8Lw4L.mjs +835 -0
  9. package/dist/admin/index.js +2 -344
  10. package/dist/admin/index.mjs +2 -344
  11. package/dist/admin/src/components/BulkTranslationMenu.d.ts +3 -0
  12. package/dist/admin/src/components/BulkTranslationPanel.d.ts +3 -0
  13. package/dist/admin/src/components/EntryHistory.d.ts +3 -0
  14. package/dist/admin/src/components/HistoryIcon.d.ts +2 -0
  15. package/dist/admin/src/components/HistoryMenu.d.ts +2 -0
  16. package/dist/admin/src/components/LoadingSpinner.d.ts +4 -0
  17. package/dist/admin/src/components/SettingsIcon.d.ts +2 -0
  18. package/dist/admin/src/components/TranslationstudioLogo.d.ts +2 -0
  19. package/dist/admin/src/components/utils/alertUtils.d.ts +13 -0
  20. package/dist/admin/src/components/utils/dateUtils.d.ts +1 -0
  21. package/dist/admin/src/components/utils/emailUtils.d.ts +2 -0
  22. package/dist/admin/src/components/utils/entryUtils.d.ts +2 -0
  23. package/dist/admin/src/components/utils/filterAndTransformContentTypes.d.ts +2 -0
  24. package/dist/admin/src/components/utils/formatDate.d.ts +1 -0
  25. package/dist/admin/src/components/utils/getEntryHelper.d.ts +3 -0
  26. package/dist/admin/src/components/utils/handleHistoryResponse.d.ts +5 -0
  27. package/dist/admin/src/components/utils/historyDataUtils.d.ts +13 -0
  28. package/dist/admin/src/components/utils/historyStatusUtils.d.ts +7 -0
  29. package/dist/admin/src/components/utils/searchUtils.d.ts +2 -0
  30. package/dist/admin/src/components/utils/sortUtils.d.ts +9 -0
  31. package/dist/admin/src/components/utils/statusHelper.d.ts +6 -0
  32. package/dist/admin/src/components/utils/theme.d.ts +15 -0
  33. package/dist/admin/src/components/utils/translationUtils.d.ts +5 -0
  34. package/dist/admin/src/components/utils/useDebounce.d.ts +1 -0
  35. package/dist/admin/src/pages/HistoryPage.d.ts +2 -0
  36. package/dist/server/index.js +50 -29
  37. package/dist/server/index.mjs +50 -29
  38. package/dist/server/src/controllers/controller.d.ts +1 -1
  39. package/dist/server/src/controllers/index.d.ts +1 -1
  40. package/dist/server/src/index.d.ts +2 -4
  41. package/dist/server/src/services/functions/importData/transformFieldsToData.d.ts +1 -1
  42. package/dist/server/src/services/index.d.ts +1 -3
  43. package/dist/server/src/services/service.d.ts +1 -3
  44. package/package.json +23 -21
  45. package/dist/_chunks/App-C5dxwMbx.js +0 -342
  46. package/dist/_chunks/App-DxAbaDu8.mjs +0 -342
@@ -1,346 +1,4 @@
1
- import { useRef, useEffect, useState } from "react";
2
- import { jsx, jsxs, Fragment } from "react/jsx-runtime";
3
- import { Box, Alert, Flex, Typography, Radio, Checkbox, DatePicker, Button } from "@strapi/design-system";
4
- import { getFetchClient, unstable_useContentManagerContext } from "@strapi/strapi/admin";
5
- const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
6
- const v = glob[path];
7
- if (v) {
8
- return typeof v === "function" ? v() : Promise.resolve(v);
9
- }
10
- return new Promise((_, reject) => {
11
- (typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(
12
- reject.bind(
13
- null,
14
- new Error(
15
- "Unknown variable dynamic import: " + path + (path.split("/").length !== segs ? ". Note that variables only represent file names one level deep." : "")
16
- )
17
- )
18
- );
19
- });
20
- };
21
- const PLUGIN_ID = "translationstudio";
22
- const getTranslation = (id) => `${PLUGIN_ID}.${id}`;
23
- const Initializer = ({ setPlugin }) => {
24
- const ref = useRef(setPlugin);
25
- useEffect(() => {
26
- ref.current(PLUGIN_ID);
27
- }, []);
28
- return null;
29
- };
30
- const logoSvg$1 = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20447.49%20582.57'%3e%3cdefs%3e%3cstyle%3e.cls-1{fill:%23e94642;}.cls-2{fill:%23a51d78;}%3c/style%3e%3c/defs%3e%3cpath%20class='cls-2'%20d='M333.63,260.39c11.39,9.77,23.98,22.51,35.71,38.54,29.12,39.79,43.43,86.82,42.53,139.8-.42,24.59-5.02,44.98-13.68,60.58-.81,1.47-1.67,2.92-2.55,4.31-1.72,2.74-3.61,5.39-5.61,7.89-4.83,6.04-10.5,11.44-16.87,16.04-1.25,.9-2.54,1.78-3.84,2.63-2.59,1.68-5.33,3.26-8.14,4.7-4.19,2.15-8.65,4.05-13.26,5.65-3.06,1.06-6.24,2.01-9.46,2.81-9.67,2.42-19.9,3.64-30.38,3.64-28.34,0-54.1-9.14-72.52-25.72-21.07-18.97-31.75-46.53-31.75-81.93,0-44.1,17.26-79.22,46.16-93.95,22.18-11.3,43.5-23.09,60.57-42.86,10.64-12.33,18.32-26.29,23.09-42.13m-20.69-55.64c-4.76,0-8.97,2.99-8.97,8.16h0c1.43,61.87-32.34,81.5-70.16,100.77-38.88,19.82-65.58,64.35-65.58,125.65,0,98.01,69.45,143.23,139.85,143.23,13.2,0,26.35-1.54,39.01-4.7,4.22-1.05,8.38-2.29,12.47-3.7,6.14-2.13,12.11-4.66,17.87-7.62,3.84-1.97,7.58-4.13,11.21-6.48,1.82-1.17,3.6-2.4,5.36-3.66,8.78-6.35,16.81-13.89,23.83-22.67,2.81-3.51,5.45-7.22,7.91-11.13,1.23-1.96,2.42-3.96,3.56-6.02,11.41-20.57,17.61-46.2,18.14-77.24,2.4-140.84-91.02-211.84-129.3-233.29-1.46-.82-3.22-1.29-5.2-1.29h0Z'/%3e%3cpath%20class='cls-1'%20d='M139.41,35.58c28.34,0,54.1,9.14,72.52,25.72,21.07,18.97,31.75,46.53,31.75,81.93,0,44.1-17.26,79.22-46.16,93.95-22.18,11.3-43.5,23.09-60.57,42.86-10.64,12.33-18.32,26.29-23.09,42.13-11.39-9.77-23.98-22.51-35.71-38.54-29.12-39.79-43.43-86.82-42.53-139.8,.42-24.59,5.02-44.98,13.68-60.58,.81-1.46,1.67-2.91,2.55-4.31,1.72-2.74,3.61-5.4,5.61-7.89,4.83-6.04,10.5-11.44,16.87-16.04,1.25-.9,2.54-1.78,3.84-2.63,2.59-1.68,5.33-3.26,8.14-4.7,4.19-2.15,8.65-4.05,13.26-5.65,3.06-1.06,6.25-2.01,9.46-2.81,9.67-2.42,19.9-3.64,30.38-3.64m0-35.58c-13.2,0-26.35,1.54-39.01,4.7-4.22,1.05-8.38,2.29-12.47,3.7-6.14,2.13-12.11,4.66-17.87,7.62-3.84,1.97-7.58,4.13-11.21,6.48-1.82,1.17-3.6,2.4-5.36,3.66-8.78,6.35-16.81,13.89-23.83,22.67-2.81,3.51-5.45,7.22-7.91,11.13-1.23,1.96-2.42,3.96-3.56,6.02C6.78,86.56,.57,112.19,.05,143.23c-2.4,140.84,91.02,211.84,129.3,233.29,1.46,.82,3.22,1.29,5.2,1.29,4.76,0,8.97-2.99,8.97-8.16h0c-1.43-61.87,32.34-81.5,70.16-100.77,38.88-19.82,65.58-64.35,65.58-125.65C279.27,45.22,209.82,0,139.41,0h0Z'/%3e%3c/svg%3e";
31
- const PluginIcon = () => /* @__PURE__ */ jsx("img", { src: logoSvg$1, alt: "Translation Studio Logo", width: 20, height: 20 });
32
- const logoSvg = "data:image/svg+xml,%3csvg%20width='1444.47'%20height='635.72'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%3e%3ctitle%3eLayer%201%3c/title%3e%3cpath%20id='svg_1'%20fill='%23ffffff'%20d='m1151.68,294.37c34.28,0%2050.11,19.74%2050.11,59.01l0,56.4c0,6.94%20-3.91,10.85%20-10.85,10.85l-2.6,0c-6.94,0%20-10.84,-3.9%20-10.84,-10.85l0,-54.45c0,-27.12%20-10.41,-39.91%20-33.41,-39.91s-32.97,15.4%20-32.97,42.74l0,51.63c0,6.94%20-3.91,10.85%20-10.85,10.85l-2.6,0c-6.94,0%20-10.85,-3.9%20-10.85,-10.85l0,-102.39c0,-6.94%203.91,-10.85%2010.85,-10.85l2.6,0c6.94,0%2010.85,3.91%2010.85,10.85l0,12.34c5.64,-14.39%2019.73,-25.36%2040.56,-25.36l0,0l0,-0.01z'%20class='cls-2'/%3e%3cpath%20id='svg_2'%20fill='%23ffffff'%20d='m0,313.78l0,55.76c0,37.96%2014.53,51.2%2046.42,51.2l0,0c1.96,0%204.12,-0.03%206.29,-0.22c6.9,-0.65%209.8,-4.45%209.11,-11.07c-0.61,-5.88%20-4.99,-8.24%20-11.71,-8.24c-18.88,0%20-25.6,-8.9%20-25.6,-34.49l0,-52.94l25.81,0c6.94,0%2010.85,-3.47%2010.85,-9.54s-3.9,-9.33%20-10.85,-9.33l-25.81,0l0,-15.83c0,-7.59%20-4.34,-11.28%20-11.93,-9.55l-3.04,0.65c-6.29,1.3%20-9.54,5.21%20-9.54,11.71l0,31.89z'%20class='cls-2'/%3e%3cpath%20id='svg_3'%20fill='%23ffffff'%20d='m139.49,295.02c7.38,0%2011.06,4.77%2010.2,11.71l-0.22,1.74c-0.65,6.94%20-4.77,9.54%20-11.93,9.54c-20.39,0.43%20-30.16,15.19%20-30.16,41.22l0,50.55c0,6.94%20-3.9,10.85%20-10.85,10.85l-2.6,0c-6.94,0%20-10.85,-3.9%20-10.85,-10.85l0,-102.39c0,-6.94%203.9,-10.85%2010.85,-10.85l2.6,0c6.94,0%2010.85,3.69%2010.85,10.41l0,10.41c3.91,-11.07%2013.89,-22.34%2032.1,-22.34l0,0l0.01,0z'%20class='cls-2'/%3e%3cpath%20id='svg_4'%20fill='%23ffffff'%20d='m259.67,358.59c0,-27.12%20-15.84,-43.82%20-38.83,-43.82s-38.4,16.49%20-38.4,43.82s15.62,44.04%2038.83,44.04s38.4,-16.7%2038.4,-44.04m-101.53,0c0,-42.74%2026.03,-64.43%2056.84,-64.43c19.52,0%2036.88,9.54%2044.04,26.69l0,-13.45c0,-6.94%203.9,-10.85%2010.85,-10.85l2.6,0c6.94,0%2010.85,3.9%2010.85,10.85l0,102.18c0,6.94%20-3.9,10.85%20-10.85,10.85l-2.6,0c-6.94,0%20-10.85,-3.9%20-10.85,-10.85l0,-12.58c-6.94,16.7%20-24.51,26.47%20-43.82,26.47c-30.81,0%20-57.06,-21.91%20-57.06,-64.87'%20class='cls-2'/%3e%3cpath%20id='svg_5'%20fill='%23ffffff'%20d='m380.06,294.37c34.28,0%2050.11,19.74%2050.11,59.01l0,56.4c0,6.94%20-3.91,10.85%20-10.85,10.85l-2.6,0c-6.94,0%20-10.85,-3.9%20-10.85,-10.85l0,-54.45c0,-27.12%20-10.41,-39.91%20-33.41,-39.91s-32.98,15.4%20-32.98,42.74l0,51.63c0,6.94%20-3.9,10.85%20-10.85,10.85l-2.6,0c-6.94,0%20-10.85,-3.9%20-10.85,-10.85l0,-102.39c0,-6.94%203.91,-10.85%2010.85,-10.85l2.6,0c6.94,0%2010.85,3.91%2010.85,10.85l0,12.34c5.64,-14.39%2019.73,-25.36%2040.57,-25.36l0,0l0.01,-0.01z'%20class='cls-2'/%3e%3cpath%20id='svg_6'%20fill='%23ffffff'%20d='m508.94,422.81c-20.8,0%20-42.78,-8.33%20-53.19,-21.48c-4.44,-5.61%20-2.26,-11.49%204.99,-13.67l2.17,-0.65c4.75,-1.43%208.02,-1.28%2014.32,4.36c8.65,7.74%2020.41,10.61%2031.71,10.61c18.05,0%2028.81,-6.44%2028.81,-17.36c0,-28.63%20-80.45,-5.9%20-80.45,-54.24c0,-22.87%2023.1,-36.01%2049.75,-36.01c16.09,0%2036.22,6.5%2047,17.79c5.1,5.33%203.34,11.34%20-3.68,13.45l-2.17,0.65c-5.86,1.76%20-8.85,-0.39%20-14.53,-3.84c-8.11,-4.92%20-16.87,-8.09%20-26.22,-8.09c-15.64,0%20-26.27,5.18%20-26.27,14.91c0,27.74%2081.1,4.51%2081.1,54.72c0,23.06%20-22.28,38.83%20-53.32,38.83l0,0l-0.02,0.02z'%20class='cls-2'/%3e%3cpath%20id='svg_7'%20fill='%23ffffff'%20d='m585.05,409.79l0,-142.75c0,-6.94%203.9,-10.85%2010.85,-10.85l2.82,0c6.94,0%2010.85,3.9%2010.85,10.85l0,142.75c0,6.94%20-3.91,10.85%20-10.85,10.85l-2.82,0c-6.94,0%20-10.85,-3.91%20-10.85,-10.85'%20class='cls-2'/%3e%3cpath%20id='svg_8'%20fill='%23ffffff'%20d='m737.56,358.59c0,-27.12%20-15.84,-43.82%20-38.84,-43.82s-38.4,16.49%20-38.4,43.82s15.62,44.04%2038.83,44.04s38.4,-16.7%2038.4,-44.04m-101.53,0c0,-42.74%2026.03,-64.43%2056.84,-64.43c19.52,0%2036.88,9.54%2044.04,26.69l0,-13.45c0,-6.94%203.9,-10.85%2010.85,-10.85l2.6,0c6.94,0%2010.85,3.9%2010.85,10.85l0,102.18c0,6.94%20-3.9,10.85%20-10.85,10.85l-2.6,0c-6.94,0%20-10.85,-3.9%20-10.85,-10.85l0,-12.58c-6.94,16.7%20-24.51,26.47%20-43.82,26.47c-30.81,0%20-57.06,-21.91%20-57.06,-64.87'%20class='cls-2'/%3e%3cpath%20id='svg_9'%20fill='%23ffffff'%20d='m800.25,315.42l0,55.76c0,37.96%2014.53,51.2%2046.42,51.2l0,0c1.95,0%204.12,-0.03%206.29,-0.22c6.89,-0.65%209.8,-4.45%209.11,-11.07c-0.61,-5.88%20-4.99,-8.24%20-11.71,-8.24c-18.87,0%20-25.6,-8.9%20-25.6,-34.49l0,-52.94l25.81,0c6.94,0%2010.85,-3.47%2010.85,-9.55s-3.91,-9.33%20-10.85,-9.33l-25.81,0l0,-15.83c0,-7.59%20-4.34,-11.28%20-11.93,-9.54l-3.04,0.65c-6.29,1.3%20-9.55,5.21%20-9.55,11.71l0,31.89l0.01,0z'%20class='cls-2'/%3e%3cpath%20id='svg_10'%20fill='%23ffffff'%20d='m883.72,409.79l0,-102.4c0,-6.94%203.83,-10.85%2010.65,-10.85l2.77,0c6.82,0%2010.65,3.9%2010.65,10.85l0,102.4c0,6.94%20-3.83,10.85%20-10.65,10.85l-2.77,0c-6.81,0%20-10.65,-3.91%20-10.65,-10.85m-2.05,-142.96c0,-8.24%206.08,-13.02%2014.32,-13.02c7.59,0%2014.32,4.77%2014.32,13.02s-6.72,13.02%20-14.32,13.02c-8.24,0%20-14.32,-4.77%20-14.32,-13.02'%20class='cls-2'/%3e%3cpath%20id='svg_11'%20fill='%23ffffff'%20d='m1036.06,358.59c0,-27.12%20-15.62,-43.82%20-38.62,-43.82s-38.4,16.49%20-38.4,43.82s15.4,44.04%2038.61,44.04s38.4,-16.7%2038.4,-44.04m-101.31,0c0,-44.69%2031.02,-64.43%2062.69,-64.43s62.91,19.74%2062.91,64.43s-31.02,64.87%20-62.7,64.87s-62.91,-19.74%20-62.91,-64.87'%20class='cls-2'/%3e%3cpath%20id='svg_12'%20fill='%23ffffff'%20d='m555.77,635.72c-20.98,0%20-43.14,-8.4%20-53.65,-21.66c-4.48,-5.66%20-2.27,-11.59%205.03,-13.78l2.19,-0.66c4.79,-1.44%208.09,-1.29%2014.43,4.4c8.73,7.81%2020.59,10.69%2031.98,10.69c18.2,0%2029.05,-6.49%2029.05,-17.5c0,-28.88%20-81.14,-5.95%20-81.14,-54.7c0,-23.07%2023.3,-36.31%2050.17,-36.31c16.23,0%2036.53,6.55%2047.41,17.94c5.14,5.38%203.37,11.43%20-3.72,13.56l-2.19,0.66c-5.91,1.77%20-8.92,-0.39%20-14.66,-3.87c-8.18,-4.96%20-17.02,-8.16%20-26.45,-8.16c-15.78,0%20-26.5,5.22%20-26.5,15.04c0,27.98%2081.79,4.55%2081.79,55.18c0,23.26%20-22.47,39.16%20-53.78,39.16l0,0l0.04,0.01z'%20class='cls-2'/%3e%3cpath%20id='svg_13'%20fill='%23ffffff'%20d='m639.98,526.42l0,56.23c0,38.29%2014.66,51.63%2046.82,51.63l0,0c1.97,0%204.16,-0.03%206.34,-0.22c6.96,-0.66%209.89,-4.49%209.19,-11.16c-0.61,-5.93%20-5.03,-8.31%20-11.81,-8.31c-19.03,0%20-25.82,-8.97%20-25.82,-34.79l0,-53.38l26.03,0c7,0%2010.94,-3.5%2010.94,-9.63s-3.94,-9.41%20-10.94,-9.41l-26.03,0l0,-15.97c0,-7.66%20-4.38,-11.38%20-12.03,-9.63l-3.06,0.66c-6.34,1.31%20-9.63,5.25%20-9.63,11.81l0,32.16l0,0.01z'%20class='cls-2'/%3e%3cpath%20id='svg_14'%20fill='%23ffffff'%20d='m826.59,508.39c7,0%2010.94,3.94%2010.94,10.94l0,103.27c0,7%20-3.94,10.94%20-10.94,10.94l-2.62,0c-7,0%20-10.94,-3.94%20-10.94,-10.94l0,-12.45c-5.69,14.51%20-19.9,25.57%20-40.91,25.57c-34.57,0%20-50.54,-19.91%20-50.54,-59.51l0,-56.89c0,-7%203.94,-10.93%2010.94,-10.93l2.63,0c7,0%2010.94,3.93%2010.94,10.93l0,54.92c0,27.35%2010.5,40.26%2033.69,40.26s33.26,-15.53%2033.26,-43.1l0,-52.07c0,-7%203.94,-10.93%2010.94,-10.93l2.62,0l-0.01,-0.01z'%20class='cls-2'/%3e%3cpath%20id='svg_15'%20fill='%23ffffff'%20d='m967.71,570.31c0,-27.35%20-15.75,-44.19%20-39.16,-44.19s-38.72,16.63%20-38.72,44.19s15.75,44.41%2039.16,44.41s38.72,-16.85%2038.72,-44.41m-102.39,0c0,-43.1%2026.25,-64.98%2057.32,-64.98c19.69,0%2037.41,9.63%2044.41,26.91l0,-54.26c0,-7%203.94,-10.94%2010.94,-10.94l2.62,0c7,0%2010.94,3.94%2010.94,10.94l0,143.74c0,7%20-3.94,10.94%20-10.94,10.94l-2.62,0c-7,0%20-10.94,-3.94%20-10.94,-10.94l0,-12.69c-7,16.85%20-24.72,26.69%20-44.19,26.69c-31.07,0%20-57.54,-22.09%20-57.54,-65.41'%20class='cls-2'/%3e%3cpath%20id='svg_16'%20fill='%23ffffff'%20d='m1023.66,624.38l0,-103.27c0,-7%203.87,-10.94%2010.74,-10.94l2.79,0c6.87,0%2010.74,3.94%2010.74,10.94l0,103.27c0,7%20-3.87,10.94%20-10.74,10.94l-2.79,0c-6.87,0%20-10.74,-3.94%20-10.74,-10.94m-2.07,-144.18c0,-8.31%206.13,-13.13%2014.44,-13.13c7.66,0%2014.44,4.81%2014.44,13.13s-6.78,13.13%20-14.44,13.13c-8.31,0%20-14.44,-4.81%20-14.44,-13.13'%20class='cls-2'/%3e%3cpath%20id='svg_17'%20fill='%23ffffff'%20d='m1177.29,570.31c0,-27.35%20-15.75,-44.19%20-38.94,-44.19s-38.72,16.63%20-38.72,44.19s15.53,44.41%2038.94,44.41s38.72,-16.85%2038.72,-44.41m-102.17,0c0,-45.07%2031.29,-64.98%2063.23,-64.98s63.45,19.91%2063.45,64.98s-31.29,65.41%20-63.23,65.41s-63.45,-19.91%20-63.45,-65.41'%20class='cls-2'/%3e%3cpath%20id='svg_18'%20fill='%23a51d78'%20d='m1366.99,177.21c7.75,6.65%2016.32,15.32%2024.3,26.23c19.82,27.08%2029.56,59.09%2028.94,95.13c-0.29,16.74%20-3.42,30.61%20-9.31,41.23c-0.55,1%20-1.14,1.99%20-1.74,2.94c-1.17,1.86%20-2.46,3.67%20-3.82,5.37c-3.28,4.11%20-7.15,7.78%20-11.48,10.91c-0.85,0.61%20-1.73,1.21%20-2.61,1.79c-1.77,1.14%20-3.63,2.22%20-5.54,3.2c-2.85,1.46%20-5.89,2.76%20-9.03,3.84c-2.08,0.72%20-4.25,1.36%20-6.44,1.91c-6.58,1.65%20-13.54,2.48%20-20.67,2.48c-19.29,0%20-36.82,-6.22%20-49.35,-17.5c-14.34,-12.91%20-21.61,-31.67%20-21.61,-55.75c0,-30.01%2011.74,-53.91%2031.41,-63.94c15.09,-7.69%2029.61,-15.71%2041.22,-29.17c7.24,-8.39%2012.46,-17.89%2015.72,-28.67m-14.08,-37.87c-3.24,0%20-6.11,2.04%20-6.11,5.55l0,0c0.97,42.1%20-22.01,55.46%20-47.74,68.58c-26.46,13.49%20-44.63,43.79%20-44.63,85.51c0,66.7%2047.26,97.47%2095.17,97.47c8.98,0%2017.93,-1.05%2026.54,-3.2c2.87,-0.72%205.7,-1.56%208.49,-2.52c4.18,-1.45%208.24,-3.17%2012.16,-5.18c2.61,-1.34%205.16,-2.81%207.63,-4.41c1.24,-0.8%202.45,-1.63%203.65,-2.49c5.98,-4.32%2011.44,-9.45%2016.21,-15.43c1.91,-2.39%203.71,-4.92%205.39,-7.58c0.84,-1.33%201.65,-2.7%202.42,-4.1c7.76,-14%2011.99,-31.44%2012.35,-52.56c1.63,-95.85%20-61.94,-144.16%20-87.99,-158.76c-0.99,-0.56%20-2.19,-0.88%20-3.54,-0.88l0,0z'%20class='cls-3'/%3e%3cpath%20id='svg_19'%20fill='%23e94642'%20d='m1234.82,24.21c19.29,0%2036.82,6.22%2049.35,17.5c14.34,12.91%2021.61,31.67%2021.61,55.75c0,30.01%20-11.74,53.91%20-31.41,63.94c-15.09,7.69%20-29.61,15.71%20-41.22,29.17c-7.24,8.39%20-12.46,17.89%20-15.72,28.67c-7.75,-6.65%20-16.32,-15.32%20-24.3,-26.23c-19.82,-27.08%20-29.56,-59.09%20-28.94,-95.13c0.29,-16.74%203.42,-30.61%209.31,-41.23c0.55,-1%201.14,-1.98%201.74,-2.93c1.17,-1.86%202.46,-3.67%203.82,-5.37c3.28,-4.11%207.15,-7.78%2011.48,-10.91c0.85,-0.61%201.73,-1.21%202.61,-1.79c1.77,-1.14%203.63,-2.22%205.54,-3.2c2.85,-1.46%205.89,-2.76%209.03,-3.84c2.08,-0.72%204.25,-1.36%206.44,-1.91c6.58,-1.65%2013.54,-2.48%2020.67,-2.48m0,-24.21c-8.98,0%20-17.93,1.05%20-26.54,3.2c-2.87,0.72%20-5.7,1.56%20-8.49,2.52c-4.18,1.45%20-8.24,3.17%20-12.16,5.18c-2.61,1.34%20-5.16,2.81%20-7.63,4.41c-1.24,0.8%20-2.45,1.63%20-3.65,2.49c-5.98,4.32%20-11.44,9.45%20-16.21,15.43c-1.91,2.39%20-3.71,4.92%20-5.39,7.58c-0.84,1.33%20-1.65,2.7%20-2.42,4.1c-7.76,14%20-11.99,31.44%20-12.35,52.56c-1.63,95.85%2061.94,144.16%2087.99,158.76c0.99,0.56%202.19,0.88%203.54,0.88c3.24,0%206.11,-2.04%206.11,-5.55l0,0c-0.97,-42.1%2022.01,-55.46%2047.74,-68.58c26.46,-13.49%2044.63,-43.79%2044.63,-85.51c0,-66.7%20-47.26,-97.47%20-95.17,-97.47l0,0z'%20class='cls-1'/%3e%3c/g%3e%3c/svg%3e";
33
- const getSubmitLabel = function(isUrgent, isMachineTranslation) {
34
- if (isMachineTranslation) return "Translate with ai";
35
- else if (isUrgent) return "Translate immediately";
36
- else return "Request translation";
37
- };
38
- const TranslationMenu = () => {
39
- const [languages, setLanguages] = useState([]);
40
- const [selectedOption, setSelectedOption] = useState("");
41
- const [source, setSource] = useState("");
42
- const [email, setEmail] = useState("");
43
- const [isEmail, setIsEmail] = useState(true);
44
- const [isUrgent, setIsUrgent] = useState(false);
45
- const [dueDate, setDueDate] = useState(0);
46
- const [showAlert, setShowAlert] = useState(false);
47
- const [alertType, setAlertType] = useState("success");
48
- const [alertMessage, setAlertMessage] = useState("");
49
- const { get, post } = getFetchClient();
50
- const context = unstable_useContentManagerContext();
51
- const { id, contentType, model } = context || {};
52
- const isCollectionType = contentType?.kind === "collectionType";
53
- const [licenseValid, setLicenseValid] = useState(null);
54
- const [tsIsAvailable, setTsIsAvailable] = useState(true);
55
- const selectedLang = Array.isArray(languages) ? languages.find((lang) => lang.name === selectedOption) : void 0;
56
- const isMachineTranslation = selectedLang?.machine ?? false;
57
- useEffect(() => {
58
- if (!model) return;
59
- get("/translationstudio/getLicense").then((response) => {
60
- if (typeof response.data.license !== "string") return false;
61
- return response.data.license !== "";
62
- }).then((hasLicense) => {
63
- setLicenseValid(hasLicense);
64
- if (!hasLicense) throw new Error("No license set");
65
- setTsIsAvailable(true);
66
- return get("/translationstudio/mappings");
67
- }).then((langs) => {
68
- if (langs.data && Array.isArray(langs.data) && langs.data.length > 0)
69
- setLanguages(langs.data);
70
- }).catch((err) => {
71
- console.error(err);
72
- setTsIsAvailable(false);
73
- });
74
- get("/translationstudio/email").then((response) => {
75
- if (response.data.email) setEmail(response.data.email ?? "");
76
- }).catch(console.error);
77
- }, [setLicenseValid, setTsIsAvailable, setEmail, setLanguages, id, model, isCollectionType]);
78
- const handleUrgentChange = () => {
79
- if (isUrgent) {
80
- setIsUrgent(false);
81
- setDueDate(0);
82
- } else {
83
- setIsUrgent(true);
84
- }
85
- };
86
- const handleEmailChange = () => setIsEmail(!isEmail);
87
- const handleDueDateChange = (date) => {
88
- const timestamp = date.getTime();
89
- setDueDate(timestamp < Date.now() ? 0 : timestamp);
90
- setIsUrgent(false);
91
- };
92
- const handleRadioSelection = (value) => {
93
- setSelectedOption(value);
94
- const lang = languages.find((l) => l.name === value);
95
- if (lang) {
96
- setSource(lang.source);
97
- if (lang.machine) {
98
- setIsUrgent(false);
99
- setDueDate(0);
100
- }
101
- }
102
- };
103
- const displayAlert = (variant, message) => {
104
- setAlertType(variant);
105
- setAlertMessage(message);
106
- setShowAlert(true);
107
- setTimeout(() => setShowAlert(false), 5e3);
108
- };
109
- const determineEntryName = (fetchedEntryData) => {
110
- if (!fetchedEntryData) return "Untitled";
111
- const commonTitleFields = ["title", "name", "headline"];
112
- for (const field of commonTitleFields) {
113
- const key = Object.keys(fetchedEntryData).find((k) => k.toLowerCase() === field);
114
- if (key && typeof fetchedEntryData[key] === "string" && fetchedEntryData[key].trim()) {
115
- return fetchedEntryData[key];
116
- }
117
- }
118
- const excludedFields = [
119
- "id",
120
- "createdAt",
121
- "updatedAt",
122
- "publishedAt",
123
- "locale",
124
- "createdBy",
125
- "updatedBy",
126
- "documentId",
127
- "provider",
128
- "resetPasswordToken",
129
- "confirmationToken",
130
- "password",
131
- "email",
132
- "slug",
133
- "link",
134
- "url",
135
- "image",
136
- "file",
137
- "media"
138
- ];
139
- for (const [key, value] of Object.entries(fetchedEntryData)) {
140
- if (!excludedFields.includes(key) && typeof value === "string" && value.trim()) {
141
- return value;
142
- }
143
- }
144
- return `${contentType?.info?.displayName ?? ""} #${id ?? ""}`;
145
- };
146
- const handleTranslationRequest = async () => {
147
- const entryUid = isCollectionType ? `${model}#${id}` : model;
148
- try {
149
- const entryResponse = await post("/translationstudio/entrydata", {
150
- uid: entryUid,
151
- locale: source
152
- });
153
- const fetchedEntryData = entryResponse.data;
154
- const selectedLang2 = languages.find((lang) => lang["name"] === selectedOption);
155
- const translationObjects = selectedLang2.targets.map(
156
- (targetLang) => ({
157
- // @ts-ignore
158
- source: selectedLang2.source,
159
- target: targetLang,
160
- // @ts-ignore
161
- connector: selectedLang2.connector
162
- })
163
- );
164
- const payload = {
165
- duedate: dueDate,
166
- email: isEmail && !isMachineTranslation ? email : "",
167
- urgent: isMachineTranslation ? true : isUrgent,
168
- "project-name": contentType?.info?.displayName ?? "",
169
- translations: translationObjects,
170
- entry: {
171
- uid: entryUid,
172
- name: determineEntryName(fetchedEntryData)
173
- }
174
- };
175
- const response = await post("/translationstudio/translate", payload);
176
- displayAlert(
177
- response.data === true ? "success" : "danger",
178
- response.data === true ? "Translation request sent successfully" : "Error requesting translation"
179
- );
180
- } catch (error) {
181
- displayAlert("danger", `The entry does not exist in the selected source locale (${source}).`);
182
- return;
183
- }
184
- };
185
- const renderNotAvailable = function() {
186
- if (!tsIsAvailable) {
187
- return /* @__PURE__ */ jsx(Box, { paddingBottom: 4, children: /* @__PURE__ */ jsx(Typography, { style: { color: "white" }, children: "The pugin is not available." }) });
188
- }
189
- if (licenseValid === false) {
190
- return /* @__PURE__ */ jsx(Box, { paddingBottom: 4, children: /* @__PURE__ */ jsx(Typography, { style: { color: "white" }, children: "Your translationstudio license is invalid. Please update your strapi configuration." }) });
191
- }
192
- if (languages.length === 0) {
193
- return /* @__PURE__ */ jsx(Box, { paddingBottom: 4, children: /* @__PURE__ */ jsx(Typography, { style: { color: "white" }, children: "No translation settings available. translationstudio has not been configured yet. Please add translation settings first." }) });
194
- }
195
- return /* @__PURE__ */ jsx(Fragment, {});
196
- };
197
- const renderPlugin = function() {
198
- return /* @__PURE__ */ jsxs(Fragment, { children: [
199
- /* @__PURE__ */ jsx(Box, { paddingBottom: 4, children: /* @__PURE__ */ jsxs(
200
- Radio.Group,
201
- {
202
- onValueChange: handleRadioSelection,
203
- name: "languages",
204
- "aria-label": "translationstudio settings",
205
- children: [
206
- /* @__PURE__ */ jsx(Typography, { variant: "beta", tag: "label", id: "Sprachauswahl", children: "Translation Settings" }),
207
- languages.map((lang) => /* @__PURE__ */ jsx(Radio.Item, { value: lang.name, children: lang["name"] }, lang.id))
208
- ]
209
- }
210
- ) }),
211
- !isMachineTranslation && /* @__PURE__ */ jsxs(Fragment, { children: [
212
- /* @__PURE__ */ jsx(Box, { paddingBottom: 4, paddingTop: 4, style: { color: "white" }, children: /* @__PURE__ */ jsx(Typography, { variant: "beta", tag: "label", paddingBottom: 4, children: "Additional Settings" }) }),
213
- /* @__PURE__ */ jsx(Box, { paddingBottom: 4, style: { color: "white" }, children: /* @__PURE__ */ jsx(
214
- Checkbox,
215
- {
216
- onCheckedChange: handleUrgentChange,
217
- defaultChecked: isUrgent,
218
- style: { color: "white" },
219
- children: /* @__PURE__ */ jsx(Typography, { style: { color: "white" }, children: "translate immediately (and ignore quotes)" })
220
- }
221
- ) }),
222
- /* @__PURE__ */ jsx(Box, { paddingBottom: 4, style: { color: "white" }, children: /* @__PURE__ */ jsx(
223
- Checkbox,
224
- {
225
- onCheckedChange: handleEmailChange,
226
- defaultChecked: isEmail,
227
- style: { color: "white" },
228
- children: /* @__PURE__ */ jsx(Typography, { style: { color: "white" }, children: "Send email notifications on translation status updates" })
229
- }
230
- ) }),
231
- !isUrgent ? /* @__PURE__ */ jsxs(Box, { paddingBottom: 8, paddingTop: 4, children: [
232
- /* @__PURE__ */ jsx(Box, { paddingBottom: 4, children: /* @__PURE__ */ jsx(Typography, { variant: "beta", children: "Due Date" }) }),
233
- /* @__PURE__ */ jsx(
234
- DatePicker,
235
- {
236
- onChange: handleDueDateChange,
237
- selecteddate: dueDate ? new Date(dueDate) : null
238
- }
239
- )
240
- ] }) : null
241
- ] }),
242
- /* @__PURE__ */ jsx(
243
- Button,
244
- {
245
- fullWidth: true,
246
- onClick: handleTranslationRequest,
247
- disabled: !selectedOption,
248
- startIcon: /* @__PURE__ */ jsx(
249
- "svg",
250
- {
251
- width: "20",
252
- height: "20",
253
- viewBox: "0 0 24 24",
254
- fill: "none",
255
- xmlns: "http://www.w3.org/2000/svg",
256
- children: /* @__PURE__ */ jsx("path", { d: "M2,21L23,12L2,3V10L17,12L2,14V21Z", fill: "currentColor" })
257
- }
258
- ),
259
- children: getSubmitLabel(isUrgent, isMachineTranslation)
260
- }
261
- )
262
- ] });
263
- };
264
- const pluginIsAvailable = function() {
265
- return licenseValid !== null && tsIsAvailable === true;
266
- };
267
- return /* @__PURE__ */ jsxs(Fragment, { children: [
268
- showAlert && /* @__PURE__ */ jsx(
269
- Box,
270
- {
271
- style: {
272
- position: "fixed",
273
- top: "10%",
274
- left: "50%",
275
- transform: "translate(-50%, -50%)",
276
- zIndex: 10,
277
- minWidth: "400px",
278
- maxWidth: "90%"
279
- },
280
- children: /* @__PURE__ */ jsx(Alert, { closeLabel: "Close", variant: alertType, onClose: () => setShowAlert(false), children: alertMessage })
281
- }
282
- ),
283
- /* @__PURE__ */ jsxs(Box, { padding: 4, style: { width: "100%", color: "white" }, children: [
284
- /* @__PURE__ */ jsx(Box, { paddingBottom: 4, textAlign: "right", style: { width: "100%" }, children: /* @__PURE__ */ jsx(Flex, { justifyContent: "flex-end", children: /* @__PURE__ */ jsx(
285
- "img",
286
- {
287
- src: logoSvg,
288
- alt: "",
289
- style: {
290
- maxWidth: "200px",
291
- height: "auto"
292
- }
293
- }
294
- ) }) }),
295
- !pluginIsAvailable() ? renderNotAvailable() : renderPlugin()
296
- ] })
297
- ] });
298
- };
299
- const index = {
300
- register(app) {
301
- app.addMenuLink({
302
- to: `plugins/${PLUGIN_ID}`,
303
- icon: PluginIcon,
304
- intlLabel: {
305
- id: `${PLUGIN_ID}.plugin.name`,
306
- defaultMessage: PLUGIN_ID
307
- },
308
- Component: async () => {
309
- const { App } = await import("../_chunks/App-DxAbaDu8.mjs");
310
- return App;
311
- }
312
- });
313
- app.getPlugin("content-manager").injectComponent("editView", "right-links", {
314
- name: "translation-menu",
315
- Component: TranslationMenu
316
- });
317
- app.registerPlugin({
318
- id: PLUGIN_ID,
319
- initializer: Initializer,
320
- isReady: false,
321
- name: PLUGIN_ID
322
- });
323
- },
324
- async registerTrads(app) {
325
- const { locales } = app;
326
- const importedTranslations = await Promise.all(
327
- locales.map((locale) => {
328
- return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => import("../_chunks/en-Byx4XI2L.mjs") }), `./translations/${locale}.json`, 3).then(({ default: data }) => {
329
- return {
330
- data: getTranslation(data),
331
- locale
332
- };
333
- }).catch(() => {
334
- return {
335
- data: {},
336
- locale
337
- };
338
- });
339
- })
340
- );
341
- return importedTranslations;
342
- }
343
- };
1
+ import { m } from "../_chunks/index-ChM8Lw4L.mjs";
344
2
  export {
345
- index as default
3
+ m as default
346
4
  };
@@ -0,0 +1,3 @@
1
+ import { BulkTranslationMenuProps } from '../../../Types';
2
+ declare const BulkTranslationMenu: ({ historyData, isLoadingHistory, onTranslationComplete, }: BulkTranslationMenuProps) => import("react/jsx-runtime").JSX.Element;
3
+ export { BulkTranslationMenu };
@@ -0,0 +1,3 @@
1
+ import { BulkTranslationPanelProps } from '../../../Types';
2
+ declare const BulkTranslationPanel: ({ contentType, selectedEntries, onTranslationComplete, }: BulkTranslationPanelProps) => import("react/jsx-runtime").JSX.Element;
3
+ export default BulkTranslationPanel;
@@ -0,0 +1,3 @@
1
+ import { EntryHistoryProps } from '../../../Types';
2
+ declare const EntryHistory: ({ entryUid }: EntryHistoryProps) => import("react/jsx-runtime").JSX.Element | null;
3
+ export default EntryHistory;
@@ -0,0 +1,2 @@
1
+ declare const HistoryIcon: () => import("react/jsx-runtime").JSX.Element;
2
+ export { HistoryIcon };
@@ -0,0 +1,2 @@
1
+ declare const HistoryMenu: () => import("react/jsx-runtime").JSX.Element;
2
+ export { HistoryMenu };
@@ -0,0 +1,4 @@
1
+ export declare const LoadingSpinner: () => import("react/jsx-runtime").JSX.Element;
2
+ export declare const ErrorMessage: ({ message }: {
3
+ message: string;
4
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ declare const SettingsIcon: () => import("react/jsx-runtime").JSX.Element;
2
+ export { SettingsIcon };
@@ -0,0 +1,2 @@
1
+ declare const TranslationstudioLogo: ({}: {}) => import("react/jsx-runtime").JSX.Element;
2
+ export default TranslationstudioLogo;
@@ -0,0 +1,13 @@
1
+ export type AlertType = 'success' | 'danger';
2
+ export declare const createSuccessMessage: (successCount: number, totalCount: number) => {
3
+ type: AlertType;
4
+ message: string;
5
+ };
6
+ export declare const createErrorMessage: (totalCount: number) => {
7
+ type: AlertType;
8
+ message: string;
9
+ };
10
+ export declare const createGeneralErrorMessage: () => {
11
+ type: AlertType;
12
+ message: string;
13
+ };
@@ -0,0 +1 @@
1
+ export declare const validateDueDate: (date: Date) => number;
@@ -0,0 +1,2 @@
1
+ export declare const getStoredEmail: () => string;
2
+ export declare const setStoredEmail: (email: string) => void;
@@ -0,0 +1,2 @@
1
+ export declare const determineEntryName: (fetchedEntryData: any, contentTypeDisplayName: string, entryId: string) => string;
2
+ export declare const createEntryUid: (isCollectionType: boolean, model: string, id: string) => string;
@@ -0,0 +1,2 @@
1
+ import { ContentType } from '../../../../Types';
2
+ export declare const filterAndTransformContentTypes: (data: any[]) => ContentType[];
@@ -0,0 +1 @@
1
+ export declare const formatDate: (utcTimestamp: string | number) => string;
@@ -0,0 +1,3 @@
1
+ import { Entry } from '../../../../Types';
2
+ export declare const getEntryTitle: (entry: Entry) => string;
3
+ export declare const getEntryId: (entry: Entry) => string;
@@ -0,0 +1,5 @@
1
+ export declare const handleHistoryResponse: (data: any) => {
2
+ isError: boolean;
3
+ errorMessage?: string;
4
+ historyData: any[];
5
+ };
@@ -0,0 +1,13 @@
1
+ import { HistoryItem } from '../../../../Types';
2
+ import { StatusInfo } from './historyStatusUtils';
3
+ export interface GroupedHistoryItem {
4
+ 'element-uid': string;
5
+ 'time-imported': number;
6
+ 'time-intranslation': number;
7
+ targetLanguages: string[];
8
+ allStatuses: StatusInfo[];
9
+ latestTimeImported: number;
10
+ latestTimeInTranslation: number;
11
+ combinedStatus: StatusInfo;
12
+ }
13
+ export declare const groupHistoryData: (historyData: HistoryItem[]) => GroupedHistoryItem[];
@@ -0,0 +1,7 @@
1
+ export type StatusVariant = 'success' | 'warning' | 'neutral';
2
+ export interface StatusInfo {
3
+ text: string;
4
+ variant: StatusVariant;
5
+ }
6
+ export declare const getHistoryStatus: (timeInTranslation: number, timeImported: number) => StatusInfo;
7
+ export declare const getCombinedStatus: (allStatuses: StatusInfo[]) => StatusInfo;
@@ -0,0 +1,2 @@
1
+ export declare const getSearchableText: (item: any) => string;
2
+ export declare const filterBySearchTerm: <T extends unknown>(items: T[], searchTerm: string, getSearchableText: (item: T) => string) => T[];
@@ -0,0 +1,9 @@
1
+ export type SortField = 'project-name' | 'element-name' | 'element-uid' | 'status' | 'target-language' | 'time-imported';
2
+ export type SortDirection = 'asc' | 'desc';
3
+ export interface SortState {
4
+ field: SortField;
5
+ direction: SortDirection;
6
+ }
7
+ export declare const getSortValue: (item: any, sortField: SortField) => string;
8
+ export declare const sortItems: <T extends unknown>(items: T[], sortState: SortState) => T[];
9
+ export declare const getNextSortState: (currentState: SortState, clickedField: SortField) => SortState;
@@ -0,0 +1,6 @@
1
+ export type TranslationStatus = 'translated' | 'in_translation' | 'not_translated' | 'error_fetching_history';
2
+ export declare const getTranslationStatus: (entryId: string, historyData: any[]) => TranslationStatus;
3
+ export declare const getTargetLanguages: (entryId: string, historyData: any[]) => string[];
4
+ export declare const getTranslationDate: (entryId: string, historyData: any[]) => string;
5
+ export declare const getStatusBadgeVariant: (status: TranslationStatus) => string;
6
+ export declare const getStatusDisplayText: (status: TranslationStatus) => string;
@@ -0,0 +1,15 @@
1
+ export declare const isDarkMode: () => boolean;
2
+ export declare const getThemeColors: () => {
3
+ primaryBackground: string;
4
+ secondaryBackground: string;
5
+ cardBackground: string;
6
+ primaryText: string;
7
+ secondaryText: string;
8
+ mutedText: string;
9
+ border: string;
10
+ success: string;
11
+ warning: string;
12
+ danger: string;
13
+ info: string;
14
+ };
15
+ export declare const useThemeMode: () => boolean;
@@ -0,0 +1,5 @@
1
+ import { MappingsResponse, TranslationRequest } from '../../../../Types';
2
+ export declare const determineEntryName: (fetchedEntryData: any, contentTypeDisplayName: string) => string;
3
+ export declare const createTranslationPayload: (selectedLang: MappingsResponse, dueDate: number, isEmail: boolean, isMachineTranslation: boolean, email: string, isUrgent: boolean, contentTypeDisplayName: string, entryUid: string, entryName: string) => TranslationRequest;
4
+ export declare const getSubmitLabel: (selectedEntriesCount: number, isUrgent: boolean, isMachineTranslation: boolean) => string;
5
+ export declare const createEntryUid: (contentType: any, entryId: string) => string;
@@ -0,0 +1 @@
1
+ export declare const useDebounce: <T>(value: T, delay: number) => T;
@@ -0,0 +1,2 @@
1
+ declare const HistoryPage: () => import("react/jsx-runtime").JSX.Element;
2
+ export { HistoryPage };