@manifest-editor/translation 2.1.0 → 2.2.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 (43) hide show
  1. package/dist/constants-BhZv2ySm.cjs +2 -0
  2. package/dist/constants-BhZv2ySm.cjs.map +1 -0
  3. package/dist/{constants-2H03x5Ga.js → constants-qn_qe3_G.js} +1 -1
  4. package/dist/{constants-2H03x5Ga.js.map → constants-qn_qe3_G.js.map} +1 -1
  5. package/dist/{index-CkK8TiJs.d.ts → index-C35Qrq97.d.ts} +4 -7
  6. package/dist/index-C35Qrq97.d.ts.map +1 -0
  7. package/dist/{index-B-UTJDqv.d.cts → index-Dt-W_09z.d.cts} +4 -7
  8. package/dist/index-Dt-W_09z.d.cts.map +1 -0
  9. package/dist/index.cjs +2 -1
  10. package/dist/index.cjs.map +1 -0
  11. package/dist/index.d.cts +2 -2
  12. package/dist/index.d.ts +2 -2
  13. package/dist/index.js +1 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/lazy.cjs +2 -1
  16. package/dist/lazy.cjs.map +1 -0
  17. package/dist/lazy.d.cts +2 -4
  18. package/dist/lazy.d.cts.map +1 -1
  19. package/dist/lazy.d.ts +2 -4
  20. package/dist/lazy.d.ts.map +1 -1
  21. package/dist/lazy.js +1 -1
  22. package/dist/lazy.js.map +1 -1
  23. package/dist/plugin-BuUFaI9S.cjs +2 -0
  24. package/dist/plugin-BuUFaI9S.cjs.map +1 -0
  25. package/dist/{plugin-sM3MrbwG.js → plugin-v71X5Knc.js} +2 -2
  26. package/dist/plugin-v71X5Knc.js.map +1 -0
  27. package/dist/{protocol-znyidDej.js → protocol-DQvOIA0W.js} +1 -1
  28. package/dist/{protocol-znyidDej.js.map → protocol-DQvOIA0W.js.map} +1 -1
  29. package/dist/protocol-SEZnfU5j.cjs +2 -0
  30. package/dist/protocol-SEZnfU5j.cjs.map +1 -0
  31. package/dist/translation-worker.cjs +2 -1
  32. package/dist/translation-worker.cjs.map +1 -0
  33. package/dist/translation-worker.d.cts +1 -1
  34. package/dist/translation-worker.d.ts +1 -1
  35. package/dist/translation-worker.js +1 -1
  36. package/dist/translation-worker.js.map +1 -1
  37. package/package.json +12 -11
  38. package/dist/constants-D5kaKQHg.cjs +0 -1
  39. package/dist/index-B-UTJDqv.d.cts.map +0 -1
  40. package/dist/index-CkK8TiJs.d.ts.map +0 -1
  41. package/dist/plugin-DcjqyREu.cjs +0 -1
  42. package/dist/plugin-sM3MrbwG.js.map +0 -1
  43. package/dist/protocol-B15qfxfT.cjs +0 -1
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{a as e,i as t,n,o as r,r as i,t as a}from"./constants-2H03x5Ga.js";import{a as o,i as s,n as c,o as l,r as u,s as d,t as f}from"./protocol-znyidDej.js";import{n as p,t as m}from"./plugin-sM3MrbwG.js";import{getAvailableLanguagesFromResource as h}from"@iiif/helpers/i18n";import{Modal as ee,Sidebar as te,SidebarContent as ne,SidebarHeader as re}from"@manifest-editor/components";import{useEffect as g,useMemo as _,useState as v}from"react";import{Fragment as y,jsx as b,jsxs as x}from"react/jsx-runtime";import{addReference as S,batchActions as ie,importEntities as ae}from"@iiif/helpers/vault/actions";import{runBackgroundAction as oe,useAppResource as se,useAvailableBackgroundActions as ce,useBackgroundActionsStoreApi as le,useConfig as ue,useEditingResource as de,useEditingResourceStack as C,usePluginRuntimeApi as fe}from"@manifest-editor/shell";import{useVault as pe,useVaultSelector as w}from"react-iiif-vault";const T=[{code:`af`,label:`Afrikaans`},{code:`am`,label:`Amharic`},{code:`ar`,label:`Arabic`},{code:`ast`,label:`Asturian`},{code:`az`,label:`Azerbaijani`},{code:`ba`,label:`Bashkir`},{code:`be`,label:`Belarusian`},{code:`bg`,label:`Bulgarian`},{code:`bn`,label:`Bengali`},{code:`br`,label:`Breton`},{code:`bs`,label:`Bosnian`},{code:`ca`,label:`Catalan; Valencian`},{code:`ceb`,label:`Cebuano`},{code:`cs`,label:`Czech`},{code:`cy`,label:`Welsh`},{code:`da`,label:`Danish`},{code:`de`,label:`German`},{code:`el`,label:`Greek`},{code:`en`,label:`English`},{code:`es`,label:`Spanish`},{code:`et`,label:`Estonian`},{code:`fa`,label:`Persian`},{code:`ff`,label:`Fulah`},{code:`fi`,label:`Finnish`},{code:`fr`,label:`French`},{code:`fy`,label:`Western Frisian`},{code:`ga`,label:`Irish`},{code:`gd`,label:`Gaelic; Scottish Gaelic`},{code:`gl`,label:`Galician`},{code:`gu`,label:`Gujarati`},{code:`ha`,label:`Hausa`},{code:`he`,label:`Hebrew`},{code:`hi`,label:`Hindi`},{code:`hr`,label:`Croatian`},{code:`ht`,label:`Haitian; Haitian Creole`},{code:`hu`,label:`Hungarian`},{code:`hy`,label:`Armenian`},{code:`id`,label:`Indonesian`},{code:`ig`,label:`Igbo`},{code:`ilo`,label:`Iloko`},{code:`is`,label:`Icelandic`},{code:`it`,label:`Italian`},{code:`ja`,label:`Japanese`},{code:`jv`,label:`Javanese`},{code:`ka`,label:`Georgian`},{code:`kk`,label:`Kazakh`},{code:`km`,label:`Central Khmer`},{code:`kn`,label:`Kannada`},{code:`ko`,label:`Korean`},{code:`lb`,label:`Luxembourgish; Letzeburgesch`},{code:`lg`,label:`Ganda`},{code:`ln`,label:`Lingala`},{code:`lo`,label:`Lao`},{code:`lt`,label:`Lithuanian`},{code:`lv`,label:`Latvian`},{code:`mg`,label:`Malagasy`},{code:`mk`,label:`Macedonian`},{code:`ml`,label:`Malayalam`},{code:`mn`,label:`Mongolian`},{code:`mr`,label:`Marathi`},{code:`ms`,label:`Malay`},{code:`my`,label:`Burmese`},{code:`ne`,label:`Nepali`},{code:`nl`,label:`Dutch; Flemish`},{code:`no`,label:`Norwegian`},{code:`ns`,label:`Northern Sotho`},{code:`oc`,label:`Occitan`},{code:`or`,label:`Oriya`},{code:`pa`,label:`Panjabi; Punjabi`},{code:`pl`,label:`Polish`},{code:`ps`,label:`Pushto; Pashto`},{code:`pt`,label:`Portuguese`},{code:`ro`,label:`Romanian; Moldavian; Moldovan`},{code:`ru`,label:`Russian`},{code:`sd`,label:`Sindhi`},{code:`si`,label:`Sinhala; Sinhalese`},{code:`sk`,label:`Slovak`},{code:`sl`,label:`Slovenian`},{code:`so`,label:`Somali`},{code:`sq`,label:`Albanian`},{code:`sr`,label:`Serbian`},{code:`ss`,label:`Swati`},{code:`su`,label:`Sundanese`},{code:`sv`,label:`Swedish`},{code:`sw`,label:`Swahili`},{code:`ta`,label:`Tamil`},{code:`th`,label:`Thai`},{code:`tl`,label:`Tagalog`},{code:`tn`,label:`Tswana`},{code:`tr`,label:`Turkish`},{code:`uk`,label:`Ukrainian`},{code:`ur`,label:`Urdu`},{code:`uz`,label:`Uzbek`},{code:`vi`,label:`Vietnamese`},{code:`wo`,label:`Wolof`},{code:`xh`,label:`Xhosa`},{code:`yi`,label:`Yiddish`},{code:`yo`,label:`Yoruba`},{code:`zh`,label:`Chinese`},{code:`zu`,label:`Zulu`}],me=new Set(T.map(e=>e.code));function E(e){return!!e&&me.has(e)}function D(e){return T.find(t=>t.code===e)?.label||e}function O(e){if(!e.total)return`0`;let t=e.existing+(e.suggested||0);return`${Math.round(t/e.total*100)}%`}const k=`none`,A={annotationBodies:!0,canvasLabels:!0};function he(e,t={}){let n=M(e),r=P(t.defaultSourceLanguage)||N(e?.i18n?.defaultLanguage)||n[0]||`en`,i=N(t.defaultSourceLanguage)||N(e?.i18n?.defaultLanguage)||n[0]||`en`;return j({sourceLanguage:r,modelSourceLanguage:i,targetLanguage:N(t.defaultTargetLanguage,i)||n.find(e=>e!==i)||(i===`nl`?`en`:`nl`),runtime:t.runtimePreference,writePolicy:`fill-missing`})}function j(e={}){let t=P(e.sourceLanguage)||`en`,n=F(t,e);return{sourceLanguage:t,modelSourceLanguage:n,targetLanguage:N(e.targetLanguage,n)||(n===`nl`?`en`:`nl`),runtime:_e(e.runtime),writePolicy:`fill-missing`,contentFilters:ve(e.contentFilters),currentResourceOnly:e.currentResourceOnly===!0}}function M(e){let t=e?.i18n?.availableLanguages||[],n=[];for(let e of t){let t=N(e);t&&!n.includes(t)&&n.push(t)}return n}function N(e,t){if(typeof e!=`string`)return null;let n=I(e);if(!n||n===t)return null;if(E(n))return n;let r=n.split(`-`)[0]||``;return r!==n&&r!==t&&E(r)?r:null}function P(e){return ge(e)?k:N(e)}function F(e,t={}){return N(e)||N(t.modelSourceLanguage)||`en`}function ge(e){return typeof e==`string`&&I(e)===k}function I(e){return e.trim().replace(/_/g,`-`).toLowerCase()}function _e(e){return e===`webgpu`||e===`wasm`||e===`auto`?e:`auto`}function ve(e){let t=e&&typeof e==`object`?e:{};return{annotationBodies:typeof t.annotationBodies==`boolean`?t.annotationBodies:A.annotationBodies,canvasLabels:typeof t.canvasLabels==`boolean`?t.canvasLabels:A.canvasLabels}}function L(e,t,n){let r={vault:e,options:n,occurrences:[],visited:new Set};H(r,t);let i=new Map;for(let e of r.occurrences){let t=z(e.sourceText);if(!t)continue;let n=xe(t,e.sourceLanguage,e.targetLanguage,e.valueFormat),r=i.get(n);if(r){r.occurrences.push(e),r.status=Ge(r.status,e.status);continue}i.set(n,{key:n,sourceLanguage:e.sourceLanguage,targetLanguage:e.targetLanguage,sourceText:e.sourceText,normalisedSourceText:t,valueFormat:e.valueFormat,occurrences:[e],status:e.status})}return Array.from(i.values()).sort((e,t)=>{let n=Ke(e.status)-Ke(t.status);return n===0?e.sourceText.localeCompare(t.sourceText):n})}function R(e,t){let n={vault:e,languages:new Map,visited:new Set};return U(n,t),Array.from(n.languages.values()).sort((e,t)=>qe(e).localeCompare(qe(t)))}function ye(e,t,n,r=R(e,t).map(e=>e.language)){return r.filter(e=>!!N(e)).map(r=>{let i={language:r,total:0,missing:0,existing:0,suggested:0,skipped:0,stale:0};for(let a of L(e,t,{...n,targetLanguage:r}))i.total+=1,i[a.status]+=1;return i})}function z(e){return e.replace(/\s+/g,` `).trim()}function be(e){return z(e)}function xe(e,t,n,r){return`${t}:${n}:${r}:${e.toLowerCase()}`}function Se(e,t){if(!e)return[];if(typeof e==`string`)return e.trim()?[{sourceMapLanguage:t,sourceIndex:0,sourceText:e}]:[];let n=V(e,t);if(n.length)return n.map((e,n)=>({sourceMapLanguage:t,sourceIndex:n,sourceText:e})).filter(e=>z(e.sourceText));let r=N(t);if(r){let n=Object.keys(e).find(e=>e!==t&&N(e)===r);if(n)return V(e,n).map((e,t)=>({sourceMapLanguage:n,sourceIndex:t,sourceText:e})).filter(e=>z(e.sourceText))}return V(e,`none`).map((e,t)=>({sourceMapLanguage:`none`,sourceIndex:t,sourceText:e})).filter(e=>z(e.sourceText))}function B(e,t,n){return e?typeof e==`string`?t===`none`||n===0?e:``:V(e,t)[n]||``:``}function V(e,t){let n=e[t];return Array.isArray(n)?n.filter(e=>typeof e==`string`):[]}function Ce(e,t,n){let r=B(e,t,n);if(z(r))return r;if(!e||typeof e==`string`)return``;let i=N(t);if(i)for(let r of Object.keys(e)){if(r===t||N(r)!==i)continue;let a=B(e,r,n);if(z(a))return a}return V(e,t).find(e=>z(e))||``}function we(e){return/<\/?[a-z][\s\S]*>/i.test(e)}function H(e,t){if(!t?.id||!t.type)return;let n=`${t.type}:${t.id}`;if(e.visited.has(n))return;e.visited.add(n);let r=He(e.vault,t);if(r){ke(e,r),Ae(e,r),je(e,r);for(let t of K(r.provider,`Agent`))H(e,t);switch(r.type){case`Manifest`:for(let t of K(r.items,`Canvas`))H(e,t);for(let t of K(r.structures,`Range`))H(e,t);break;case`Canvas`:for(let t of[...K(r.items,`AnnotationPage`),...K(r.annotations,`AnnotationPage`)])H(e,t);break;case`Range`:for(let t of K(r.items))H(e,t);break;case`AnnotationPage`:for(let t of K(r.items,`Annotation`))H(e,t);break;case`Annotation`:Me(e,r);break}}}function U(e,t){if(!t?.id||!t.type)return;let n=`${t.type}:${t.id}`;if(e.visited.has(n))return;e.visited.add(n);let r=He(e.vault,t);if(r){Te(e,r);for(let t of K(r.provider,`Agent`))U(e,t);switch(r.type){case`Manifest`:for(let t of K(r.items,`Canvas`))U(e,t);for(let t of K(r.structures,`Range`))U(e,t);break;case`Canvas`:for(let t of[...K(r.items,`AnnotationPage`),...K(r.annotations,`AnnotationPage`)])U(e,t);break;case`Range`:for(let t of K(r.items))U(e,t);break;case`AnnotationPage`:for(let t of K(r.items,`Annotation`))U(e,t);break;case`Annotation`:for(let t of K(r.body,`ContentResource`))U(e,t);break;case`Choice`:for(let t of K(r.items,`ContentResource`))U(e,t);break}}}function Te(e,t){for(let n of Ee(t))typeof n==`string`&&Oe(e,n,1)}function Ee(e){let t=new Set;try{for(let n of h(e))typeof n==`string`&&t.add(n)}catch{}for(let n of De(e))t.add(n);return Array.from(t)}function De(e){let t=new Set;if(W(t,e?.label),W(t,e?.summary),typeof e?.language==`string`)t.add(e.language);else if(Array.isArray(e?.language))for(let n of e.language)typeof n==`string`&&t.add(n);let n=e?.requiredStatement;if(n&&!Array.isArray(n)&&(W(t,n.label),W(t,n.value)),Array.isArray(e?.metadata))for(let n of e.metadata)W(t,n?.label),W(t,n?.value);return Array.from(t)}function W(e,t){if(!(!t||typeof t==`string`))for(let[n,r]of Object.entries(t))Array.isArray(r)&&r.some(e=>typeof e==`string`&&z(e))&&e.add(n)}function Oe(e,t,n){let r=P(t);if(!r)return;let i=I(t),a=e.languages.get(r);if(a){a.count+=n,a.iiifLanguages.includes(i)||a.iiifLanguages.push(i);return}e.languages.set(r,{language:r,count:n,iiifLanguages:[i]})}function ke(e,t,n){let r=n||Ue(t);G(e,{path:{kind:`resource-language-map`,resource:r,property:`label`},resource:r,propertyLabel:`Label`,value:t.label}),G(e,{path:{kind:`resource-language-map`,resource:r,property:`summary`},resource:r,propertyLabel:`Summary`,value:t.summary})}function Ae(e,t,n){let r=Array.isArray(t.metadata)?t.metadata:[],i=n||Ue(t);r.forEach((t,n)=>{G(e,{path:{kind:`metadata-language-map`,resource:i,metadataIndex:n,field:`label`},resource:i,propertyLabel:`Metadata ${n+1} label`,value:t?.label}),G(e,{path:{kind:`metadata-language-map`,resource:i,metadataIndex:n,field:`value`},resource:i,propertyLabel:`Metadata ${n+1} value`,value:t?.value})})}function je(e,t,n){let r=t.requiredStatement;if(!r)return;let i=n||Ue(t);G(e,{path:{kind:`required-statement-language-map`,resource:i,field:`label`},resource:i,propertyLabel:`Required statement label`,value:r.label}),G(e,{path:{kind:`required-statement-language-map`,resource:i,field:`value`},resource:i,propertyLabel:`Required statement value`,value:r.value})}function Me(e,t){let n={id:t.id,type:`Annotation`},r=Pe(e.vault,t);for(let{ref:t,resource:n}of r){let r={...t,label:We(n,n.id||t.id)};ke(e,n,r),Ae(e,n,r),je(e,n,r)}if(e.options.contentFilters?.annotationBodies===!1)return;let i=r.filter(e=>ze(e.resource));for(let{ref:t,resource:r,choice:a}of i){if(!Re(r,e.options.sourceLanguage))continue;let o=typeof r.value==`string`?r.value:``;if(!z(o))continue;let s=Ie(i.filter(e=>Le(a,e)),e.options.targetLanguage),c=typeof s?.resource.value==`string`?s.resource.value:``;e.occurrences.push({id:Ne({kind:`textual-body`,annotation:n,body:t,choice:a,targetBody:s?{id:s.ref.id,type:`ContentResource`}:void 0}),path:{kind:`textual-body`,annotation:n,body:t,choice:a,targetBody:s?{id:s.ref.id,type:`ContentResource`}:void 0},resource:{id:r.id||t.id,type:`ContentResource`,label:We(r,r.id||t.id)},propertyLabel:`Annotation body`,sourceLanguage:e.options.sourceLanguage,sourceMapLanguage:Ve(r.language,e.options.sourceLanguage),targetLanguage:e.options.targetLanguage,sourceIndex:0,sourceText:o,targetText:c,valueFormat:r.format===`text/html`||we(o)?`html`:`text`,sourceFingerprint:be(o),status:z(c)?`existing`:`missing`})}}function G(e,t){if(t.path.kind===`resource-language-map`&&t.path.resource.type===`Canvas`&&t.path.property===`label`&&e.options.contentFilters?.canvasLabels===!1)return;let n=Se(t.value,e.options.sourceLanguage);for(let r of n){let n=Ce(t.value,e.options.targetLanguage,r.sourceIndex);e.occurrences.push({id:Ne(t.path,r.sourceMapLanguage,r.sourceIndex),path:t.path,resource:t.resource,propertyLabel:t.propertyLabel,sourceLanguage:e.options.sourceLanguage,sourceMapLanguage:r.sourceMapLanguage,targetLanguage:e.options.targetLanguage,sourceIndex:r.sourceIndex,sourceText:r.sourceText,targetText:n,valueFormat:we(r.sourceText)?`html`:`text`,sourceFingerprint:be(r.sourceText),status:z(n)?`existing`:`missing`})}}function Ne(e,t=`text`,n=0){switch(e.kind){case`resource-language-map`:return`${e.resource.type}:${e.resource.id}:${e.property}:${t}:${n}`;case`metadata-language-map`:return`${e.resource.type}:${e.resource.id}:metadata:${e.metadataIndex}:${e.field}:${t}:${n}`;case`required-statement-language-map`:return`${e.resource.type}:${e.resource.id}:requiredStatement:${e.field}:${t}:${n}`;case`textual-body`:return`${e.annotation.id}:body:${e.choice?.id||`annotation`}:${e.body.id}`}}function Pe(e,t){let n=[];for(let r of K(t.body,`ContentResource`))Fe(e,r,n);return n}function Fe(e,t,n,r){let i=He(e,t);if(i&&(n.push({ref:t,resource:i,choice:r}),i.type===`Choice`))for(let r of K(i.items,`ContentResource`))Fe(e,r,n,t)}function Ie(e,t){return e.find(({resource:e})=>!ze(e)||!z(String(e.value||``))?!1:Be(e.language,t))}function Le(e,t){return(e?.id||``)===(t.choice?.id||``)}function Re(e,t){return!ze(e)||typeof e.value!=`string`?!1:e.language?Be(e.language,t):!0}function ze(e){return e?.type===`TextualBody`||e?.type===`Text`}function Be(e,t){let n=e=>e===t?!0:typeof e==`string`&&N(e)===N(t);return Array.isArray(e)?e.some(n):n(e)}function Ve(e,t){return Array.isArray(e)?typeof e[0]==`string`?e[0]:t:typeof e==`string`?e:t}function K(e,t){return(Array.isArray(e)?e:e?[e]:[]).map(e=>{if(!e?.id)return null;let n=t===`ContentResource`&&(e.type===`TextualBody`||e.type===`Text`)?t:e.type||t;return{id:e.id,type:n}}).filter(e=>!!e?.id&&!!e.type)}function He(e,t){let n=e.get(t,{skipSelfReturn:!1});return n&&typeof n==`object`?n:null}function Ue(e){return{id:e.id,type:e.type,label:We(e,e.id||e.type)}}function We(e,t){if(!e?.label)return t;if(typeof e.label==`string`)return e.label;let n=e.label.en?.find?.(e=>e?.trim());if(n)return n;for(let t of Object.keys(e.label)){let n=e.label[t]?.find?.(e=>e?.trim());if(n)return n}return t}function Ge(e,t){return e===`missing`||t===`missing`?`missing`:e===`stale`||t===`stale`?`stale`:e===`skipped`||t===`skipped`?`skipped`:e===`suggested`||t===`suggested`?`suggested`:`existing`}function Ke(e){switch(e){case`missing`:return 0;case`stale`:return 1;case`skipped`:return 2;case`suggested`:return 3;case`existing`:return 4}}function qe(e){return e.language}const q=`@manifest-editor/translation:config`;function Je(e){return new Promise(t=>{if(e.signal?.aborted||typeof window>`u`){t(!1);return}let n=!1,r=r=>{n||(n=!0,e.signal?.removeEventListener(`abort`,i),t(r))},i=()=>r(!1);e.signal?.addEventListener(`abort`,i,{once:!0}),window.dispatchEvent(new CustomEvent(q,{detail:{...e,resolve:r}}))})}function Ye(e){return b(Xe,{actionId:e})}function Xe({actionId:t}){let[n,r]=v(null),[i,a]=v(j({}));g(()=>{let e=e=>{let n=e.detail;n?.actionId===t&&(r(n),a(j(n.defaults)))};return window.addEventListener(q,e),()=>window.removeEventListener(q,e)},[t]),g(()=>{if(!n?.signal)return;if(n.signal.aborted){r(null);return}let e=()=>r(null);return n.signal.addEventListener(`abort`,e,{once:!0}),()=>n.signal?.removeEventListener(`abort`,e)},[n]);let o=n?.detectedLanguages||[],s=_(()=>o.map(e=>e.language),[o]);g(()=>{!s.length||s.includes(i.sourceLanguage)||a(e=>s.includes(e.sourceLanguage)?e:j({...e,sourceLanguage:s[0]}))},[s.join(`|`),i.sourceLanguage]);let c=_(()=>n?.getTargets?.(i)||n?.targets||[],[n,i]),l=_(()=>c.filter(e=>e.status===`missing`).length,[c]),u=_(()=>n?.getTargetLanguageProgress?.(i)||[],[n,i]),d=_(()=>[{label:`Detected in manifest`,options:o.map(e=>({value:e.language,label:D(e.language)}))}],[o]),f=_(()=>Qe(u),[u]),p=(e,t)=>{a(n=>j({...n,contentFilters:{...n.contentFilters,[e]:t}}))};if(!n)return null;let m=e=>{n.resolve(e===!1?!1:j(e)),r(null)},h=F(i.sourceLanguage,i)===i.targetLanguage,te=i.currentResourceOnly===!0&&!!n.currentResource,ne=s.length===0||h||l===0;return b(ee,{title:`Run translations`,onClose:()=>m(!1),className:`max-w-xl`,actions:x(`div`,{className:`flex gap-2`,children:[b(`button`,{type:`button`,className:`rounded border border-zinc-200 bg-white px-2.5 py-1.5 text-xs font-medium text-zinc-600 hover:border-zinc-300`,onClick:()=>m(!1),children:`Cancel`}),b(`button`,{type:`button`,className:`rounded border border-me-primary-500 bg-me-primary-500 px-2.5 py-1.5 text-xs font-medium text-white disabled:cursor-not-allowed disabled:opacity-40`,disabled:ne,onClick:()=>m(i),children:`Run translation`})]}),children:x(`div`,{className:`flex flex-col gap-3 p-3 text-sm text-zinc-700`,children:[x(`div`,{className:`flex flex-col gap-2 border-b border-zinc-100 pb-3`,children:[x(`div`,{className:`grid grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-end gap-1.5 sm:grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)_7rem]`,children:[b($e,{label:`From`,value:i.sourceLanguage,groups:d,emptyLabel:`No detected languages`,onChange:e=>a(t=>j({...t,sourceLanguage:e}))}),b(`span`,{className:`mb-[7px] text-zinc-300 select-none`,children:`→`}),b($e,{label:`To`,value:i.targetLanguage,groups:f,onChange:e=>a(t=>j({...t,targetLanguage:e}))}),x(`label`,{className:`col-span-3 grid shrink-0 gap-1 sm:col-span-1`,children:[b(`span`,{className:`text-[10px] font-medium uppercase tracking-wide text-zinc-400`,children:`Mode`}),x(`select`,{className:`rounded border border-zinc-200 bg-white py-[5px] px-2 text-xs text-zinc-700 focus:border-me-primary-500 focus:outline-none focus:ring-2 focus:ring-me-primary-500/20`,value:i.runtime,onChange:e=>a(t=>j({...t,runtime:e.target.value})),children:[b(`option`,{value:`auto`,children:`Auto`}),b(`option`,{value:`webgpu`,children:`WebGPU`}),b(`option`,{value:`wasm`,children:`WASM`})]})]})]}),x(`div`,{className:`flex flex-wrap items-center gap-2`,children:[x(`label`,{className:`flex items-center gap-2 text-xs ${n.currentResource?`text-zinc-600`:`text-zinc-300`}`,title:n.currentResource?.label||n.currentResource?.id,children:[b(`input`,{type:`checkbox`,className:`h-3.5 w-3.5 rounded border-zinc-300`,checked:te,disabled:!n.currentResource,onChange:e=>a(t=>j({...t,currentResourceOnly:e.currentTarget.checked}))}),`Current resource`]}),b(Ze,{filters:i.contentFilters,onChange:p})]})]}),s.length===0?b(`div`,{className:`rounded border border-amber-200 bg-amber-50 px-2.5 py-2 text-xs text-amber-800`,children:`No supported IIIF languages were detected in this manifest.`}):null,h?b(`div`,{className:`rounded border border-amber-200 bg-amber-50 px-2.5 py-2 text-xs text-amber-800`,children:`Select different source and target languages.`}):null,x(`div`,{className:`rounded border border-zinc-200 bg-zinc-50 px-2.5 py-2`,children:[x(`div`,{className:`text-xs text-zinc-500`,children:[l>0?x(y,{children:[b(`span`,{className:`font-semibold text-amber-600`,children:l}),` missing`]}):b(`span`,{className:`text-zinc-400`,children:`No missing strings`}),c.length>0?x(y,{children:[b(`span`,{className:`text-zinc-300`,children:` · `}),b(`span`,{children:c.length}),` total`]}):null]}),x(`div`,{className:`mt-1 text-xs text-zinc-500`,children:[`Missing target-language values will be filled using `,e,`. Existing target values are left unchanged.`]})]})]})})}function Ze({filters:e,onChange:t}){return x(`details`,{className:`relative shrink-0`,children:[b(`summary`,{className:`cursor-pointer list-none rounded border border-zinc-200 bg-white px-2.5 py-1.5 text-xs font-medium text-zinc-600 hover:border-zinc-300`,children:`Filters`}),x(`div`,{className:`absolute right-0 z-20 mt-1 grid w-48 gap-2 rounded border border-zinc-200 bg-white p-2.5 text-xs text-zinc-700 shadow-lg`,children:[x(`label`,{className:`flex items-center gap-2`,children:[b(`input`,{type:`checkbox`,className:`h-3.5 w-3.5 rounded border-zinc-300`,checked:e.annotationBodies,onChange:e=>t(`annotationBodies`,e.currentTarget.checked)}),`Annotation bodies`]}),x(`label`,{className:`flex items-center gap-2`,children:[b(`input`,{type:`checkbox`,className:`h-3.5 w-3.5 rounded border-zinc-300`,checked:e.canvasLabels,onChange:e=>t(`canvasLabels`,e.currentTarget.checked)}),`Canvas labels`]})]})]})}function Qe(e){let t=new Set(e.map(e=>e.language)),n=[];return e.length&&n.push({label:`Detected in manifest`,options:e.map(e=>({value:e.language,label:`${D(e.language)} (${O(e)})`}))}),n.push({label:`All languages`,options:T.filter(e=>!t.has(e.code)).map(e=>({value:e.code,label:e.label}))}),n}function $e({label:e,value:t,groups:n,emptyLabel:r=`No languages available`,onChange:i}){let a=n.some(e=>e.options.length),o=n.some(e=>e.options.some(e=>e.value===t));return x(`label`,{className:`grid min-w-0 flex-1 gap-1`,children:[b(`span`,{className:`text-[10px] font-medium uppercase tracking-wide text-zinc-400`,children:e}),x(`select`,{className:`w-full rounded border border-zinc-200 bg-white py-[5px] px-2 text-xs text-zinc-800 focus:border-me-primary-500 focus:outline-none focus:ring-2 focus:ring-me-primary-500/20`,value:t,disabled:!a,onChange:e=>i(e.target.value),children:[o?null:b(`option`,{value:t,disabled:!0,children:a?D(t):r}),n.map(e=>e.options.length?b(`optgroup`,{label:e.label,children:e.options.map(e=>b(`option`,{value:e.value,children:e.label},e.value))},e.label):null)]})]})}const et=new Set([`br`,`hr`,`img`,`input`,`meta`,`link`,`area`,`base`,`col`,`embed`,`param`,`source`,`track`,`wbr`]);async function tt(e,t){let n=nt(e);if(!n||!rt(n))return null;let r=[];for(let e of n){if(e.type===`tag`){r.push(e.value);continue}if(!e.value.trim()){r.push(e.value);continue}let n=e.value.match(/^\s*/)?.[0]||``,i=e.value.match(/\s*$/)?.[0]||``,a=e.value.trim();r.push(`${n}${await t(a)}${i}`)}return r.join(``)}function nt(e){let t=[],n=/<\/?[^>]+>/g,r=0,i;for(;i=n.exec(e);){if(i.index>r){let n=e.slice(r,i.index);if(/[<>]/.test(n))return null;t.push({type:`text`,value:n})}let n=i[0];if(!/^<\/?[A-Za-z][A-Za-z0-9:-]*(\s+[^<>]*)?\/?>$/.test(n))return null;t.push({type:`tag`,value:n}),r=i.index+n.length}if(r<e.length){let n=e.slice(r);if(/[<>]/.test(n))return null;t.push({type:`text`,value:n})}return t.length?t:null}function rt(e){let t=[];for(let n of e){if(n.type!==`tag`)continue;let e=n.value.match(/^<\/\s*([A-Za-z][A-Za-z0-9:-]*)\s*>$/);if(e){if(t.pop()!==e[1].toLowerCase())return!1;continue}let r=n.value.match(/^<\s*([A-Za-z][A-Za-z0-9:-]*)/);if(!r)return!1;let i=r[1].toLowerCase();n.value.endsWith(`/>`)||et.has(i)||t.push(i)}return t.length===0}function it(){return typeof crypto<`u`&&`randomUUID`in crypto?crypto.randomUUID():`translation-${Date.now()}-${Math.random().toString(16).slice(2)}`}function at(e={}){let t=e.worker??ot(e.workerUrl),n=new Set,r=new Map,i=!1,a=e=>{for(let t of n)t(e)},o=e=>{for(let t of r.values())t.reject(e);r.clear()};t.addEventListener(`message`,e=>{let t=e.data;if(t.kind===`event`){a(t.payload);return}let n=r.get(t.requestId);if(n){if(r.delete(t.requestId),t.kind===`error`){let e=Error(t.payload.message);e.name=t.payload.code,n.reject(e);return}n.resolve(t.payload)}}),t.addEventListener(`error`,e=>{let t=Error(e.message||`The translation worker crashed.`);t.name=`worker_failed`,a({type:`error`,code:`worker_failed`,message:t.message,recoverable:!1}),o(t)});let c=(e,n)=>{if(i)return Promise.reject(Error(`The translation worker client has been terminated.`));let a=it(),o=e===`translate`?l(a,n.payload):e===`dispose`?f(a):s(a,n.payload);return new Promise((n,i)=>{r.set(a,{command:e,resolve:e=>n(e),reject:i}),t.postMessage(o)})};return{async preload(e){await c(`preload`,{payload:e})},translate(e){return c(`translate`,{payload:e})},onEvent(e){return n.add(e),()=>{n.delete(e)}},terminate(){i||(i=!0,t.postMessage(f(it())),t.terminate(),o(Error(`The translation worker client has been terminated.`)))}}}function ot(e){try{return new Worker(st(e),{type:`module`})}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Unable to start the translation worker. If you are using @manifest-editor/translation from a bundled package, provide a public workerUrl or pass a Worker instance. ${t}`)}}function st(e){return e instanceof URL?e:e?new URL(e,globalThis.location?.href||import.meta.url):new URL(ct(),import.meta.url)}function ct(){return`./translation-worker.js`}const lt=`@manifest-editor/translation:results`;function ut(e,t){typeof window>`u`||window.dispatchEvent(new CustomEvent(lt,{detail:{actionId:e,result:t}}))}function dt(e){return b(ft,{actionId:e})}function ft({actionId:e}){let[t,n]=v(null);return g(()=>{let t=t=>{let r=t.detail;r?.actionId===e&&r.result&&n(r.result)};return window.addEventListener(lt,t),()=>window.removeEventListener(lt,t)},[e]),t?b(ee,{title:`Translation results`,onClose:()=>n(null),className:`max-w-4xl`,children:x(`div`,{className:`flex min-h-0 flex-col gap-4 p-4 text-sm text-zinc-700`,children:[x(`div`,{className:`grid grid-cols-3 gap-2 sm:grid-cols-6`,children:[b(J,{label:`Strings`,value:t.total}),b(J,{label:`Translated`,value:t.translated}),b(J,{label:`Applied`,value:t.applied}),b(J,{label:`Existing`,value:t.existing}),b(J,{label:`Stale`,value:t.stale}),b(J,{label:`Skipped`,value:t.skipped+t.errors})]}),t.translations.length?x(`div`,{className:`rounded border border-zinc-200`,children:[b(`div`,{className:`border-b border-zinc-200 bg-zinc-50 px-3 py-2 font-medium`,children:`Translated strings`}),b(`div`,{className:`max-h-64 overflow-auto`,children:t.translations.map(e=>x(`div`,{className:`grid gap-1.5 border-b border-zinc-100 px-3 py-2.5 last:border-0`,children:[b(`div`,{className:`border-l-2 border-zinc-200 pl-2.5 text-[11px] italic leading-relaxed text-zinc-400 line-clamp-2`,children:e.sourceText}),b(`div`,{className:`text-xs font-medium text-zinc-900 line-clamp-2`,children:e.translationText}),x(`div`,{className:`text-[11px] text-zinc-400`,children:[e.applied,` occurrence`,e.applied===1?``:`s`]})]},e.key))})]}):null,t.skippedTargets.length?x(`div`,{className:`rounded border border-zinc-200`,children:[b(`div`,{className:`border-b border-zinc-200 bg-zinc-50 px-3 py-2 font-medium`,children:`Skipped strings`}),b(`div`,{className:`max-h-56 overflow-auto`,children:t.skippedTargets.map(e=>x(`div`,{className:`grid gap-1 border-b border-zinc-100 px-3 py-2 last:border-0`,children:[b(`div`,{className:`line-clamp-2 font-medium text-zinc-900`,children:e.sourceText}),b(`div`,{className:`text-zinc-500`,children:e.reason})]},`${e.key}-${e.reason}`))})]}):null]})}):null}function J({label:e,value:t}){return x(`div`,{className:`rounded border border-zinc-200 bg-zinc-50 px-2.5 py-2`,children:[b(`div`,{className:`text-base font-semibold text-zinc-900`,children:t}),b(`div`,{className:`text-[10px] uppercase tracking-wide text-zinc-400`,children:e})]})}function pt(e,t){let n=[],r=[],i=[];for(let a of t.occurrences){if(be(ht(e.vault,a))!==a.sourceFingerprint){i.push(a);continue}if(z(St(e.vault,a))){r.push(a);continue}n.push(a)}return{writable:n,existing:r,stale:i}}function mt(e,t,n){let r=n.trim();if(!r)return!1;switch(t.path.kind){case`resource-language-map`:return _t(e.vault,t.path.resource,t.path.property,t,r),!0;case`metadata-language-map`:return vt(e.vault,t.path,t,r),!0;case`required-statement-language-map`:return yt(e.vault,t.path,t,r),!0;case`textual-body`:return bt(e.vault,t,r),!0}}function ht(e,t){if(t.path.kind===`textual-body`){let n=Y(e,t.path.body);return typeof n?.value==`string`?n.value:``}return B(xt(e,t.path),t.sourceMapLanguage,t.sourceIndex)}function gt(e,t){if(t.path.kind===`textual-body`){let n=Tt(e,t);return typeof n?.value==`string`?n.value:``}return B(xt(e,t.path),t.targetLanguage,t.sourceIndex)}function _t(e,t,n,r,i){let a=Ct(Y(e,t)?.[n],r.sourceMapLanguage,r.sourceText,r.targetLanguage,r.sourceIndex,i);e.modifyEntityField(t,n,a)}function vt(e,t,n,r){let i=Y(e,t.resource),a=Array.isArray(i?.metadata)?[...i.metadata]:[],o=a[t.metadataIndex]||{label:{},value:{}};a[t.metadataIndex]={...o,[t.field]:Ct(o[t.field],n.sourceMapLanguage,n.sourceText,n.targetLanguage,n.sourceIndex,r)},e.modifyEntityField(t.resource,`metadata`,a)}function yt(e,t,n,r){let i=Y(e,t.resource)?.requiredStatement||{},a={label:{none:[``]},value:{none:[``]},...i,[t.field]:Ct(i[t.field],n.sourceMapLanguage,n.sourceText,n.targetLanguage,n.sourceIndex,r)};e.modifyEntityField(t.resource,`requiredStatement`,a)}function bt(e,t,n){if(t.path.kind!==`textual-body`)return;let r=Tt(e,t);if(r?.id){e.modifyEntityField({id:r.id,type:`ContentResource`},`value`,n),e.modifyEntityField({id:r.id,type:`ContentResource`},`language`,t.targetLanguage);return}let i=Y(e,t.path.body),a=At(t),o={id:a,type:`ContentResource`};if(t.path.choice){e.dispatch(ae({entities:{ContentResource:{[a]:{id:a,type:`TextualBody`,format:i?.format||(t.valueFormat===`html`?`text/html`:`text/plain`),value:n,language:t.targetLanguage}}}}));let r=Y(e,t.path.choice),s=Array.isArray(r?.items)?r.items:[];e.modifyEntityField(t.path.choice,`items`,[...s,o]);return}e.dispatch(ie({actions:[ae({entities:{ContentResource:{[a]:{id:a,type:`TextualBody`,format:i?.format||(t.valueFormat===`html`?`text/html`:`text/plain`),value:n,language:t.targetLanguage}}}}),S({id:t.path.annotation.id,type:`Annotation`,key:`body`,reference:o})]}))}function xt(e,t){if(t.kind===`textual-body`)return null;let n=Y(e,t.resource);if(!n)return null;switch(t.kind){case`resource-language-map`:return n[t.property];case`metadata-language-map`:return n.metadata?.[t.metadataIndex]?.[t.field];case`required-statement-language-map`:return n.requiredStatement?.[t.field]}}function St(e,t){return t.path.kind===`textual-body`?gt(e,t):Ce(xt(e,t.path),t.targetLanguage,t.sourceIndex)}function Ct(e,t,n,r,i,a){let o=wt(e,t,n),s=[...o[r]||[]];for(;s.length<=i;)s.push(``);return s[i]=a,o[r]=s,o}function wt(e,t,n){return e?typeof e==`string`?{[t]:[e]}:Object.fromEntries(Object.entries(e).map(([e,t])=>[e,Array.isArray(t)?[...t]:[]])):{[t]:[n]}}function Tt(e,t){if(t.path.kind!==`textual-body`)return null;if(t.path.targetBody){let n=Y(e,t.path.targetBody);if(n)return n}let n=t.path.body.id,r=Y(e,t.path.annotation),i=t.path.choice?.id||``;return Et(e,r).filter(e=>(e.choice?.id||``)===i).find(({resource:e,ref:r})=>r.id===n||e?.id===n||e?.type!==`TextualBody`&&e?.type!==`Text`?!1:jt(e.language,t.targetLanguage))?.resource||null}function Et(e,t){let n=[];for(let r of kt(t?.body,`ContentResource`))Dt(e,r,n);return n.filter(({resource:e})=>Ot(e))}function Dt(e,t,n,r){let i=Y(e,t);if(i&&(n.push({ref:t,resource:i,choice:r}),i.type===`Choice`))for(let r of kt(i.items,`ContentResource`))Dt(e,r,n,t)}function Ot(e){return e?.type===`TextualBody`||e?.type===`Text`}function kt(e,t){return(Array.isArray(e)?e:e?[e]:[]).map(e=>{if(!e?.id)return null;let n=t===`ContentResource`&&(e.type===`TextualBody`||e.type===`Text`)?t:e.type||t;return{id:e.id,type:n}}).filter(e=>!!e?.id&&!!e.type)}function At(e){let t=e.path.kind===`textual-body`?e.path.annotation.id:e.resource.id,n=e.path.kind===`textual-body`?e.path.body.id:e.id;return`${Mt(t)}/translation/${encodeURIComponent(e.targetLanguage)}/${Nt(n)}`}function jt(e,t){let n=e=>e===t?!0:typeof e==`string`&&N(e)===N(t);return Array.isArray(e)?e.some(n):n(e)}function Y(e,t){if(!t?.id||!t.type)return null;let n=e.get(t,{skipSelfReturn:!1});return n&&typeof n==`object`?n:null}function Mt(e){return e.endsWith(`/`)?e.slice(0,-1):e}function Nt(e){let t=5381;for(let n=0;n<e.length;n+=1)t=t*33^e.charCodeAt(n);return(t>>>0).toString(36)}const Pt=new Map;function Ft(e,t){Pt.set(e,j(t))}function It(e={}){let t=e.createClient||(e=>at({workerUrl:typeof e?.workerUrl==`string`&&e.workerUrl.trim()?e.workerUrl:void 0})),i=e.collectTargets||L,a=e.requestConfig||Rt,o=e.translateHtml||tt,s=null,c,l=e=>typeof e?.workerUrl==`string`&&e.workerUrl.trim()?e.workerUrl.trim():void 0,u=(e=s)=>{e&&(e.terminate(),s===e&&(s=null,c=void 0))},d=e=>{let n=l(e);return s&&c!==n&&u(s),s||(s=t(e),c=n),s};return{id:n,label:`Run translation`,summary:`Translate missing manifest strings with M2M100`,section:`Translations`,order:30,resourceTypes:[`Manifest`],resumable:!0,render:e=>x(y,{children:[Ye(e.definition.id),dt(e.definition.id)]}),onResults:e=>ut(e.definition.id,e.instance?.result),supports:e=>e.vault.get(e.target)?.type===`Manifest`,prepare:async e=>{let t=e.plugins.getSettings(r),n=he(e.config,t),o=i(e.vault,X(e,n),n),s=Pt.get(e.instanceKey)||await a(e,o,n);if(Pt.delete(e.instanceKey),s===!1)return!1;let c=j(s);return Lt(i(e.vault,X(e,c),c),c)},run:async e=>{let t=zt(e.plan),n=j(t?.options||he(e.config)),i=e.tasks.getAll(),a=e.tasks.getPending(),s={vault:e.vault};if(e.setActionLabel(`Running translation`),!i.length)return e.setActionStatus(`running`,`No translatable strings found`),e.setActionProgress({current:0,total:0,label:`No strings`}),Ht(0);if(a.length){let t=d(e.plugins.getSettings(r)),i=t.onEvent(t=>Wt(e,t)),a=()=>u(t);e.signal.addEventListener(`abort`,a,{once:!0});try{qt(e.signal),e.setActionStatus(`running`,`Loading translation model`),await t.preload({runtime:n.runtime}),await e.tasks.runEach(async(r,{index:i,total:a})=>{qt(e.signal);let c=r.input;if(!c)return Z(`Missing translation target`,r.id,``,0,0);e.appendActionLog(`Translating ${i+1}/${a}`,`info`,{key:c.key,sourceLanguage:c.sourceLanguage,targetLanguage:c.targetLanguage});let l=pt(s,c);if(!l.writable.length)return Z(Ut(l.existing.length,l.stale.length),c.key,c.sourceText,l.existing.length,l.stale.length);let d;try{d=await Bt(t,c,n,o)}catch(e){throw Jt(e)&&u(t),e}if(!d)return Z(`HTML could not be parsed for safe translation`,c.key,c.sourceText,l.existing.length,l.stale.length);let f=0,p=l.existing.length,m=l.stale.length;for(let e of l.writable){let t=pt(s,{...c,occurrences:[e]});if(t.stale.length){m+=t.stale.length;continue}if(t.existing.length){p+=t.existing.length;continue}mt(s,e,d)&&(f+=1)}return f?{taskStatus:`complete`,statusText:`Translated ${f} occurrence${f===1?``:`s`}`,result:{type:`translated`,key:c.key,sourceText:c.sourceText,translationText:d,applied:f,existing:p,stale:m}}:Z(`No missing occurrences remained`,c.key,c.sourceText,p,m)},{progressLabel:(e,t,n)=>`Translating strings ${t+1}/${n}`})}catch(e){throw u(t),e}finally{e.signal.removeEventListener(`abort`,a),i()}}let c=Vt(t?.totalTargets||i.length,e.tasks.getAll());return e.setActionStatus(`running`,`Applied ${c.applied} translations`),e.setActionProgress({current:c.total,total:c.total,label:`Translations complete`}),c}}}function Lt(e,t){return{version:1,data:{options:j(t),totalTargets:e.length},tasks:e.map(e=>{let t=e.occurrences.filter(e=>e.status===`existing`).length,n=e.status!==`missing`;return{id:e.key,label:Kt(e),target:Gt(e),input:e,status:n?`skipped`:`queued`,statusText:n?`Target language already exists`:void 0,result:n?{type:`skipped`,key:e.key,sourceText:e.sourceText,reason:`Target language already exists`,existing:t,stale:0}:void 0,completedAt:n?Date.now():void 0}})}}function X(e,t){return t.currentResourceOnly&&e.currentCanvas?{id:e.currentCanvas.id,type:e.currentCanvas.type,label:e.currentCanvas.label}:e.target}async function Rt(e,t,n){let r=R(e.vault,e.target),i=r.map(e=>e.language);return Je({actionId:e.definition.id,instanceKey:e.instanceKey,defaults:n,targets:t,availableLanguages:M(e.config),detectedLanguages:r,currentResource:e.currentCanvas?{id:e.currentCanvas.id,type:e.currentCanvas.type,label:e.currentCanvas.label}:void 0,getTargets:t=>L(e.vault,X(e,j(t)),j(t)),getTargetLanguageProgress:t=>ye(e.vault,X(e,j(t)),j(t),i),signal:e.signal})}function zt(e){let t=e?.data;return t?.options?t:null}async function Bt(e,t,n,r){let i=async r=>(await e.translate({text:r,sourceLanguage:F(t.sourceLanguage,n),targetLanguage:t.targetLanguage,runtime:n.runtime})).text;return t.valueFormat===`html`?r(t.sourceText,i):i(t.sourceText)}function Z(e,t,n,r,i){return{taskStatus:`skipped`,statusText:e,result:{type:`skipped`,key:t,sourceText:n,reason:e,existing:r,stale:i}}}function Vt(e,t){let n=Ht(e);for(let e of t){let t=e.result;if(t?.type===`translated`){n.translated+=1,n.applied+=t.applied,n.existing+=t.existing,n.stale+=t.stale,n.translations.push({key:t.key,sourceText:t.sourceText,translationText:t.translationText,applied:t.applied});continue}if(t?.type===`skipped`){n.skipped+=1,n.existing+=t.existing||0,n.stale+=t.stale||0,n.skippedTargets.push({key:t.key,sourceText:t.sourceText,reason:t.reason});continue}e.status===`error`&&(n.errors+=1,n.skippedTargets.push({key:e.id,sourceText:e.label,reason:e.error?.message||`Translation failed`}))}return n}function Ht(e){return{total:e,translated:0,applied:0,skipped:0,existing:0,stale:0,errors:0,translations:[],skippedTargets:[]}}function Ut(e,t){return t&&e?`Source changed or target translation already exists`:t?`Source changed after the translation run was prepared`:e?`Target language already exists`:`No writable occurrences`}function Wt(e,t){switch(t.type){case`model-progress`:e.setActionStatus(`running`,`Loading model ${Math.round(t.progress)}% (${Yt(t.loaded)} / ${Yt(t.total)})`);break;case`model-ready`:e.setActionStatus(`running`,`Model ready (${t.runtime.toUpperCase()})`);break;case`runtime-fallback`:e.appendActionLog(`Falling back to WASM translation runtime`,`warn`,t),e.setActionStatus(`running`,`WebGPU unavailable; using WASM`);break;case`translation-start`:e.setActionStatus(`running`,`Translating ${t.sourceLanguage} to ${t.targetLanguage}`);break;case`translation-complete`:e.setActionStatus(`running`,`Translated ${t.result.text.length} characters`);break;case`error`:e.signal.aborted||e.setActionStatus(`running`,t.message);break}}function Gt(e){let t=e.occurrences[0]?.resource,n=t?.label||e.sourceText||`Translation string`;return{id:t?.id||e.key,type:t?.type||`Manifest`,label:n,scope:t?.type===`Canvas`?`canvas`:`root`}}function Kt(e){let t=e.normalisedSourceText||e.sourceText||`Translation string`;return t.length>80?`${t.slice(0,77)}...`:t}function qt(e){if(e.aborted)throw Error(`Translation cancelled.`)}function Jt(e){return e instanceof Error&&(e.name===`model_load_failed`||e.name===`worker_failed`)}function Yt(e){return e?`${Math.round(e/1024/1024)} MB`:`0 MB`}const Xt=`language`,Zt=[{backgroundColor:`#1d4ed8`,textColor:`#ffffff`},{backgroundColor:`#047857`,textColor:`#ffffff`},{backgroundColor:`#b45309`,textColor:`#ffffff`},{backgroundColor:`#7c3aed`,textColor:`#ffffff`},{backgroundColor:`#be123c`,textColor:`#ffffff`},{backgroundColor:`#0f766e`,textColor:`#ffffff`},{backgroundColor:`#4338ca`,textColor:`#ffffff`},{backgroundColor:`#a16207`,textColor:`#ffffff`}];function Qt(){return{id:t,label:`Tag with languages`,summary:`Tag each canvas with its detected language`,section:`Translations`,order:35,resourceTypes:[`Manifest`],resumable:!0,supports:e=>{let t=e.vault.get(e.target);return t?.type===`Manifest`&&!!t?.items?.length},prepare:e=>tn(on(e)),run:async e=>{let t=e.tasks.getAll(),n=e.tasks.getPending();if(e.setActionLabel(`Tagging canvas languages`),!t.length){let t=rn(0);e.setActionStatus(`running`,`No canvases to tag`),e.setActionProgress({current:0,total:0,label:`No canvases`}),e.setResult(t),e.setResultsAvailable(!1);return}n.length&&(e.canvasProgress.setStatuses(n.map(e=>e.target).filter(e=>!!e&&e.type===`Canvas`),`queued`),await e.tasks.runEach(async(t,{index:n,total:r})=>{_n(e.signal);let i=t.input,a=t.target?.id||i?.canvasId||t.id,o=sn(e,a),s=mn(o,i?.canvasLabel||a);if(e.appendActionLog(`Tagging language ${n+1}/${r}`,`info`,{canvasId:a,current:n+1,total:r}),!o){let t={canvasId:a,canvasLabel:s,reason:`Canvas not found`};return e.appendActionLog(`Skipped language tag`,`warn`,t),nn(t)}let c=cn(e,o),l=en(c);if(!l){e.tags.removeTag({id:a,type:`Canvas`},Xt);let t={canvasId:a,canvasLabel:s,reason:`No supported language detected`};return e.appendActionLog(`Skipped language tag`,`warn`,t),nn(t)}let u=$t(l.language);e.tags.upsertTag({id:a,type:`Canvas`},u);let d={canvasId:a,canvasLabel:s,language:l.language,label:u.label,count:l.count,detectedLanguages:c.map(e=>e.language)};return e.appendActionLog(`Tagged canvas language`,`info`,{canvasId:a,language:l.language,label:u.label}),{taskStatus:`complete`,statusText:`Tagged as ${u.label}`,result:{type:`tagged`,tag:d}}},{progressLabel:(e,t,n)=>`Tagging languages ${t+1}/${n}`}));let r=an(e.tasks.getAll());e.setActionStatus(`running`,`Tagged ${r.tagged}/${r.total} canvases`),e.setActionProgress({current:r.total,total:r.total,label:`Language tagging complete`}),e.appendActionLog(`Language tagging complete`,`info`,{total:r.total,tagged:r.tagged,skipped:r.skipped,counts:r.counts}),e.setResult(r),e.setResultsAvailable(!1)}}}function $t(e){let t=hn(e);return{type:Xt,id:e,label:e,backgroundColor:t.backgroundColor,textColor:t.textColor}}function en(e){return e[0]||null}function tn(e){return{version:1,tasks:e.map((e,t)=>{let n=e?.id||`canvas-${t+1}`,r=mn(e,n);return{id:`canvas:${n}`,label:r,target:{id:n,type:`Canvas`,label:r,scope:`canvas`},input:{canvasId:n,canvasLabel:r},status:`queued`}})}}function nn(e){return{taskStatus:`skipped`,statusText:e.reason,result:{type:`skipped`,skip:e}}}function rn(e){return{total:e,tagged:0,skipped:0,counts:{},tags:[],skippedCanvases:[]}}function an(e){let t=rn(e.length);for(let n of e){let e=n.result;if(e?.type===`tagged`){t.tags.push(e.tag),t.counts[e.tag.language]=(t.counts[e.tag.language]||0)+1;continue}if(e?.type===`skipped`){t.skippedCanvases.push(e.skip);continue}n.status===`error`&&t.skippedCanvases.push({canvasId:n.target?.id||n.id,canvasLabel:n.label||n.target?.id||n.id,reason:n.error?.message||`Language tagging failed`})}return t.tagged=t.tags.length,t.skipped=t.skippedCanvases.length,t}function on(e){let t=e.vault.get(e.target);return t?.items?(e.vault.get(t.items)||[]).filter(Boolean):[]}function sn(e,t){return e.vault.get({id:t,type:`Canvas`})}function cn(e,t){let n=un(e,t)||t,r=ln(n),i=[],a=new Set;for(let e of r){let t=typeof e==`string`?e:``,n=P(t);!n||a.has(n)||(a.add(n),i.push({language:n,count:1,iiifLanguages:[t]}))}return dn(i,n)}function ln(e){let t=new Set;for(let n of h(e))typeof n==`string`&&t.add(n);$(t,e?.label),$(t,e?.summary);let n=e?.requiredStatement;if(n&&!Array.isArray(n)&&($(t,n.label),$(t,n.value)),Array.isArray(e?.metadata))for(let n of e.metadata)$(t,n?.label),$(t,n?.value);return Array.from(t)}function un(e,t){if(!t?.id)return null;try{return e.vault.toPresentation3({id:t.id,type:`Canvas`})}catch{return null}}function dn(e,t){if(e.length<2||fn(t))return e;let n=pn(t);return e.map(e=>({...e,count:n.get(e.language)||e.count})).sort((t,r)=>{let i=(n.get(r.language)||0)-(n.get(t.language)||0);return i===0?e.findIndex(e=>e.language===t.language)-e.findIndex(e=>e.language===r.language):i})}function fn(e){return!!(Array.isArray(e?.items)&&e.items.length||Array.isArray(e?.annotations)&&e.annotations.length)}function pn(e){let t=new Map;Q(t,e?.label),Q(t,e?.summary);let n=e?.requiredStatement;if(n&&!Array.isArray(n)&&(Q(t,n.label),Q(t,n.value)),Array.isArray(e?.metadata))for(let n of e.metadata)Q(t,n?.label),Q(t,n?.value);return t}function Q(e,t){if(!(!t||typeof t!=`object`||Array.isArray(t)))for(let[n,r]of Object.entries(t)){let t=P(n);if(!t||!Array.isArray(r))continue;let i=r.filter(e=>typeof e==`string`&&e.trim()).length;i&&e.set(t,(e.get(t)||0)+i)}}function $(e,t){if(!(!t||typeof t!=`object`||Array.isArray(t)))for(let[n,r]of Object.entries(t))Array.isArray(r)&&r.some(e=>typeof e==`string`&&e.trim())&&e.add(n)}function mn(e,t){let n=e?.label;if(!n)return t;if(typeof n==`string`)return n;let r=Array.isArray(n.en)?n.en[0]:void 0;if(r)return r;let i=Object.keys(n)[0];return(i&&Array.isArray(n[i])?n[i][0]:void 0)||t}function hn(e){return Zt[Math.abs(gn(e))%Zt.length]||Zt[0]}function gn(e){let t=0;for(let n=0;n<e.length;n+=1)t=(t<<5)-t+e.charCodeAt(n),t|=0;return t}function _n(e){if(e.aborted)throw Error(`Language tagging cancelled.`)}const vn={id:a,label:`Translations`,icon:b(yn,{}),render:()=>b(bn,{})};function yn(e){return b(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`1em`,height:`1em`,viewBox:`0 0 24 24`,...e,children:b(`path`,{fill:`currentColor`,d:`M12.87 15.07l-2.54-2.51l.03-.03A17.52 17.52 0 0 0 14.07 6H17V4h-7V2H8v2H1v1.99h11.17A15.9 15.9 0 0 1 9 11.35A15.34 15.34 0 0 1 6.69 8h-2c.7 1.56 1.66 3.02 2.81 4.28l-5.09 5.02L3.83 18L9 12.9l3.22 3.22l.65-1.05M18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12m-2.62 7l1.62-4.33L19.12 17h-3.24z`})})}function bn(){let e=ue(),t=se(),n=Cn(t),i=fe().getSettings(r),a=_(()=>he(e,i),[e,i]),[o,s]=v(a),[c,l]=v(`missing`);g(()=>{s(a)},[a.sourceLanguage,a.targetLanguage,a.runtime]);let u=w((e,n)=>R(n,t),[t.id,t.type]),d=_(()=>u.map(e=>e.language),[u]),f=d.join(`|`);g(()=>{!d.length||d.includes(o.sourceLanguage)||s(e=>d.includes(e.sourceLanguage)?e:j({...e,sourceLanguage:d[0]}))},[f,o.sourceLanguage]);let p=w((e,n)=>L(n,t,o),[t.id,t.type,o.sourceLanguage,o.targetLanguage,o.runtime,o.contentFilters.annotationBodies,o.contentFilters.canvasLabels]),m=w((e,t)=>L(t,n,o),[n.id,n.type,o.sourceLanguage,o.targetLanguage,o.runtime,o.contentFilters.annotationBodies,o.contentFilters.canvasLabels]),h=w((e,n)=>ye(n,t,o,d),[t.id,t.type,o.sourceLanguage,o.runtime,o.contentFilters.annotationBodies,o.contentFilters.canvasLabels,f]),ee=pe(),S=xn(),ie=le(),ae=_(()=>[{label:`Detected in manifest`,options:u.map(e=>({value:e.language,label:D(e.language)}))}],[u]),ce=_(()=>En(h),[h]),de=_(()=>(e.i18n?.availableLanguages||[]).filter(e=>!N(e)&&!ge(e)),[e.i18n?.availableLanguages]),C=_(()=>Nn(p),[p]),T=_(()=>Nn(m),[m]),me=S?.instance?.status===`preparing`||S?.instance?.status===`running`,E=F(o.sourceLanguage,o)===o.targetLanguage,O=!!S&&!me&&d.length>0&&!E&&C.missing>0,k=e=>{s(t=>j({...t,...e}))},A=(e,t)=>{s(n=>j({...n,contentFilters:{...n.contentFilters,[e]:t}}))},M=()=>{!S||!O||(Ft(S.instanceKey,o),oe({store:ie,context:S.context}))},P=_(()=>c===`current`?m:c===`all`?p:p.filter(e=>e.status===c),[p,m,c]),I=[{key:`all`,label:`All`,count:p.length},{key:`current`,label:`Current resource`,count:T.total,title:`Current ${n.type.toLowerCase()}`},{key:`missing`,label:`Missing`,count:C.missing},{key:`existing`,label:`Done`,count:C.existing},{key:`stale`,label:`Stale`,count:C.stale}];return x(te,{children:[b(re,{title:`Translations`}),x(ne,{className:`flex min-h-0 flex-col gap-0 p-0`,children:[x(`div`,{className:`flex flex-col gap-2 border-b border-zinc-100 p-3`,children:[x(`div`,{className:`flex items-end gap-1.5`,children:[b(Dn,{label:`From`,value:o.sourceLanguage,groups:ae,emptyLabel:`No detected languages`,onChange:e=>k({sourceLanguage:e})}),b(`span`,{className:`mb-[7px] text-zinc-300 select-none`,children:`→`}),b(Dn,{label:`To`,value:o.targetLanguage,groups:ce,onChange:e=>k({targetLanguage:e})}),x(`label`,{className:`grid shrink-0 gap-1`,children:[b(`span`,{className:`text-[10px] font-medium uppercase tracking-wide text-zinc-400`,children:`Mode`}),x(`select`,{className:`rounded border border-zinc-200 bg-white py-[5px] px-2 text-xs text-zinc-700 focus:border-me-primary-500 focus:outline-none focus:ring-2 focus:ring-me-primary-500/20`,value:o.runtime,onChange:e=>k({runtime:e.target.value}),children:[b(`option`,{value:`auto`,children:`Auto`}),b(`option`,{value:`webgpu`,children:`WebGPU`}),b(`option`,{value:`wasm`,children:`WASM`})]})]})]}),de.length?x(`div`,{className:`rounded border border-amber-200 bg-amber-50 px-2.5 py-2 text-xs text-amber-800`,children:[`Unsupported languages: `,de.join(`, `)]}):null,d.length===0?b(`div`,{className:`rounded border border-amber-200 bg-amber-50 px-2.5 py-2 text-xs text-amber-800`,children:`No supported IIIF languages were detected in this manifest.`}):null,E?b(`div`,{className:`rounded border border-amber-200 bg-amber-50 px-2.5 py-2 text-xs text-amber-800`,children:`Choose different source and target languages.`}):null,x(`div`,{className:`flex flex-wrap items-center gap-2`,children:[x(`div`,{className:`min-w-[7rem] flex-1 text-xs text-zinc-500`,children:[C.missing>0&&x(y,{children:[b(`span`,{className:`font-semibold text-amber-600`,children:C.missing}),` missing`]}),C.missing>0&&C.existing>0&&b(`span`,{className:`text-zinc-300`,children:` · `}),C.existing>0&&x(y,{children:[b(`span`,{className:`font-semibold text-green-600`,children:C.existing}),` done`]}),C.stale>0&&x(y,{children:[b(`span`,{className:`text-zinc-300`,children:` · `}),b(`span`,{className:`font-semibold text-red-500`,children:C.stale}),` stale`]}),p.length===0&&b(`span`,{className:`text-zinc-400`,children:`No strings found`})]}),b(`button`,{type:`button`,className:`flex shrink-0 items-center gap-1.5 rounded border border-me-primary-500 bg-me-primary-500 px-2.5 py-1.5 text-xs font-medium text-white transition-opacity disabled:cursor-not-allowed disabled:opacity-40`,disabled:!O,onClick:M,title:O?`Translate ${C.missing} missing string${C.missing===1?``:`s`}`:void 0,children:me?x(y,{children:[b(Mn,{className:`h-3 w-3 animate-spin`}),`Running…`]}):x(y,{children:[b(jn,{className:`h-3 w-3`}),`Translate`]})}),b(Tn,{filters:o.contentFilters,onChange:A})]})]}),p.length>0&&b(`div`,{className:`flex shrink-0 overflow-x-auto border-b border-zinc-100 bg-zinc-50/50`,children:I.filter(e=>e.key===`all`||e.key===`current`||e.count>0).map(e=>x(`button`,{type:`button`,className:`flex shrink-0 items-center gap-1 whitespace-nowrap px-3 py-2 text-xs font-medium transition-colors ${c===e.key?`-mb-px border-b-2 border-me-primary-500 text-me-primary-600`:`text-zinc-500 hover:text-zinc-700`}`,title:e.title,onClick:()=>l(e.key),children:[e.label,b(`span`,{className:`text-[10px] ${c===e.key?`text-me-primary-400`:`text-zinc-400`}`,children:e.count})]},e.key))}),b(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:P.length?P.map(e=>b(wn,{target:e,onSave:t=>{for(let n of e.occurrences)mt({vault:ee},n,t)}},e.key)):b(`div`,{className:`px-4 py-8 text-center text-xs text-zinc-400`,children:p.length===0?`No translatable strings found.`:c===`current`?`No current resource strings.`:`No ${c} strings.`})})]})]})}function xn(){return Sn(n)}function Sn(e){let t=ce();return _(()=>t.flatMap(e=>e.actions).find(t=>t.definition.id===e)||null,[t,e])}function Cn(e){let t=de(),n=C();return _(()=>{let r=[t,...n].map(e=>e?.resource?.source).filter(e=>!!e?.id&&!!e.type),i=r.find(e=>e.type===`Canvas`),a=r.find(e=>e.type===`Manifest`),o=i||a||e;return{id:o.id,type:o.type}},[t,n,e])}function wn({target:e,onSave:t}){let n=e.occurrences[0],r=Pn(e.occurrences),[i,a]=v(r),o=e.status===`existing`||e.status===`suggested`,[s,c]=v(!o);return g(()=>{a(r)},[r]),x(`div`,{className:`border-b border-zinc-100 last:border-0 ${o&&!s?`opacity-60`:``}`,children:[x(`button`,{type:`button`,className:`flex w-full min-w-0 items-center gap-2 px-3 py-2 text-left transition-colors hover:bg-zinc-50/80 focus:outline-none`,onClick:()=>c(e=>!e),children:[x(`div`,{className:`min-w-0 flex-1`,children:[b(`span`,{className:`block truncate text-xs font-semibold text-zinc-800`,children:n?.resource.label||n?.resource.id}),x(`span`,{className:`text-[11px] text-zinc-400`,children:[n?.propertyLabel||`String`,e.occurrences.length>1?` · ${e.occurrences.length}×`:``]})]}),b(kn,{status:e.status}),b(An,{expanded:s})]}),s&&x(`div`,{className:`px-3 pb-3`,children:[x(`div`,{className:`mb-2 rounded border border-zinc-100 bg-zinc-50 px-2.5 py-2 text-xs leading-relaxed text-zinc-700`,children:[b(`div`,{className:`mb-1 text-[10px] font-semibold uppercase tracking-widest text-me-primary-400`,children:`Source`}),e.sourceText]}),b(`textarea`,{className:`w-full min-h-[2.5rem] [field-sizing:content] rounded border border-zinc-200 bg-white px-2 py-1.5 text-xs text-zinc-900 transition-colors placeholder:text-zinc-300 focus:border-me-primary-500 focus:outline-none focus:ring-2 focus:ring-me-primary-500/20`,value:i,placeholder:`${D(e.targetLanguage)} translation…`,onChange:e=>a(e.target.value),onBlur:()=>{i.trim()!==r.trim()&&t(i)}})]})]})}function Tn({filters:e,onChange:t}){return x(`details`,{className:`relative shrink-0`,children:[b(`summary`,{className:`cursor-pointer list-none rounded border border-zinc-200 bg-white px-2.5 py-1.5 text-xs font-medium text-zinc-600 hover:border-zinc-300`,children:`Filters`}),x(`div`,{className:`absolute right-0 z-20 mt-1 grid w-48 gap-2 rounded border border-zinc-200 bg-white p-2.5 text-xs text-zinc-700 shadow-lg`,children:[x(`label`,{className:`flex items-center gap-2`,children:[b(`input`,{type:`checkbox`,className:`h-3.5 w-3.5 rounded border-zinc-300`,checked:e.annotationBodies,onChange:e=>t(`annotationBodies`,e.currentTarget.checked)}),`Annotation bodies`]}),x(`label`,{className:`flex items-center gap-2`,children:[b(`input`,{type:`checkbox`,className:`h-3.5 w-3.5 rounded border-zinc-300`,checked:e.canvasLabels,onChange:e=>t(`canvasLabels`,e.currentTarget.checked)}),`Canvas labels`]})]})]})}function En(e){let t=new Set(e.map(e=>e.language)),n=[];return e.length&&n.push({label:`Detected in manifest`,options:e.map(e=>({value:e.language,label:`${D(e.language)} (${O(e)})`}))}),n.push({label:`All languages`,options:T.filter(e=>!t.has(e.code)).map(e=>({value:e.code,label:e.label}))}),n}function Dn({label:e,value:t,groups:n,emptyLabel:r=`No languages available`,onChange:i}){let a=n.some(e=>e.options.length),o=n.some(e=>e.options.some(e=>e.value===t));return x(`label`,{className:`grid min-w-0 flex-1 gap-1`,children:[b(`span`,{className:`text-[10px] font-medium uppercase tracking-wide text-zinc-400`,children:e}),x(`select`,{className:`w-full rounded border border-zinc-200 bg-white py-[5px] px-2 text-xs text-zinc-800 focus:border-me-primary-500 focus:outline-none focus:ring-2 focus:ring-me-primary-500/20`,value:t,disabled:!a,onChange:e=>i(e.target.value),children:[o?null:b(`option`,{value:t,disabled:!0,children:a?D(t):r}),n.map(e=>e.options.length?b(`optgroup`,{label:e.label,children:e.options.map(e=>b(`option`,{value:e.value,children:e.label},e.value))},e.label):null)]})]})}const On={missing:{dot:`bg-amber-400`,text:`text-amber-700`,label:`Missing`},existing:{dot:`bg-green-400`,text:`text-green-700`,label:`Done`},stale:{dot:`bg-red-400`,text:`text-red-600`,label:`Stale`},suggested:{dot:`bg-sky-400`,text:`text-sky-700`,label:`Suggested`},skipped:{dot:`bg-zinc-300`,text:`text-zinc-500`,label:`Skipped`}};function kn({status:e}){let t=On[e]||On.skipped;return x(`span`,{className:`flex shrink-0 items-center gap-1 text-[10px] font-medium ${t.text}`,children:[b(`span`,{className:`h-1.5 w-1.5 rounded-full ${t.dot}`}),t.label]})}function An({expanded:e}){return b(`svg`,{className:`h-3.5 w-3.5 shrink-0 text-zinc-300 transition-transform ${e?`rotate-180`:``}`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,children:b(`path`,{d:`M6 9l6 6 6-6`})})}function jn({className:e}){return b(`svg`,{className:e,viewBox:`0 0 24 24`,fill:`currentColor`,children:b(`path`,{d:`M8 5v14l11-7z`})})}function Mn({className:e}){return x(`svg`,{className:e,viewBox:`0 0 24 24`,fill:`none`,children:[b(`circle`,{cx:`12`,cy:`12`,r:`9`,stroke:`currentColor`,strokeWidth:`2.5`,strokeOpacity:`0.3`}),b(`path`,{d:`M12 3a9 9 0 0 1 9 9`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`})]})}function Nn(e){return e.reduce((e,t)=>(e.total+=1,e[t.status]=(e[t.status]||0)+1,e),{total:0,missing:0,existing:0,suggested:0,skipped:0,stale:0})}function Pn(e){for(let t of e)if(t.targetText?.trim())return t.targetText;return``}const Fn=[vn],In=[It(),Qt()];export{T as M2M100_LANGUAGES,a as TRANSLATIONS_LEFT_PANEL_ID,n as TRANSLATION_ACTION_ID,i as TRANSLATION_CACHE_KEY,q as TRANSLATION_CONFIG_EVENT,t as TRANSLATION_LANGUAGE_TAG_ACTION_ID,Xt as TRANSLATION_LANGUAGE_TAG_TYPE,e as TRANSLATION_MODEL_ID,k as TRANSLATION_NONE_LANGUAGE,r as TRANSLATION_PLUGIN_ID,yn as TranslationsIcon,In as backgroundActions,R as collectDetectedManifestLanguages,ye as collectTranslationLanguageProgress,L as collectTranslationTargets,f as createDisposeRequest,c as createErrorResponse,u as createEventEnvelope,$t as createLanguageTag,s as createPreloadRequest,o as createSuccessResponse,l as createTranslateRequest,It as createTranslationBackgroundAction,Qt as createTranslationLanguageTagsBackgroundAction,Lt as createTranslationPlan,d as createTranslationResultResponse,xe as createTranslationTargetKey,at as createTranslationWorkerClient,m as default,A as defaultTranslationContentFilters,be as fingerprintTranslationText,he as getDefaultRunOptions,D as getLanguageLabel,Se as getLanguageMapSourceEntries,Ce as getLanguageMapTargetText,O as getLanguageProgressLabel,B as getLanguageValueAt,V as getLanguageValues,F as getModelSourceLanguage,M as getSupportedAvailableLanguages,pt as getWritableOccurrences,we as isHtmlTranslationValue,ge as isNoLanguageCode,E as isSupportedM2M100Language,Fn as leftPanels,I as normaliseLanguageCode,j as normaliseRunOptions,z as normaliseTranslationText,ut as openTranslationResults,Ft as queueTranslationRunOptions,ht as readOccurrenceSourceText,gt as readOccurrenceTargetText,Ye as renderTranslationConfigModal,dt as renderTranslationResults,Je as requestTranslationConfig,P as resolveSourceLanguage,N as resolveSupportedLanguage,en as selectPrimaryDetectedLanguage,p as settings,tt as translatePreservingSimpleHtml,vn as translationsPanel,mt as writeTranslationForOccurrence};
1
+ import{a as e,i as t,n,o as r,r as i,t as a}from"./constants-qn_qe3_G.js";import{a as o,i as s,n as c,o as l,r as u,s as d,t as f}from"./protocol-DQvOIA0W.js";import{n as p,t as m}from"./plugin-v71X5Knc.js";import{getAvailableLanguagesFromResource as h}from"@iiif/helpers/i18n";import{Modal as ee,Sidebar as te,SidebarContent as ne,SidebarHeader as re}from"@manifest-editor/components";import{useEffect as g,useMemo as _,useState as v}from"react";import{Fragment as y,jsx as b,jsxs as x}from"react/jsx-runtime";import{addReference as S,batchActions as ie,importEntities as ae}from"@iiif/helpers/vault/actions";import{runBackgroundAction as oe,useAppResource as se,useAvailableBackgroundActions as ce,useBackgroundActionsStoreApi as le,useConfig as ue,useEditingResource as de,useEditingResourceStack as C,usePluginRuntimeApi as fe}from"@manifest-editor/shell";import{useVault as pe,useVaultSelector as w}from"react-iiif-vault";const T=[{code:`af`,label:`Afrikaans`},{code:`am`,label:`Amharic`},{code:`ar`,label:`Arabic`},{code:`ast`,label:`Asturian`},{code:`az`,label:`Azerbaijani`},{code:`ba`,label:`Bashkir`},{code:`be`,label:`Belarusian`},{code:`bg`,label:`Bulgarian`},{code:`bn`,label:`Bengali`},{code:`br`,label:`Breton`},{code:`bs`,label:`Bosnian`},{code:`ca`,label:`Catalan; Valencian`},{code:`ceb`,label:`Cebuano`},{code:`cs`,label:`Czech`},{code:`cy`,label:`Welsh`},{code:`da`,label:`Danish`},{code:`de`,label:`German`},{code:`el`,label:`Greek`},{code:`en`,label:`English`},{code:`es`,label:`Spanish`},{code:`et`,label:`Estonian`},{code:`fa`,label:`Persian`},{code:`ff`,label:`Fulah`},{code:`fi`,label:`Finnish`},{code:`fr`,label:`French`},{code:`fy`,label:`Western Frisian`},{code:`ga`,label:`Irish`},{code:`gd`,label:`Gaelic; Scottish Gaelic`},{code:`gl`,label:`Galician`},{code:`gu`,label:`Gujarati`},{code:`ha`,label:`Hausa`},{code:`he`,label:`Hebrew`},{code:`hi`,label:`Hindi`},{code:`hr`,label:`Croatian`},{code:`ht`,label:`Haitian; Haitian Creole`},{code:`hu`,label:`Hungarian`},{code:`hy`,label:`Armenian`},{code:`id`,label:`Indonesian`},{code:`ig`,label:`Igbo`},{code:`ilo`,label:`Iloko`},{code:`is`,label:`Icelandic`},{code:`it`,label:`Italian`},{code:`ja`,label:`Japanese`},{code:`jv`,label:`Javanese`},{code:`ka`,label:`Georgian`},{code:`kk`,label:`Kazakh`},{code:`km`,label:`Central Khmer`},{code:`kn`,label:`Kannada`},{code:`ko`,label:`Korean`},{code:`lb`,label:`Luxembourgish; Letzeburgesch`},{code:`lg`,label:`Ganda`},{code:`ln`,label:`Lingala`},{code:`lo`,label:`Lao`},{code:`lt`,label:`Lithuanian`},{code:`lv`,label:`Latvian`},{code:`mg`,label:`Malagasy`},{code:`mk`,label:`Macedonian`},{code:`ml`,label:`Malayalam`},{code:`mn`,label:`Mongolian`},{code:`mr`,label:`Marathi`},{code:`ms`,label:`Malay`},{code:`my`,label:`Burmese`},{code:`ne`,label:`Nepali`},{code:`nl`,label:`Dutch; Flemish`},{code:`no`,label:`Norwegian`},{code:`ns`,label:`Northern Sotho`},{code:`oc`,label:`Occitan`},{code:`or`,label:`Oriya`},{code:`pa`,label:`Panjabi; Punjabi`},{code:`pl`,label:`Polish`},{code:`ps`,label:`Pushto; Pashto`},{code:`pt`,label:`Portuguese`},{code:`ro`,label:`Romanian; Moldavian; Moldovan`},{code:`ru`,label:`Russian`},{code:`sd`,label:`Sindhi`},{code:`si`,label:`Sinhala; Sinhalese`},{code:`sk`,label:`Slovak`},{code:`sl`,label:`Slovenian`},{code:`so`,label:`Somali`},{code:`sq`,label:`Albanian`},{code:`sr`,label:`Serbian`},{code:`ss`,label:`Swati`},{code:`su`,label:`Sundanese`},{code:`sv`,label:`Swedish`},{code:`sw`,label:`Swahili`},{code:`ta`,label:`Tamil`},{code:`th`,label:`Thai`},{code:`tl`,label:`Tagalog`},{code:`tn`,label:`Tswana`},{code:`tr`,label:`Turkish`},{code:`uk`,label:`Ukrainian`},{code:`ur`,label:`Urdu`},{code:`uz`,label:`Uzbek`},{code:`vi`,label:`Vietnamese`},{code:`wo`,label:`Wolof`},{code:`xh`,label:`Xhosa`},{code:`yi`,label:`Yiddish`},{code:`yo`,label:`Yoruba`},{code:`zh`,label:`Chinese`},{code:`zu`,label:`Zulu`}],me=new Set(T.map(e=>e.code));function E(e){return!!e&&me.has(e)}function D(e){return T.find(t=>t.code===e)?.label||e}function O(e){if(!e.total)return`0`;let t=e.existing+(e.suggested||0);return`${Math.round(t/e.total*100)}%`}const k=`none`,A={annotationBodies:!0,canvasLabels:!0};function j(e,t={}){let n=N(e),r=F(t.defaultSourceLanguage)||P(e?.i18n?.defaultLanguage)||n[0]||`en`,i=P(t.defaultSourceLanguage)||P(e?.i18n?.defaultLanguage)||n[0]||`en`;return M({sourceLanguage:r,modelSourceLanguage:i,targetLanguage:P(t.defaultTargetLanguage,i)||n.find(e=>e!==i)||(i===`nl`?`en`:`nl`),runtime:t.runtimePreference,writePolicy:`fill-missing`})}function M(e={}){let t=F(e.sourceLanguage)||`en`,n=I(t,e);return{sourceLanguage:t,modelSourceLanguage:n,targetLanguage:P(e.targetLanguage,n)||(n===`nl`?`en`:`nl`),runtime:ge(e.runtime),writePolicy:`fill-missing`,contentFilters:_e(e.contentFilters),currentResourceOnly:e.currentResourceOnly===!0}}function N(e){let t=e?.i18n?.availableLanguages||[],n=[];for(let e of t){let t=P(e);t&&!n.includes(t)&&n.push(t)}return n}function P(e,t){if(typeof e!=`string`)return null;let n=L(e);if(!n||n===t)return null;if(E(n))return n;let r=n.split(`-`)[0]||``;return r!==n&&r!==t&&E(r)?r:null}function F(e){return he(e)?k:P(e)}function I(e,t={}){return P(e)||P(t.modelSourceLanguage)||`en`}function he(e){return typeof e==`string`&&L(e)===`none`}function L(e){return e.trim().replace(/_/g,`-`).toLowerCase()}function ge(e){return e===`webgpu`||e===`wasm`||e===`auto`?e:`auto`}function _e(e){let t=e&&typeof e==`object`?e:{};return{annotationBodies:typeof t.annotationBodies==`boolean`?t.annotationBodies:A.annotationBodies,canvasLabels:typeof t.canvasLabels==`boolean`?t.canvasLabels:A.canvasLabels}}function R(e,t,n){let r={vault:e,options:n,occurrences:[],visited:new Set};U(r,t);let i=new Map;for(let e of r.occurrences){let t=B(e.sourceText);if(!t)continue;let n=be(t,e.sourceLanguage,e.targetLanguage,e.valueFormat),r=i.get(n);if(r){r.occurrences.push(e),r.status=We(r.status,e.status);continue}i.set(n,{key:n,sourceLanguage:e.sourceLanguage,targetLanguage:e.targetLanguage,sourceText:e.sourceText,normalisedSourceText:t,valueFormat:e.valueFormat,occurrences:[e],status:e.status})}return Array.from(i.values()).sort((e,t)=>{let n=Ge(e.status)-Ge(t.status);return n===0?e.sourceText.localeCompare(t.sourceText):n})}function z(e,t){let n={vault:e,languages:new Map,visited:new Set};return W(n,t),Array.from(n.languages.values()).sort((e,t)=>Ke(e).localeCompare(Ke(t)))}function ve(e,t,n,r=z(e,t).map(e=>e.language)){return r.filter(e=>!!P(e)).map(r=>{let i={language:r,total:0,missing:0,existing:0,suggested:0,skipped:0,stale:0};for(let a of R(e,t,{...n,targetLanguage:r}))i.total+=1,i[a.status]+=1;return i})}function B(e){return e.replace(/\s+/g,` `).trim()}function ye(e){return B(e)}function be(e,t,n,r){return`${t}:${n}:${r}:${e.toLowerCase()}`}function xe(e,t){if(!e)return[];if(typeof e==`string`)return e.trim()?[{sourceMapLanguage:t,sourceIndex:0,sourceText:e}]:[];let n=H(e,t);if(n.length)return n.map((e,n)=>({sourceMapLanguage:t,sourceIndex:n,sourceText:e})).filter(e=>B(e.sourceText));let r=P(t);if(r){let n=Object.keys(e).find(e=>e!==t&&P(e)===r);if(n)return H(e,n).map((e,t)=>({sourceMapLanguage:n,sourceIndex:t,sourceText:e})).filter(e=>B(e.sourceText))}return H(e,`none`).map((e,t)=>({sourceMapLanguage:`none`,sourceIndex:t,sourceText:e})).filter(e=>B(e.sourceText))}function V(e,t,n){return e?typeof e==`string`?t===`none`||n===0?e:``:H(e,t)[n]||``:``}function H(e,t){let n=e[t];return Array.isArray(n)?n.filter(e=>typeof e==`string`):[]}function Se(e,t,n){let r=V(e,t,n);if(B(r))return r;if(!e||typeof e==`string`)return``;let i=P(t);if(i)for(let r of Object.keys(e)){if(r===t||P(r)!==i)continue;let a=V(e,r,n);if(B(a))return a}return H(e,t).find(e=>B(e))||``}function Ce(e){return/<\/?[a-z][\s\S]*>/i.test(e)}function U(e,t){if(!t?.id||!t.type)return;let n=`${t.type}:${t.id}`;if(e.visited.has(n))return;e.visited.add(n);let r=Ve(e.vault,t);if(r){Oe(e,r),ke(e,r),Ae(e,r);for(let t of q(r.provider,`Agent`))U(e,t);switch(r.type){case`Manifest`:for(let t of q(r.items,`Canvas`))U(e,t);for(let t of q(r.structures,`Range`))U(e,t);break;case`Canvas`:for(let t of[...q(r.items,`AnnotationPage`),...q(r.annotations,`AnnotationPage`)])U(e,t);break;case`Range`:for(let t of q(r.items))U(e,t);break;case`AnnotationPage`:for(let t of q(r.items,`Annotation`))U(e,t);break;case`Annotation`:je(e,r)}}}function W(e,t){if(!t?.id||!t.type)return;let n=`${t.type}:${t.id}`;if(e.visited.has(n))return;e.visited.add(n);let r=Ve(e.vault,t);if(r){we(e,r);for(let t of q(r.provider,`Agent`))W(e,t);switch(r.type){case`Manifest`:for(let t of q(r.items,`Canvas`))W(e,t);for(let t of q(r.structures,`Range`))W(e,t);break;case`Canvas`:for(let t of[...q(r.items,`AnnotationPage`),...q(r.annotations,`AnnotationPage`)])W(e,t);break;case`Range`:for(let t of q(r.items))W(e,t);break;case`AnnotationPage`:for(let t of q(r.items,`Annotation`))W(e,t);break;case`Annotation`:for(let t of q(r.body,`ContentResource`))W(e,t);break;case`Choice`:for(let t of q(r.items,`ContentResource`))W(e,t)}}}function we(e,t){for(let n of Te(t))typeof n==`string`&&De(e,n,1)}function Te(e){let t=new Set;try{for(let n of h(e))typeof n==`string`&&t.add(n)}catch{}for(let n of Ee(e))t.add(n);return Array.from(t)}function Ee(e){let t=new Set;if(G(t,e?.label),G(t,e?.summary),typeof e?.language==`string`)t.add(e.language);else if(Array.isArray(e?.language))for(let n of e.language)typeof n==`string`&&t.add(n);let n=e?.requiredStatement;if(n&&!Array.isArray(n)&&(G(t,n.label),G(t,n.value)),Array.isArray(e?.metadata))for(let n of e.metadata)G(t,n?.label),G(t,n?.value);return Array.from(t)}function G(e,t){if(!(!t||typeof t==`string`))for(let[n,r]of Object.entries(t))Array.isArray(r)&&r.some(e=>typeof e==`string`&&B(e))&&e.add(n)}function De(e,t,n){let r=F(t);if(!r)return;let i=L(t),a=e.languages.get(r);if(a){a.count+=n,a.iiifLanguages.includes(i)||a.iiifLanguages.push(i);return}e.languages.set(r,{language:r,count:n,iiifLanguages:[i]})}function Oe(e,t,n){let r=n||He(t);K(e,{path:{kind:`resource-language-map`,resource:r,property:`label`},resource:r,propertyLabel:`Label`,value:t.label}),K(e,{path:{kind:`resource-language-map`,resource:r,property:`summary`},resource:r,propertyLabel:`Summary`,value:t.summary})}function ke(e,t,n){let r=Array.isArray(t.metadata)?t.metadata:[],i=n||He(t);r.forEach((t,n)=>{K(e,{path:{kind:`metadata-language-map`,resource:i,metadataIndex:n,field:`label`},resource:i,propertyLabel:`Metadata ${n+1} label`,value:t?.label}),K(e,{path:{kind:`metadata-language-map`,resource:i,metadataIndex:n,field:`value`},resource:i,propertyLabel:`Metadata ${n+1} value`,value:t?.value})})}function Ae(e,t,n){let r=t.requiredStatement;if(!r)return;let i=n||He(t);K(e,{path:{kind:`required-statement-language-map`,resource:i,field:`label`},resource:i,propertyLabel:`Required statement label`,value:r.label}),K(e,{path:{kind:`required-statement-language-map`,resource:i,field:`value`},resource:i,propertyLabel:`Required statement value`,value:r.value})}function je(e,t){let n={id:t.id,type:`Annotation`},r=Ne(e.vault,t);for(let{ref:t,resource:n}of r){let r={...t,label:Ue(n,n.id||t.id)};Oe(e,n,r),ke(e,n,r),Ae(e,n,r)}if(e.options.contentFilters?.annotationBodies===!1)return;let i=r.filter(e=>Re(e.resource));for(let{ref:t,resource:r,choice:a}of i){if(!Le(r,e.options.sourceLanguage))continue;let o=typeof r.value==`string`?r.value:``;if(!B(o))continue;let s=Fe(i.filter(e=>Ie(a,e)),e.options.targetLanguage),c=typeof s?.resource.value==`string`?s.resource.value:``;e.occurrences.push({id:Me({kind:`textual-body`,annotation:n,body:t,choice:a,targetBody:s?{id:s.ref.id,type:`ContentResource`}:void 0}),path:{kind:`textual-body`,annotation:n,body:t,choice:a,targetBody:s?{id:s.ref.id,type:`ContentResource`}:void 0},resource:{id:r.id||t.id,type:`ContentResource`,label:Ue(r,r.id||t.id)},propertyLabel:`Annotation body`,sourceLanguage:e.options.sourceLanguage,sourceMapLanguage:Be(r.language,e.options.sourceLanguage),targetLanguage:e.options.targetLanguage,sourceIndex:0,sourceText:o,targetText:c,valueFormat:r.format===`text/html`||Ce(o)?`html`:`text`,sourceFingerprint:ye(o),status:B(c)?`existing`:`missing`})}}function K(e,t){if(t.path.kind===`resource-language-map`&&t.path.resource.type===`Canvas`&&t.path.property===`label`&&e.options.contentFilters?.canvasLabels===!1)return;let n=xe(t.value,e.options.sourceLanguage);for(let r of n){let n=Se(t.value,e.options.targetLanguage,r.sourceIndex);e.occurrences.push({id:Me(t.path,r.sourceMapLanguage,r.sourceIndex),path:t.path,resource:t.resource,propertyLabel:t.propertyLabel,sourceLanguage:e.options.sourceLanguage,sourceMapLanguage:r.sourceMapLanguage,targetLanguage:e.options.targetLanguage,sourceIndex:r.sourceIndex,sourceText:r.sourceText,targetText:n,valueFormat:Ce(r.sourceText)?`html`:`text`,sourceFingerprint:ye(r.sourceText),status:B(n)?`existing`:`missing`})}}function Me(e,t=`text`,n=0){switch(e.kind){case`resource-language-map`:return`${e.resource.type}:${e.resource.id}:${e.property}:${t}:${n}`;case`metadata-language-map`:return`${e.resource.type}:${e.resource.id}:metadata:${e.metadataIndex}:${e.field}:${t}:${n}`;case`required-statement-language-map`:return`${e.resource.type}:${e.resource.id}:requiredStatement:${e.field}:${t}:${n}`;case`textual-body`:return`${e.annotation.id}:body:${e.choice?.id||`annotation`}:${e.body.id}`}}function Ne(e,t){let n=[];for(let r of q(t.body,`ContentResource`))Pe(e,r,n);return n}function Pe(e,t,n,r){let i=Ve(e,t);if(i&&(n.push({ref:t,resource:i,choice:r}),i.type===`Choice`))for(let r of q(i.items,`ContentResource`))Pe(e,r,n,t)}function Fe(e,t){return e.find(({resource:e})=>!Re(e)||!B(String(e.value||``))?!1:ze(e.language,t))}function Ie(e,t){return(e?.id||``)===(t.choice?.id||``)}function Le(e,t){return!Re(e)||typeof e.value!=`string`?!1:!e.language||ze(e.language,t)}function Re(e){return e?.type===`TextualBody`||e?.type===`Text`}function ze(e,t){let n=e=>e===t||typeof e==`string`&&P(e)===P(t);return Array.isArray(e)?e.some(n):n(e)}function Be(e,t){return Array.isArray(e)?typeof e[0]==`string`?e[0]:t:typeof e==`string`?e:t}function q(e,t){return(Array.isArray(e)?e:e?[e]:[]).map(e=>{if(!e?.id)return null;let n=t===`ContentResource`&&(e.type===`TextualBody`||e.type===`Text`)?t:e.type||t;return{id:e.id,type:n}}).filter(e=>!!e?.id&&!!e.type)}function Ve(e,t){let n=e.get(t,{skipSelfReturn:!1});return n&&typeof n==`object`?n:null}function He(e){return{id:e.id,type:e.type,label:Ue(e,e.id||e.type)}}function Ue(e,t){if(!e?.label)return t;if(typeof e.label==`string`)return e.label;let n=e.label.en?.find?.(e=>e?.trim());if(n)return n;for(let t of Object.keys(e.label)){let n=e.label[t]?.find?.(e=>e?.trim());if(n)return n}return t}function We(e,t){return e===`missing`||t===`missing`?`missing`:e===`stale`||t===`stale`?`stale`:e===`skipped`||t===`skipped`?`skipped`:e===`suggested`||t===`suggested`?`suggested`:`existing`}function Ge(e){switch(e){case`missing`:return 0;case`stale`:return 1;case`skipped`:return 2;case`suggested`:return 3;case`existing`:return 4}}function Ke(e){return e.language}const J=`@manifest-editor/translation:config`;function qe(e){return new Promise(t=>{if(e.signal?.aborted||typeof window>`u`){t(!1);return}let n=!1,r=r=>{n||(n=!0,e.signal?.removeEventListener(`abort`,i),t(r))},i=()=>r(!1);e.signal?.addEventListener(`abort`,i,{once:!0}),window.dispatchEvent(new CustomEvent(J,{detail:{...e,resolve:r}}))})}function Je(e){return b(Ye,{actionId:e})}function Ye({actionId:t}){let[n,r]=v(null),[i,a]=v(M({}));g(()=>{let e=e=>{let n=e.detail;n?.actionId===t&&(r(n),a(M(n.defaults)))};return window.addEventListener(J,e),()=>window.removeEventListener(J,e)},[t]),g(()=>{if(!n?.signal)return;if(n.signal.aborted){r(null);return}let e=()=>r(null);return n.signal.addEventListener(`abort`,e,{once:!0}),()=>n.signal?.removeEventListener(`abort`,e)},[n]);let o=n?.detectedLanguages||[],s=_(()=>o.map(e=>e.language),[o]),c=s.join(`|`);g(()=>{!s.length||s.includes(i.sourceLanguage)||a(e=>s.includes(e.sourceLanguage)?e:M({...e,sourceLanguage:s[0]}))},[c,i.sourceLanguage]);let l=_(()=>n?.getTargets?.(i)||n?.targets||[],[n,i]),u=_(()=>l.filter(e=>e.status===`missing`).length,[l]),d=_(()=>n?.getTargetLanguageProgress?.(i)||[],[n,i]),f=_(()=>[{label:`Detected in manifest`,options:o.map(e=>({value:e.language,label:D(e.language)}))}],[o]),p=_(()=>Ze(d),[d]),m=(e,t)=>{a(n=>M({...n,contentFilters:{...n.contentFilters,[e]:t}}))};if(!n)return null;let h=e=>{n.resolve(e!==!1&&M(e)),r(null)},te=I(i.sourceLanguage,i)===i.targetLanguage,ne=i.currentResourceOnly===!0&&!!n.currentResource,re=s.length===0||te||u===0;return b(ee,{title:`Run translations`,onClose:()=>h(!1),className:`max-w-xl`,actions:x(`div`,{className:`flex gap-2`,children:[b(`button`,{type:`button`,className:`rounded border border-zinc-200 bg-white px-2.5 py-1.5 text-xs font-medium text-zinc-600 hover:border-zinc-300`,onClick:()=>h(!1),children:`Cancel`}),b(`button`,{type:`button`,className:`rounded border border-me-primary-500 bg-me-primary-500 px-2.5 py-1.5 text-xs font-medium text-white disabled:cursor-not-allowed disabled:opacity-40`,disabled:re,onClick:()=>h(i),children:`Run translation`})]}),children:x(`div`,{className:`flex flex-col gap-3 p-3 text-sm text-zinc-700`,children:[x(`div`,{className:`flex flex-col gap-2 border-b border-zinc-100 pb-3`,children:[x(`div`,{className:`grid grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-end gap-1.5 sm:grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)_7rem]`,children:[b(Qe,{label:`From`,value:i.sourceLanguage,groups:f,emptyLabel:`No detected languages`,onChange:e=>a(t=>M({...t,sourceLanguage:e}))}),b(`span`,{className:`mb-[7px] text-zinc-300 select-none`,children:`→`}),b(Qe,{label:`To`,value:i.targetLanguage,groups:p,onChange:e=>a(t=>M({...t,targetLanguage:e}))}),x(`label`,{className:`col-span-3 grid shrink-0 gap-1 sm:col-span-1`,children:[b(`span`,{className:`text-[10px] font-medium uppercase tracking-wide text-zinc-400`,children:`Mode`}),x(`select`,{className:`rounded border border-zinc-200 bg-white py-[5px] px-2 text-xs text-zinc-700 focus:border-me-primary-500 focus:outline-none focus:ring-2 focus:ring-me-primary-500/20`,value:i.runtime,onChange:e=>a(t=>M({...t,runtime:e.target.value})),children:[b(`option`,{value:`auto`,children:`Auto`}),b(`option`,{value:`webgpu`,children:`WebGPU`}),b(`option`,{value:`wasm`,children:`WASM`})]})]})]}),x(`div`,{className:`flex flex-wrap items-center gap-2`,children:[x(`label`,{className:`flex items-center gap-2 text-xs ${n.currentResource?`text-zinc-600`:`text-zinc-300`}`,title:n.currentResource?.label||n.currentResource?.id,children:[b(`input`,{type:`checkbox`,className:`h-3.5 w-3.5 rounded border-zinc-300`,checked:ne,disabled:!n.currentResource,onChange:e=>a(t=>M({...t,currentResourceOnly:e.currentTarget.checked}))}),`Current resource`]}),b(Xe,{filters:i.contentFilters,onChange:m})]})]}),s.length===0?b(`div`,{className:`rounded border border-amber-200 bg-amber-50 px-2.5 py-2 text-xs text-amber-800`,children:`No supported IIIF languages were detected in this manifest.`}):null,te?b(`div`,{className:`rounded border border-amber-200 bg-amber-50 px-2.5 py-2 text-xs text-amber-800`,children:`Select different source and target languages.`}):null,x(`div`,{className:`rounded border border-zinc-200 bg-zinc-50 px-2.5 py-2`,children:[x(`div`,{className:`text-xs text-zinc-500`,children:[u>0?x(y,{children:[b(`span`,{className:`font-semibold text-amber-600`,children:u}),` missing`]}):b(`span`,{className:`text-zinc-400`,children:`No missing strings`}),l.length>0?x(y,{children:[b(`span`,{className:`text-zinc-300`,children:` · `}),b(`span`,{children:l.length}),` total`]}):null]}),x(`div`,{className:`mt-1 text-xs text-zinc-500`,children:[`Missing target-language values will be filled using `,e,`. Existing target values are left unchanged.`]})]})]})})}function Xe({filters:e,onChange:t}){return x(`details`,{className:`relative shrink-0`,children:[b(`summary`,{className:`cursor-pointer list-none rounded border border-zinc-200 bg-white px-2.5 py-1.5 text-xs font-medium text-zinc-600 hover:border-zinc-300`,children:`Filters`}),x(`div`,{className:`absolute right-0 z-20 mt-1 grid w-48 gap-2 rounded border border-zinc-200 bg-white p-2.5 text-xs text-zinc-700 shadow-lg`,children:[x(`label`,{className:`flex items-center gap-2`,children:[b(`input`,{type:`checkbox`,className:`h-3.5 w-3.5 rounded border-zinc-300`,checked:e.annotationBodies,onChange:e=>t(`annotationBodies`,e.currentTarget.checked)}),`Annotation bodies`]}),x(`label`,{className:`flex items-center gap-2`,children:[b(`input`,{type:`checkbox`,className:`h-3.5 w-3.5 rounded border-zinc-300`,checked:e.canvasLabels,onChange:e=>t(`canvasLabels`,e.currentTarget.checked)}),`Canvas labels`]})]})]})}function Ze(e){let t=new Set(e.map(e=>e.language)),n=[];return e.length&&n.push({label:`Detected in manifest`,options:e.map(e=>({value:e.language,label:`${D(e.language)} (${O(e)})`}))}),n.push({label:`All languages`,options:T.filter(e=>!t.has(e.code)).map(e=>({value:e.code,label:e.label}))}),n}function Qe({label:e,value:t,groups:n,emptyLabel:r=`No languages available`,onChange:i}){let a=n.some(e=>e.options.length),o=n.some(e=>e.options.some(e=>e.value===t));return x(`label`,{className:`grid min-w-0 flex-1 gap-1`,children:[b(`span`,{className:`text-[10px] font-medium uppercase tracking-wide text-zinc-400`,children:e}),x(`select`,{className:`w-full rounded border border-zinc-200 bg-white py-[5px] px-2 text-xs text-zinc-800 focus:border-me-primary-500 focus:outline-none focus:ring-2 focus:ring-me-primary-500/20`,value:t,disabled:!a,onChange:e=>i(e.target.value),children:[o?null:b(`option`,{value:t,disabled:!0,children:a?D(t):r}),n.map(e=>e.options.length?b(`optgroup`,{label:e.label,children:e.options.map(e=>b(`option`,{value:e.value,children:e.label},e.value))},e.label):null)]})]})}const $e=new Set([`br`,`hr`,`img`,`input`,`meta`,`link`,`area`,`base`,`col`,`embed`,`param`,`source`,`track`,`wbr`]);async function et(e,t){let n=tt(e);if(!n||!nt(n))return null;let r=[];for(let e of n){if(e.type===`tag`){r.push(e.value);continue}if(!e.value.trim()){r.push(e.value);continue}let n=e.value.match(/^\s*/)?.[0]||``,i=e.value.match(/\s*$/)?.[0]||``,a=e.value.trim();r.push(`${n}${await t(a)}${i}`)}return r.join(``)}function tt(e){let t=[],n=/<\/?[^>]+>/g,r=0,i;for(;i=n.exec(e);){if(i.index>r){let n=e.slice(r,i.index);if(/[<>]/.test(n))return null;t.push({type:`text`,value:n})}let n=i[0];if(!/^<\/?[A-Za-z][A-Za-z0-9:-]*(\s+[^<>]*)?\/?>$/.test(n))return null;t.push({type:`tag`,value:n}),r=i.index+n.length}if(r<e.length){let n=e.slice(r);if(/[<>]/.test(n))return null;t.push({type:`text`,value:n})}return t.length?t:null}function nt(e){let t=[];for(let n of e){if(n.type!==`tag`)continue;let e=n.value.match(/^<\/\s*([A-Za-z][A-Za-z0-9:-]*)\s*>$/);if(e){if(t.pop()!==e[1].toLowerCase())return!1;continue}let r=n.value.match(/^<\s*([A-Za-z][A-Za-z0-9:-]*)/);if(!r)return!1;let i=r[1].toLowerCase();n.value.endsWith(`/>`)||$e.has(i)||t.push(i)}return t.length===0}function rt(){return typeof crypto<`u`&&`randomUUID`in crypto?crypto.randomUUID():`translation-${Date.now()}-${Math.random().toString(16).slice(2)}`}function it(e={}){let t=e.worker??at(e.workerUrl),n=new Set,r=new Map,i=!1,a=e=>{for(let t of n)t(e)},o=e=>{for(let t of r.values())t.reject(e);r.clear()};t.addEventListener(`message`,e=>{let t=e.data;if(t.kind===`event`){a(t.payload);return}let n=r.get(t.requestId);if(n){if(r.delete(t.requestId),t.kind===`error`){let e=Error(t.payload.message);e.name=t.payload.code,n.reject(e);return}n.resolve(t.payload)}}),t.addEventListener(`error`,e=>{let t=Error(e.message||`The translation worker crashed.`);t.name=`worker_failed`,a({type:`error`,code:`worker_failed`,message:t.message,recoverable:!1}),o(t)});let c=(e,n)=>{if(i)return Promise.reject(Error(`The translation worker client has been terminated.`));let a=rt(),o=e===`translate`?l(a,n.payload):e===`dispose`?f(a):s(a,n.payload);return new Promise((n,i)=>{r.set(a,{command:e,resolve:e=>n(e),reject:i}),t.postMessage(o)})};return{async preload(e){await c(`preload`,{payload:e})},translate(e){return c(`translate`,{payload:e})},onEvent(e){return n.add(e),()=>{n.delete(e)}},terminate(){i||(i=!0,t.postMessage(f(rt())),t.terminate(),o(Error(`The translation worker client has been terminated.`)))}}}function at(e){try{return new Worker(ot(e),{type:`module`})}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Unable to start the translation worker. If you are using @manifest-editor/translation from a bundled package, provide a public workerUrl or pass a Worker instance. ${t}`)}}function ot(e){return e instanceof URL?e:e?new URL(e,globalThis.location?.href||import.meta.url):new URL(st(),import.meta.url)}function st(){return`./translation-worker.js`}const ct=`@manifest-editor/translation:results`;function lt(e,t){typeof window>`u`||window.dispatchEvent(new CustomEvent(ct,{detail:{actionId:e,result:t}}))}function ut(e){return b(dt,{actionId:e})}function dt({actionId:e}){let[t,n]=v(null);return g(()=>{let t=t=>{let r=t.detail;r?.actionId===e&&r.result&&n(r.result)};return window.addEventListener(ct,t),()=>window.removeEventListener(ct,t)},[e]),t?b(ee,{title:`Translation results`,onClose:()=>n(null),className:`max-w-4xl`,children:x(`div`,{className:`flex min-h-0 flex-col gap-4 p-4 text-sm text-zinc-700`,children:[x(`div`,{className:`grid grid-cols-3 gap-2 sm:grid-cols-6`,children:[b(Y,{label:`Strings`,value:t.total}),b(Y,{label:`Translated`,value:t.translated}),b(Y,{label:`Applied`,value:t.applied}),b(Y,{label:`Existing`,value:t.existing}),b(Y,{label:`Stale`,value:t.stale}),b(Y,{label:`Skipped`,value:t.skipped+t.errors})]}),t.translations.length?x(`div`,{className:`rounded border border-zinc-200`,children:[b(`div`,{className:`border-b border-zinc-200 bg-zinc-50 px-3 py-2 font-medium`,children:`Translated strings`}),b(`div`,{className:`max-h-64 overflow-auto`,children:t.translations.map(e=>x(`div`,{className:`grid gap-1.5 border-b border-zinc-100 px-3 py-2.5 last:border-0`,children:[b(`div`,{className:`border-l-2 border-zinc-200 pl-2.5 text-[11px] italic leading-relaxed text-zinc-400 line-clamp-2`,children:e.sourceText}),b(`div`,{className:`text-xs font-medium text-zinc-900 line-clamp-2`,children:e.translationText}),x(`div`,{className:`text-[11px] text-zinc-400`,children:[e.applied,` occurrence`,e.applied===1?``:`s`]})]},e.key))})]}):null,t.skippedTargets.length?x(`div`,{className:`rounded border border-zinc-200`,children:[b(`div`,{className:`border-b border-zinc-200 bg-zinc-50 px-3 py-2 font-medium`,children:`Skipped strings`}),b(`div`,{className:`max-h-56 overflow-auto`,children:t.skippedTargets.map(e=>x(`div`,{className:`grid gap-1 border-b border-zinc-100 px-3 py-2 last:border-0`,children:[b(`div`,{className:`line-clamp-2 font-medium text-zinc-900`,children:e.sourceText}),b(`div`,{className:`text-zinc-500`,children:e.reason})]},`${e.key}-${e.reason}`))})]}):null]})}):null}function Y({label:e,value:t}){return x(`div`,{className:`rounded border border-zinc-200 bg-zinc-50 px-2.5 py-2`,children:[b(`div`,{className:`text-base font-semibold text-zinc-900`,children:t}),b(`div`,{className:`text-[10px] uppercase tracking-wide text-zinc-400`,children:e})]})}function ft(e,t){let n=[],r=[],i=[];for(let a of t.occurrences){if(ye(mt(e.vault,a))!==a.sourceFingerprint){i.push(a);continue}if(B(xt(e.vault,a))){r.push(a);continue}n.push(a)}return{writable:n,existing:r,stale:i}}function pt(e,t,n){let r=n.trim();if(!r)return!1;switch(t.path.kind){case`resource-language-map`:return gt(e.vault,t.path.resource,t.path.property,t,r),!0;case`metadata-language-map`:return _t(e.vault,t.path,t,r),!0;case`required-statement-language-map`:return vt(e.vault,t.path,t,r),!0;case`textual-body`:return yt(e.vault,t,r),!0}}function mt(e,t){if(t.path.kind===`textual-body`){let n=X(e,t.path.body);return typeof n?.value==`string`?n.value:``}return V(bt(e,t.path),t.sourceMapLanguage,t.sourceIndex)}function ht(e,t){if(t.path.kind===`textual-body`){let n=wt(e,t);return typeof n?.value==`string`?n.value:``}return V(bt(e,t.path),t.targetLanguage,t.sourceIndex)}function gt(e,t,n,r,i){let a=St(X(e,t)?.[n],r.sourceMapLanguage,r.sourceText,r.targetLanguage,r.sourceIndex,i);e.modifyEntityField(t,n,a)}function _t(e,t,n,r){let i=X(e,t.resource),a=Array.isArray(i?.metadata)?[...i.metadata]:[],o=a[t.metadataIndex]||{label:{},value:{}};a[t.metadataIndex]={...o,[t.field]:St(o[t.field],n.sourceMapLanguage,n.sourceText,n.targetLanguage,n.sourceIndex,r)},e.modifyEntityField(t.resource,`metadata`,a)}function vt(e,t,n,r){let i=X(e,t.resource)?.requiredStatement||{},a={label:{none:[``]},value:{none:[``]},...i,[t.field]:St(i[t.field],n.sourceMapLanguage,n.sourceText,n.targetLanguage,n.sourceIndex,r)};e.modifyEntityField(t.resource,`requiredStatement`,a)}function yt(e,t,n){if(t.path.kind!==`textual-body`)return;let r=wt(e,t);if(r?.id){e.modifyEntityField({id:r.id,type:`ContentResource`},`value`,n),e.modifyEntityField({id:r.id,type:`ContentResource`},`language`,t.targetLanguage);return}let i=X(e,t.path.body),a=kt(t),o={id:a,type:`ContentResource`};if(t.path.choice){e.dispatch(ae({entities:{ContentResource:{[a]:{id:a,type:`TextualBody`,format:i?.format||(t.valueFormat===`html`?`text/html`:`text/plain`),value:n,language:t.targetLanguage}}}}));let r=X(e,t.path.choice),s=Array.isArray(r?.items)?r.items:[];e.modifyEntityField(t.path.choice,`items`,[...s,o]);return}e.dispatch(ie({actions:[ae({entities:{ContentResource:{[a]:{id:a,type:`TextualBody`,format:i?.format||(t.valueFormat===`html`?`text/html`:`text/plain`),value:n,language:t.targetLanguage}}}}),S({id:t.path.annotation.id,type:`Annotation`,key:`body`,reference:o})]}))}function bt(e,t){if(t.kind===`textual-body`)return null;let n=X(e,t.resource);if(!n)return null;switch(t.kind){case`resource-language-map`:return n[t.property];case`metadata-language-map`:return n.metadata?.[t.metadataIndex]?.[t.field];case`required-statement-language-map`:return n.requiredStatement?.[t.field]}}function xt(e,t){return t.path.kind===`textual-body`?ht(e,t):Se(bt(e,t.path),t.targetLanguage,t.sourceIndex)}function St(e,t,n,r,i,a){let o=Ct(e,t,n),s=[...o[r]||[]];for(;s.length<=i;)s.push(``);return s[i]=a,o[r]=s,o}function Ct(e,t,n){return e?typeof e==`string`?{[t]:[e]}:Object.fromEntries(Object.entries(e).map(([e,t])=>[e,Array.isArray(t)?[...t]:[]])):{[t]:[n]}}function wt(e,t){if(t.path.kind!==`textual-body`)return null;if(t.path.targetBody){let n=X(e,t.path.targetBody);if(n)return n}let n=t.path.body.id,r=X(e,t.path.annotation),i=t.path.choice?.id||``;return Tt(e,r).filter(e=>(e.choice?.id||``)===i).find(({resource:e,ref:r})=>r.id===n||e?.id===n||e?.type!==`TextualBody`&&e?.type!==`Text`?!1:At(e.language,t.targetLanguage))?.resource||null}function Tt(e,t){let n=[];for(let r of Ot(t?.body,`ContentResource`))Et(e,r,n);return n.filter(({resource:e})=>Dt(e))}function Et(e,t,n,r){let i=X(e,t);if(i&&(n.push({ref:t,resource:i,choice:r}),i.type===`Choice`))for(let r of Ot(i.items,`ContentResource`))Et(e,r,n,t)}function Dt(e){return e?.type===`TextualBody`||e?.type===`Text`}function Ot(e,t){return(Array.isArray(e)?e:e?[e]:[]).map(e=>{if(!e?.id)return null;let n=t===`ContentResource`&&(e.type===`TextualBody`||e.type===`Text`)?t:e.type||t;return{id:e.id,type:n}}).filter(e=>!!e?.id&&!!e.type)}function kt(e){let t=e.path.kind===`textual-body`?e.path.annotation.id:e.resource.id,n=e.path.kind===`textual-body`?e.path.body.id:e.id;return`${jt(t)}/translation/${encodeURIComponent(e.targetLanguage)}/${Mt(n)}`}function At(e,t){let n=e=>e===t||typeof e==`string`&&P(e)===P(t);return Array.isArray(e)?e.some(n):n(e)}function X(e,t){if(!t?.id||!t.type)return null;let n=e.get(t,{skipSelfReturn:!1});return n&&typeof n==`object`?n:null}function jt(e){return e.endsWith(`/`)?e.slice(0,-1):e}function Mt(e){let t=5381;for(let n=0;n<e.length;n+=1)t=t*33^e.charCodeAt(n);return(t>>>0).toString(36)}const Nt=new Map;function Pt(e,t){Nt.set(e,M(t))}function Ft(e={}){let t=e.createClient||(e=>it({workerUrl:typeof e?.workerUrl==`string`&&e.workerUrl.trim()?e.workerUrl:void 0})),i=e.collectTargets||R,a=e.requestConfig||Lt,o=e.translateHtml||et,s=null,c,l=e=>typeof e?.workerUrl==`string`&&e.workerUrl.trim()?e.workerUrl.trim():void 0,u=(e=s)=>{e&&(e.terminate(),s===e&&(s=null,c=void 0))},d=e=>{let n=l(e);return s&&c!==n&&u(s),s||(s=t(e),c=n),s};return{id:n,label:`Run translation`,summary:`Translate missing manifest strings with M2M100`,section:`Translations`,order:30,resourceTypes:[`Manifest`],resumable:!0,render:e=>x(y,{children:[Je(e.definition.id),ut(e.definition.id)]}),onResults:e=>lt(e.definition.id,e.instance?.result),supports:e=>e.vault.get(e.target)?.type===`Manifest`,prepare:async e=>{let t=e.plugins.getSettings(r),n=j(e.config,t),o=i(e.vault,Z(e,n),n),s=Nt.get(e.instanceKey)||await a(e,o,n);if(Nt.delete(e.instanceKey),s===!1)return!1;let c=M(s);return It(i(e.vault,Z(e,c),c),c)},run:async e=>{let t=Rt(e.plan),n=M(t?.options||j(e.config)),i=e.tasks.getAll(),a=e.tasks.getPending(),s={vault:e.vault};if(e.setActionLabel(`Running translation`),!i.length)return e.setActionStatus(`running`,`No translatable strings found`),e.setActionProgress({current:0,total:0,label:`No strings`}),Ht(0);if(a.length){let t=e.plugins.getSettings(r),i=d(t),a=i.onEvent(t=>Wt(e,t)),c=()=>u(i);e.signal.addEventListener(`abort`,c,{once:!0});try{qt(e.signal),e.setActionStatus(`running`,`Loading translation model`),await i.preload({runtime:n.runtime}),await e.tasks.runEach(async(t,{index:r,total:a})=>{qt(e.signal);let c=t.input;if(!c)return Bt(`Missing translation target`,t.id,``,0,0);e.appendActionLog(`Translating ${r+1}/${a}`,`info`,{key:c.key,sourceLanguage:c.sourceLanguage,targetLanguage:c.targetLanguage});let l=ft(s,c);if(!l.writable.length)return Bt(Ut(l.existing.length,l.stale.length),c.key,c.sourceText,l.existing.length,l.stale.length);let d;try{d=await zt(i,c,n,o)}catch(e){throw Jt(e)&&u(i),e}if(!d)return Bt(`HTML could not be parsed for safe translation`,c.key,c.sourceText,l.existing.length,l.stale.length);let f=0,p=l.existing.length,m=l.stale.length;for(let e of l.writable){let t=ft(s,{...c,occurrences:[e]});if(t.stale.length){m+=t.stale.length;continue}if(t.existing.length){p+=t.existing.length;continue}pt(s,e,d)&&(f+=1)}return f?{taskStatus:`complete`,statusText:`Translated ${f} occurrence${f===1?``:`s`}`,result:{type:`translated`,key:c.key,sourceText:c.sourceText,translationText:d,applied:f,existing:p,stale:m}}:Bt(`No missing occurrences remained`,c.key,c.sourceText,p,m)},{progressLabel:(e,t,n)=>`Translating strings ${t+1}/${n}`})}catch(e){throw u(i),e}finally{e.signal.removeEventListener(`abort`,c),a()}}let c=Vt(t?.totalTargets||i.length,e.tasks.getAll());return e.setActionStatus(`running`,`Applied ${c.applied} translations`),e.setActionProgress({current:c.total,total:c.total,label:`Translations complete`}),c}}}function It(e,t){return{version:1,data:{options:M(t),totalTargets:e.length},tasks:e.map(e=>{let t=e.occurrences.filter(e=>e.status===`existing`).length,n=e.status!==`missing`;return{id:e.key,label:Kt(e),target:Gt(e),input:e,status:n?`skipped`:`queued`,statusText:n?`Target language already exists`:void 0,result:n?{type:`skipped`,key:e.key,sourceText:e.sourceText,reason:`Target language already exists`,existing:t,stale:0}:void 0,completedAt:n?Date.now():void 0}})}}function Z(e,t){return t.currentResourceOnly&&e.currentCanvas?{id:e.currentCanvas.id,type:e.currentCanvas.type,label:e.currentCanvas.label}:e.target}async function Lt(e,t,n){let r=z(e.vault,e.target),i=r.map(e=>e.language);return qe({actionId:e.definition.id,instanceKey:e.instanceKey,defaults:n,targets:t,availableLanguages:N(e.config),detectedLanguages:r,currentResource:e.currentCanvas?{id:e.currentCanvas.id,type:e.currentCanvas.type,label:e.currentCanvas.label}:void 0,getTargets:t=>R(e.vault,Z(e,M(t)),M(t)),getTargetLanguageProgress:t=>ve(e.vault,Z(e,M(t)),M(t),i),signal:e.signal})}function Rt(e){let t=e?.data;return t?.options?t:null}async function zt(e,t,n,r){let i=async r=>(await e.translate({text:r,sourceLanguage:I(t.sourceLanguage,n),targetLanguage:t.targetLanguage,runtime:n.runtime})).text;return t.valueFormat===`html`?r(t.sourceText,i):i(t.sourceText)}function Bt(e,t,n,r,i){return{taskStatus:`skipped`,statusText:e,result:{type:`skipped`,key:t,sourceText:n,reason:e,existing:r,stale:i}}}function Vt(e,t){let n=Ht(e);for(let e of t){let t=e.result;if(t?.type===`translated`){n.translated+=1,n.applied+=t.applied,n.existing+=t.existing,n.stale+=t.stale,n.translations.push({key:t.key,sourceText:t.sourceText,translationText:t.translationText,applied:t.applied});continue}if(t?.type===`skipped`){n.skipped+=1,n.existing+=t.existing||0,n.stale+=t.stale||0,n.skippedTargets.push({key:t.key,sourceText:t.sourceText,reason:t.reason});continue}e.status===`error`&&(n.errors+=1,n.skippedTargets.push({key:e.id,sourceText:e.label,reason:e.error?.message||`Translation failed`}))}return n}function Ht(e){return{total:e,translated:0,applied:0,skipped:0,existing:0,stale:0,errors:0,translations:[],skippedTargets:[]}}function Ut(e,t){return t&&e?`Source changed or target translation already exists`:t?`Source changed after the translation run was prepared`:e?`Target language already exists`:`No writable occurrences`}function Wt(e,t){switch(t.type){case`model-progress`:e.setActionStatus(`running`,`Loading model ${Math.round(t.progress)}% (${Yt(t.loaded)} / ${Yt(t.total)})`);break;case`model-ready`:e.setActionStatus(`running`,`Model ready (${t.runtime.toUpperCase()})`);break;case`runtime-fallback`:e.appendActionLog(`Falling back to WASM translation runtime`,`warn`,t),e.setActionStatus(`running`,`WebGPU unavailable; using WASM`);break;case`translation-start`:e.setActionStatus(`running`,`Translating ${t.sourceLanguage} to ${t.targetLanguage}`);break;case`translation-complete`:e.setActionStatus(`running`,`Translated ${t.result.text.length} characters`);break;case`error`:e.signal.aborted||e.setActionStatus(`running`,t.message)}}function Gt(e){let t=e.occurrences[0]?.resource,n=t?.label||e.sourceText||`Translation string`;return{id:t?.id||e.key,type:t?.type||`Manifest`,label:n,scope:t?.type===`Canvas`?`canvas`:`root`}}function Kt(e){let t=e.normalisedSourceText||e.sourceText||`Translation string`;return t.length>80?`${t.slice(0,77)}...`:t}function qt(e){if(e.aborted)throw Error(`Translation cancelled.`)}function Jt(e){return e instanceof Error&&(e.name===`model_load_failed`||e.name===`worker_failed`)}function Yt(e){return e?`${Math.round(e/1024/1024)} MB`:`0 MB`}const Xt=`language`,Zt=[{backgroundColor:`#1d4ed8`,textColor:`#ffffff`},{backgroundColor:`#047857`,textColor:`#ffffff`},{backgroundColor:`#b45309`,textColor:`#ffffff`},{backgroundColor:`#7c3aed`,textColor:`#ffffff`},{backgroundColor:`#be123c`,textColor:`#ffffff`},{backgroundColor:`#0f766e`,textColor:`#ffffff`},{backgroundColor:`#4338ca`,textColor:`#ffffff`},{backgroundColor:`#a16207`,textColor:`#ffffff`}];function Qt(){return{id:t,label:`Tag with languages`,summary:`Tag each canvas with its detected language`,section:`Translations`,order:35,resourceTypes:[`Manifest`],resumable:!0,supports:e=>{let t=e.vault.get(e.target);return t?.type===`Manifest`&&!!t?.items?.length},prepare:e=>tn(on(e)),run:async e=>{let t=e.tasks.getAll(),n=e.tasks.getPending();if(e.setActionLabel(`Tagging canvas languages`),!t.length){let t=rn(0);e.setActionStatus(`running`,`No canvases to tag`),e.setActionProgress({current:0,total:0,label:`No canvases`}),e.setResult(t),e.setResultsAvailable(!1);return}n.length&&(e.canvasProgress.setStatuses(n.map(e=>e.target).filter(e=>!!e&&e.type===`Canvas`),`queued`),await e.tasks.runEach(async(t,{index:n,total:r})=>{_n(e.signal);let i=t.input,a=t.target?.id||i?.canvasId||t.id,o=sn(e,a),s=mn(o,i?.canvasLabel||a);if(e.appendActionLog(`Tagging language ${n+1}/${r}`,`info`,{canvasId:a,current:n+1,total:r}),!o){let t={canvasId:a,canvasLabel:s,reason:`Canvas not found`};return e.appendActionLog(`Skipped language tag`,`warn`,t),nn(t)}let c=cn(e,o),l=en(c);if(!l){e.tags.removeTag({id:a,type:`Canvas`},Xt);let t={canvasId:a,canvasLabel:s,reason:`No supported language detected`};return e.appendActionLog(`Skipped language tag`,`warn`,t),nn(t)}let u=$t(l.language);e.tags.upsertTag({id:a,type:`Canvas`},u);let d={canvasId:a,canvasLabel:s,language:l.language,label:u.label,count:l.count,detectedLanguages:c.map(e=>e.language)};return e.appendActionLog(`Tagged canvas language`,`info`,{canvasId:a,language:l.language,label:u.label}),{taskStatus:`complete`,statusText:`Tagged as ${u.label}`,result:{type:`tagged`,tag:d}}},{progressLabel:(e,t,n)=>`Tagging languages ${t+1}/${n}`}));let r=an(e.tasks.getAll());e.setActionStatus(`running`,`Tagged ${r.tagged}/${r.total} canvases`),e.setActionProgress({current:r.total,total:r.total,label:`Language tagging complete`}),e.appendActionLog(`Language tagging complete`,`info`,{total:r.total,tagged:r.tagged,skipped:r.skipped,counts:r.counts}),e.setResult(r),e.setResultsAvailable(!1)}}}function $t(e){let t=hn(e);return{type:Xt,id:e,label:e,backgroundColor:t.backgroundColor,textColor:t.textColor}}function en(e){return e[0]||null}function tn(e){return{version:1,tasks:e.map((e,t)=>{let n=e?.id||`canvas-${t+1}`,r=mn(e,n);return{id:`canvas:${n}`,label:r,target:{id:n,type:`Canvas`,label:r,scope:`canvas`},input:{canvasId:n,canvasLabel:r},status:`queued`}})}}function nn(e){return{taskStatus:`skipped`,statusText:e.reason,result:{type:`skipped`,skip:e}}}function rn(e){return{total:e,tagged:0,skipped:0,counts:{},tags:[],skippedCanvases:[]}}function an(e){let t=rn(e.length);for(let n of e){let e=n.result;if(e?.type===`tagged`){t.tags.push(e.tag),t.counts[e.tag.language]=(t.counts[e.tag.language]||0)+1;continue}if(e?.type===`skipped`){t.skippedCanvases.push(e.skip);continue}n.status===`error`&&t.skippedCanvases.push({canvasId:n.target?.id||n.id,canvasLabel:n.label||n.target?.id||n.id,reason:n.error?.message||`Language tagging failed`})}return t.tagged=t.tags.length,t.skipped=t.skippedCanvases.length,t}function on(e){let t=e.vault.get(e.target);return t?.items?(e.vault.get(t.items)||[]).filter(Boolean):[]}function sn(e,t){return e.vault.get({id:t,type:`Canvas`})}function cn(e,t){let n=un(e,t)||t,r=ln(n),i=[],a=new Set;for(let e of r){let t=typeof e==`string`?e:``,n=F(t);!n||a.has(n)||(a.add(n),i.push({language:n,count:1,iiifLanguages:[t]}))}return dn(i,n)}function ln(e){let t=new Set;for(let n of h(e))typeof n==`string`&&t.add(n);$(t,e?.label),$(t,e?.summary);let n=e?.requiredStatement;if(n&&!Array.isArray(n)&&($(t,n.label),$(t,n.value)),Array.isArray(e?.metadata))for(let n of e.metadata)$(t,n?.label),$(t,n?.value);return Array.from(t)}function un(e,t){if(!t?.id)return null;try{return e.vault.toPresentation3({id:t.id,type:`Canvas`})}catch{return null}}function dn(e,t){if(e.length<2||fn(t))return e;let n=pn(t);return e.map(e=>({...e,count:n.get(e.language)||e.count})).sort((t,r)=>{let i=(n.get(r.language)||0)-(n.get(t.language)||0);return i===0?e.findIndex(e=>e.language===t.language)-e.findIndex(e=>e.language===r.language):i})}function fn(e){return!!(Array.isArray(e?.items)&&e.items.length||Array.isArray(e?.annotations)&&e.annotations.length)}function pn(e){let t=new Map;Q(t,e?.label),Q(t,e?.summary);let n=e?.requiredStatement;if(n&&!Array.isArray(n)&&(Q(t,n.label),Q(t,n.value)),Array.isArray(e?.metadata))for(let n of e.metadata)Q(t,n?.label),Q(t,n?.value);return t}function Q(e,t){if(!(!t||typeof t!=`object`||Array.isArray(t)))for(let[n,r]of Object.entries(t)){let t=F(n);if(!t||!Array.isArray(r))continue;let i=r.filter(e=>typeof e==`string`&&e.trim()).length;i&&e.set(t,(e.get(t)||0)+i)}}function $(e,t){if(!(!t||typeof t!=`object`||Array.isArray(t)))for(let[n,r]of Object.entries(t))Array.isArray(r)&&r.some(e=>typeof e==`string`&&e.trim())&&e.add(n)}function mn(e,t){let n=e?.label;if(!n)return t;if(typeof n==`string`)return n;let r=Array.isArray(n.en)?n.en[0]:void 0;if(r)return r;let i=Object.keys(n)[0];return(i&&Array.isArray(n[i])?n[i][0]:void 0)||t}function hn(e){let t=Math.abs(gn(e))%Zt.length;return Zt[t]||Zt[0]}function gn(e){let t=0;for(let n=0;n<e.length;n+=1)t=(t<<5)-t+e.charCodeAt(n),t|=0;return t}function _n(e){if(e.aborted)throw Error(`Language tagging cancelled.`)}const vn={id:a,label:`Translations`,icon:b(yn,{}),render:()=>b(bn,{})};function yn(e){return b(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`1em`,height:`1em`,viewBox:`0 0 24 24`,...e,children:b(`path`,{fill:`currentColor`,d:`M12.87 15.07l-2.54-2.51l.03-.03A17.52 17.52 0 0 0 14.07 6H17V4h-7V2H8v2H1v1.99h11.17A15.9 15.9 0 0 1 9 11.35A15.34 15.34 0 0 1 6.69 8h-2c.7 1.56 1.66 3.02 2.81 4.28l-5.09 5.02L3.83 18L9 12.9l3.22 3.22l.65-1.05M18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12m-2.62 7l1.62-4.33L19.12 17h-3.24z`})})}function bn(){let e=ue(),t=se(),n=Cn(t),i=fe().getSettings(r),a=_(()=>j(e,i),[e,i]),[o,s]=v(a),[c,l]=v(`missing`);g(()=>{s(a)},[a.sourceLanguage,a.targetLanguage,a.runtime]);let u=w((e,n)=>z(n,t),[t.id,t.type]),d=_(()=>u.map(e=>e.language),[u]),f=d.join(`|`);g(()=>{!d.length||d.includes(o.sourceLanguage)||s(e=>d.includes(e.sourceLanguage)?e:M({...e,sourceLanguage:d[0]}))},[f,o.sourceLanguage]);let p=w((e,n)=>R(n,t,o),[t.id,t.type,o.sourceLanguage,o.targetLanguage,o.runtime,o.contentFilters.annotationBodies,o.contentFilters.canvasLabels]),m=w((e,t)=>R(t,n,o),[n.id,n.type,o.sourceLanguage,o.targetLanguage,o.runtime,o.contentFilters.annotationBodies,o.contentFilters.canvasLabels]),h=w((e,n)=>ve(n,t,o,d),[t.id,t.type,o.sourceLanguage,o.runtime,o.contentFilters.annotationBodies,o.contentFilters.canvasLabels,f]),ee=pe(),S=xn(),ie=le(),ae=_(()=>[{label:`Detected in manifest`,options:u.map(e=>({value:e.language,label:D(e.language)}))}],[u]),ce=_(()=>En(h),[h]),de=_(()=>(e.i18n?.availableLanguages||[]).filter(e=>!P(e)&&!he(e)),[e.i18n?.availableLanguages]),C=_(()=>Nn(p),[p]),T=_(()=>Nn(m),[m]),me=S?.instance?.status===`preparing`||S?.instance?.status===`running`,E=I(o.sourceLanguage,o)===o.targetLanguage,O=!!S&&!me&&d.length>0&&!E&&C.missing>0,k=e=>{s(t=>M({...t,...e}))},A=(e,t)=>{s(n=>M({...n,contentFilters:{...n.contentFilters,[e]:t}}))},N=()=>{!S||!O||(Pt(S.instanceKey,o),oe({store:ie,context:S.context}))},F=_(()=>c===`current`?m:c===`all`?p:p.filter(e=>e.status===c),[p,m,c]),L=[{key:`all`,label:`All`,count:p.length},{key:`current`,label:`Current resource`,count:T.total,title:`Current ${n.type.toLowerCase()}`},{key:`missing`,label:`Missing`,count:C.missing},{key:`existing`,label:`Done`,count:C.existing},{key:`stale`,label:`Stale`,count:C.stale}];return x(te,{children:[b(re,{title:`Translations`}),x(ne,{className:`flex min-h-0 flex-col gap-0 p-0`,children:[x(`div`,{className:`flex flex-col gap-2 border-b border-zinc-100 p-3`,children:[x(`div`,{className:`flex items-end gap-1.5`,children:[b(Dn,{label:`From`,value:o.sourceLanguage,groups:ae,emptyLabel:`No detected languages`,onChange:e=>k({sourceLanguage:e})}),b(`span`,{className:`mb-[7px] text-zinc-300 select-none`,children:`→`}),b(Dn,{label:`To`,value:o.targetLanguage,groups:ce,onChange:e=>k({targetLanguage:e})}),x(`label`,{className:`grid shrink-0 gap-1`,children:[b(`span`,{className:`text-[10px] font-medium uppercase tracking-wide text-zinc-400`,children:`Mode`}),x(`select`,{className:`rounded border border-zinc-200 bg-white py-[5px] px-2 text-xs text-zinc-700 focus:border-me-primary-500 focus:outline-none focus:ring-2 focus:ring-me-primary-500/20`,value:o.runtime,onChange:e=>k({runtime:e.target.value}),children:[b(`option`,{value:`auto`,children:`Auto`}),b(`option`,{value:`webgpu`,children:`WebGPU`}),b(`option`,{value:`wasm`,children:`WASM`})]})]})]}),de.length?x(`div`,{className:`rounded border border-amber-200 bg-amber-50 px-2.5 py-2 text-xs text-amber-800`,children:[`Unsupported languages: `,de.join(`, `)]}):null,d.length===0?b(`div`,{className:`rounded border border-amber-200 bg-amber-50 px-2.5 py-2 text-xs text-amber-800`,children:`No supported IIIF languages were detected in this manifest.`}):null,E?b(`div`,{className:`rounded border border-amber-200 bg-amber-50 px-2.5 py-2 text-xs text-amber-800`,children:`Choose different source and target languages.`}):null,x(`div`,{className:`flex flex-wrap items-center gap-2`,children:[x(`div`,{className:`min-w-[7rem] flex-1 text-xs text-zinc-500`,children:[C.missing>0&&x(y,{children:[b(`span`,{className:`font-semibold text-amber-600`,children:C.missing}),` missing`]}),C.missing>0&&C.existing>0&&b(`span`,{className:`text-zinc-300`,children:` · `}),C.existing>0&&x(y,{children:[b(`span`,{className:`font-semibold text-green-600`,children:C.existing}),` done`]}),C.stale>0&&x(y,{children:[b(`span`,{className:`text-zinc-300`,children:` · `}),b(`span`,{className:`font-semibold text-red-500`,children:C.stale}),` stale`]}),p.length===0&&b(`span`,{className:`text-zinc-400`,children:`No strings found`})]}),b(`button`,{type:`button`,className:`flex shrink-0 items-center gap-1.5 rounded border border-me-primary-500 bg-me-primary-500 px-2.5 py-1.5 text-xs font-medium text-white transition-opacity disabled:cursor-not-allowed disabled:opacity-40`,disabled:!O,onClick:N,title:O?`Translate ${C.missing} missing string${C.missing===1?``:`s`}`:void 0,children:me?x(y,{children:[b(Mn,{className:`h-3 w-3 animate-spin`}),`Running…`]}):x(y,{children:[b(jn,{className:`h-3 w-3`}),`Translate`]})}),b(Tn,{filters:o.contentFilters,onChange:A})]})]}),p.length>0&&b(`div`,{className:`flex shrink-0 overflow-x-auto border-b border-zinc-100 bg-zinc-50/50`,children:L.filter(e=>e.key===`all`||e.key===`current`||e.count>0).map(e=>x(`button`,{type:`button`,className:`flex shrink-0 items-center gap-1 whitespace-nowrap px-3 py-2 text-xs font-medium transition-colors ${c===e.key?`-mb-px border-b-2 border-me-primary-500 text-me-primary-600`:`text-zinc-500 hover:text-zinc-700`}`,title:e.title,onClick:()=>l(e.key),children:[e.label,b(`span`,{className:`text-[10px] ${c===e.key?`text-me-primary-400`:`text-zinc-400`}`,children:e.count})]},e.key))}),b(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:F.length?F.map(e=>b(wn,{target:e,onSave:t=>{for(let n of e.occurrences)pt({vault:ee},n,t)}},e.key)):b(`div`,{className:`px-4 py-8 text-center text-xs text-zinc-400`,children:p.length===0?`No translatable strings found.`:c===`current`?`No current resource strings.`:`No ${c} strings.`})})]})]})}function xn(){return Sn(n)}function Sn(e){let t=ce();return _(()=>t.flatMap(e=>e.actions).find(t=>t.definition.id===e)||null,[t,e])}function Cn(e){let t=de(),n=C();return _(()=>{let r=[t,...n].map(e=>e?.resource?.source).filter(e=>!!e?.id&&!!e.type),i=r.find(e=>e.type===`Canvas`),a=r.find(e=>e.type===`Manifest`),o=i||a||e;return{id:o.id,type:o.type}},[t,n,e])}function wn({target:e,onSave:t}){let n=e.occurrences[0],r=Pn(e.occurrences),[i,a]=v(r),o=e.status===`existing`||e.status===`suggested`,[s,c]=v(!o);return g(()=>{a(r)},[r]),x(`div`,{className:`border-b border-zinc-100 last:border-0 ${o&&!s?`opacity-60`:``}`,children:[x(`button`,{type:`button`,className:`flex w-full min-w-0 items-center gap-2 px-3 py-2 text-left transition-colors hover:bg-zinc-50/80 focus:outline-none`,onClick:()=>c(e=>!e),children:[x(`div`,{className:`min-w-0 flex-1`,children:[b(`span`,{className:`block truncate text-xs font-semibold text-zinc-800`,children:n?.resource.label||n?.resource.id}),x(`span`,{className:`text-[11px] text-zinc-400`,children:[n?.propertyLabel||`String`,e.occurrences.length>1?` · ${e.occurrences.length}×`:``]})]}),b(kn,{status:e.status}),b(An,{expanded:s})]}),s&&x(`div`,{className:`px-3 pb-3`,children:[x(`div`,{className:`mb-2 rounded border border-zinc-100 bg-zinc-50 px-2.5 py-2 text-xs leading-relaxed text-zinc-700`,children:[b(`div`,{className:`mb-1 text-[10px] font-semibold uppercase tracking-widest text-me-primary-400`,children:`Source`}),e.sourceText]}),b(`textarea`,{className:`w-full min-h-[2.5rem] [field-sizing:content] rounded border border-zinc-200 bg-white px-2 py-1.5 text-xs text-zinc-900 transition-colors placeholder:text-zinc-300 focus:border-me-primary-500 focus:outline-none focus:ring-2 focus:ring-me-primary-500/20`,value:i,placeholder:`${D(e.targetLanguage)} translation…`,onChange:e=>a(e.target.value),onBlur:()=>{i.trim()!==r.trim()&&t(i)}})]})]})}function Tn({filters:e,onChange:t}){return x(`details`,{className:`relative shrink-0`,children:[b(`summary`,{className:`cursor-pointer list-none rounded border border-zinc-200 bg-white px-2.5 py-1.5 text-xs font-medium text-zinc-600 hover:border-zinc-300`,children:`Filters`}),x(`div`,{className:`absolute right-0 z-20 mt-1 grid w-48 gap-2 rounded border border-zinc-200 bg-white p-2.5 text-xs text-zinc-700 shadow-lg`,children:[x(`label`,{className:`flex items-center gap-2`,children:[b(`input`,{type:`checkbox`,className:`h-3.5 w-3.5 rounded border-zinc-300`,checked:e.annotationBodies,onChange:e=>t(`annotationBodies`,e.currentTarget.checked)}),`Annotation bodies`]}),x(`label`,{className:`flex items-center gap-2`,children:[b(`input`,{type:`checkbox`,className:`h-3.5 w-3.5 rounded border-zinc-300`,checked:e.canvasLabels,onChange:e=>t(`canvasLabels`,e.currentTarget.checked)}),`Canvas labels`]})]})]})}function En(e){let t=new Set(e.map(e=>e.language)),n=[];return e.length&&n.push({label:`Detected in manifest`,options:e.map(e=>({value:e.language,label:`${D(e.language)} (${O(e)})`}))}),n.push({label:`All languages`,options:T.filter(e=>!t.has(e.code)).map(e=>({value:e.code,label:e.label}))}),n}function Dn({label:e,value:t,groups:n,emptyLabel:r=`No languages available`,onChange:i}){let a=n.some(e=>e.options.length),o=n.some(e=>e.options.some(e=>e.value===t));return x(`label`,{className:`grid min-w-0 flex-1 gap-1`,children:[b(`span`,{className:`text-[10px] font-medium uppercase tracking-wide text-zinc-400`,children:e}),x(`select`,{className:`w-full rounded border border-zinc-200 bg-white py-[5px] px-2 text-xs text-zinc-800 focus:border-me-primary-500 focus:outline-none focus:ring-2 focus:ring-me-primary-500/20`,value:t,disabled:!a,onChange:e=>i(e.target.value),children:[o?null:b(`option`,{value:t,disabled:!0,children:a?D(t):r}),n.map(e=>e.options.length?b(`optgroup`,{label:e.label,children:e.options.map(e=>b(`option`,{value:e.value,children:e.label},e.value))},e.label):null)]})]})}const On={missing:{dot:`bg-amber-400`,text:`text-amber-700`,label:`Missing`},existing:{dot:`bg-green-400`,text:`text-green-700`,label:`Done`},stale:{dot:`bg-red-400`,text:`text-red-600`,label:`Stale`},suggested:{dot:`bg-sky-400`,text:`text-sky-700`,label:`Suggested`},skipped:{dot:`bg-zinc-300`,text:`text-zinc-500`,label:`Skipped`}};function kn({status:e}){let t=On[e]||On.skipped;return x(`span`,{className:`flex shrink-0 items-center gap-1 text-[10px] font-medium ${t.text}`,children:[b(`span`,{className:`h-1.5 w-1.5 rounded-full ${t.dot}`}),t.label]})}function An({expanded:e}){return b(`svg`,{className:`h-3.5 w-3.5 shrink-0 text-zinc-300 transition-transform ${e?`rotate-180`:``}`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,children:b(`path`,{d:`M6 9l6 6 6-6`})})}function jn({className:e}){return b(`svg`,{className:e,viewBox:`0 0 24 24`,fill:`currentColor`,children:b(`path`,{d:`M8 5v14l11-7z`})})}function Mn({className:e}){return x(`svg`,{className:e,viewBox:`0 0 24 24`,fill:`none`,children:[b(`circle`,{cx:`12`,cy:`12`,r:`9`,stroke:`currentColor`,strokeWidth:`2.5`,strokeOpacity:`0.3`}),b(`path`,{d:`M12 3a9 9 0 0 1 9 9`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`})]})}function Nn(e){return e.reduce((e,t)=>(e.total+=1,e[t.status]=(e[t.status]||0)+1,e),{total:0,missing:0,existing:0,suggested:0,skipped:0,stale:0})}function Pn(e){for(let t of e)if(t.targetText?.trim())return t.targetText;return``}const Fn=[vn],In=[Ft(),Qt()];export{T as M2M100_LANGUAGES,a as TRANSLATIONS_LEFT_PANEL_ID,n as TRANSLATION_ACTION_ID,i as TRANSLATION_CACHE_KEY,J as TRANSLATION_CONFIG_EVENT,t as TRANSLATION_LANGUAGE_TAG_ACTION_ID,Xt as TRANSLATION_LANGUAGE_TAG_TYPE,e as TRANSLATION_MODEL_ID,k as TRANSLATION_NONE_LANGUAGE,r as TRANSLATION_PLUGIN_ID,yn as TranslationsIcon,In as backgroundActions,z as collectDetectedManifestLanguages,ve as collectTranslationLanguageProgress,R as collectTranslationTargets,f as createDisposeRequest,c as createErrorResponse,u as createEventEnvelope,$t as createLanguageTag,s as createPreloadRequest,o as createSuccessResponse,l as createTranslateRequest,Ft as createTranslationBackgroundAction,Qt as createTranslationLanguageTagsBackgroundAction,It as createTranslationPlan,d as createTranslationResultResponse,be as createTranslationTargetKey,it as createTranslationWorkerClient,m as default,A as defaultTranslationContentFilters,ye as fingerprintTranslationText,j as getDefaultRunOptions,D as getLanguageLabel,xe as getLanguageMapSourceEntries,Se as getLanguageMapTargetText,O as getLanguageProgressLabel,V as getLanguageValueAt,H as getLanguageValues,I as getModelSourceLanguage,N as getSupportedAvailableLanguages,ft as getWritableOccurrences,Ce as isHtmlTranslationValue,he as isNoLanguageCode,E as isSupportedM2M100Language,Fn as leftPanels,L as normaliseLanguageCode,M as normaliseRunOptions,B as normaliseTranslationText,lt as openTranslationResults,Pt as queueTranslationRunOptions,mt as readOccurrenceSourceText,ht as readOccurrenceTargetText,Je as renderTranslationConfigModal,ut as renderTranslationResults,qe as requestTranslationConfig,F as resolveSourceLanguage,P as resolveSupportedLanguage,en as selectPrimaryDetectedLanguage,p as settings,et as translatePreservingSimpleHtml,vn as translationsPanel,pt as writeTranslationForOccurrence};
2
2
  //# sourceMappingURL=index.js.map