@manifest-editor/translation 2.0.3-next.0.f58cbd8 → 2.1.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.
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,`__esModule`,{value:!0});const e=require(`./protocol-DDNUHeE0.cjs`);let t=require(`@iiif/helpers/i18n`),n=require(`@manifest-editor/components`),r=require(`react`),i=require(`react/jsx-runtime`),a=require(`@iiif/helpers/vault/actions`),o=require(`@manifest-editor/shell`),s=require(`react-iiif-vault`);const c=[{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`}],l=new Set(c.map(e=>e.code));function u(e){return!!e&&l.has(e)}function d(e){return c.find(t=>t.code===e)?.label||e}function f(e){if(!e.total)return`0`;let t=e.existing+(e.suggested||0);return`${Math.round(t/e.total*100)}%`}const p=`en`,m=`nl`,h=`none`,g={annotationBodies:!0,canvasLabels:!0};function _(e,t={}){let n=y(e),r=x(t.defaultSourceLanguage)||b(e?.i18n?.defaultLanguage)||n[0]||`en`,i=b(t.defaultSourceLanguage)||b(e?.i18n?.defaultLanguage)||n[0]||`en`;return v({sourceLanguage:r,modelSourceLanguage:i,targetLanguage:b(t.defaultTargetLanguage,i)||n.find(e=>e!==i)||(i===`nl`?`en`:`nl`),runtime:t.runtimePreference,writePolicy:`fill-missing`})}function v(e={}){let t=x(e.sourceLanguage)||`en`,n=S(t,e);return{sourceLanguage:t,modelSourceLanguage:n,targetLanguage:b(e.targetLanguage,n)||(n===`nl`?`en`:`nl`),runtime:T(e.runtime),writePolicy:`fill-missing`,contentFilters:ee(e.contentFilters),currentResourceOnly:e.currentResourceOnly===!0}}function y(e){let t=e?.i18n?.availableLanguages||[],n=[];for(let e of t){let t=b(e);t&&!n.includes(t)&&n.push(t)}return n}function b(e,t){if(typeof e!=`string`)return null;let n=w(e);if(!n||n===t)return null;if(u(n))return n;let r=n.split(`-`)[0]||``;return r!==n&&r!==t&&u(r)?r:null}function x(e){return C(e)?h:b(e)}function S(e,t={}){return b(e)||b(t.modelSourceLanguage)||`en`}function C(e){return typeof e==`string`&&w(e)===h}function w(e){return e.trim().replace(/_/g,`-`).toLowerCase()}function T(e){return e===`webgpu`||e===`wasm`||e===`auto`?e:`auto`}function ee(e){let t=e&&typeof e==`object`?e:{};return{annotationBodies:typeof t.annotationBodies==`boolean`?t.annotationBodies:g.annotationBodies,canvasLabels:typeof t.canvasLabels==`boolean`?t.canvasLabels:g.canvasLabels}}function E(e,t,n){let r={vault:e,options:n,occurrences:[],visited:new Set};I(r,t);let i=new Map;for(let e of r.occurrences){let t=k(e.sourceText);if(!t)continue;let n=j(t,e.sourceLanguage,e.targetLanguage,e.valueFormat),r=i.get(n);if(r){r.occurrences.push(e),r.status=_e(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=ve(e.status)-ve(t.status);return n===0?e.sourceText.localeCompare(t.sourceText):n})}function D(e,t){let n={vault:e,languages:new Map,visited:new Set};return L(n,t),Array.from(n.languages.values()).sort((e,t)=>ye(e).localeCompare(ye(t)))}function O(e,t,n,r=D(e,t).map(e=>e.language)){return r.filter(e=>!!b(e)).map(r=>{let i={language:r,total:0,missing:0,existing:0,suggested:0,skipped:0,stale:0};for(let a of E(e,t,{...n,targetLanguage:r}))i.total+=1,i[a.status]+=1;return i})}function k(e){return e.replace(/\s+/g,` `).trim()}function A(e){return k(e)}function j(e,t,n,r){return`${t}:${n}:${r}:${e.toLowerCase()}`}function te(e,t){if(!e)return[];if(typeof e==`string`)return e.trim()?[{sourceMapLanguage:t,sourceIndex:0,sourceText:e}]:[];let n=N(e,t);if(n.length)return n.map((e,n)=>({sourceMapLanguage:t,sourceIndex:n,sourceText:e})).filter(e=>k(e.sourceText));let r=b(t);if(r){let n=Object.keys(e).find(e=>e!==t&&b(e)===r);if(n)return N(e,n).map((e,t)=>({sourceMapLanguage:n,sourceIndex:t,sourceText:e})).filter(e=>k(e.sourceText))}return N(e,`none`).map((e,t)=>({sourceMapLanguage:`none`,sourceIndex:t,sourceText:e})).filter(e=>k(e.sourceText))}function M(e,t,n){return e?typeof e==`string`?t===`none`||n===0?e:``:N(e,t)[n]||``:``}function N(e,t){let n=e[t];return Array.isArray(n)?n.filter(e=>typeof e==`string`):[]}function P(e,t,n){let r=M(e,t,n);if(k(r))return r;if(!e||typeof e==`string`)return``;let i=b(t);if(i)for(let r of Object.keys(e)){if(r===t||b(r)!==i)continue;let a=M(e,r,n);if(k(a))return a}return N(e,t).find(e=>k(e))||``}function F(e){return/<\/?[a-z][\s\S]*>/i.test(e)}function I(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=W(e.vault,t);if(r){ie(e,r),ae(e,r),oe(e,r);for(let t of U(r.provider,`Agent`))I(e,t);switch(r.type){case`Manifest`:for(let t of U(r.items,`Canvas`))I(e,t);for(let t of U(r.structures,`Range`))I(e,t);break;case`Canvas`:for(let t of[...U(r.items,`AnnotationPage`),...U(r.annotations,`AnnotationPage`)])I(e,t);break;case`Range`:for(let t of U(r.items))I(e,t);break;case`AnnotationPage`:for(let t of U(r.items,`Annotation`))I(e,t);break;case`Annotation`:se(e,r);break}}}function L(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=W(e.vault,t);if(r){R(e,r);for(let t of U(r.provider,`Agent`))L(e,t);switch(r.type){case`Manifest`:for(let t of U(r.items,`Canvas`))L(e,t);for(let t of U(r.structures,`Range`))L(e,t);break;case`Canvas`:for(let t of[...U(r.items,`AnnotationPage`),...U(r.annotations,`AnnotationPage`)])L(e,t);break;case`Range`:for(let t of U(r.items))L(e,t);break;case`AnnotationPage`:for(let t of U(r.items,`Annotation`))L(e,t);break;case`Annotation`:for(let t of U(r.body,`ContentResource`))L(e,t);break;case`Choice`:for(let t of U(r.items,`ContentResource`))L(e,t);break}}}function R(e,t){for(let n of z(t))typeof n==`string`&&re(e,n,1)}function z(e){let n=new Set;try{for(let r of(0,t.getAvailableLanguagesFromResource)(e))typeof r==`string`&&n.add(r)}catch{}for(let t of ne(e))n.add(t);return Array.from(n)}function ne(e){let t=new Set;if(B(t,e?.label),B(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)&&(B(t,n.label),B(t,n.value)),Array.isArray(e?.metadata))for(let n of e.metadata)B(t,n?.label),B(t,n?.value);return Array.from(t)}function B(e,t){if(!(!t||typeof t==`string`))for(let[n,r]of Object.entries(t))Array.isArray(r)&&r.some(e=>typeof e==`string`&&k(e))&&e.add(n)}function re(e,t,n){let r=x(t);if(!r)return;let i=w(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 ie(e,t,n){let r=n||G(t);V(e,{path:{kind:`resource-language-map`,resource:r,property:`label`},resource:r,propertyLabel:`Label`,value:t.label}),V(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||G(t);r.forEach((t,n)=>{V(e,{path:{kind:`metadata-language-map`,resource:i,metadataIndex:n,field:`label`},resource:i,propertyLabel:`Metadata ${n+1} label`,value:t?.label}),V(e,{path:{kind:`metadata-language-map`,resource:i,metadataIndex:n,field:`value`},resource:i,propertyLabel:`Metadata ${n+1} value`,value:t?.value})})}function oe(e,t,n){let r=t.requiredStatement;if(!r)return;let i=n||G(t);V(e,{path:{kind:`required-statement-language-map`,resource:i,field:`label`},resource:i,propertyLabel:`Required statement label`,value:r.label}),V(e,{path:{kind:`required-statement-language-map`,resource:i,field:`value`},resource:i,propertyLabel:`Required statement value`,value:r.value})}function se(e,t){let n={id:t.id,type:`Annotation`},r=le(e.vault,t);for(let{ref:t,resource:n}of r){let r={...t,label:ge(n,n.id||t.id)};ie(e,n,r),ae(e,n,r),oe(e,n,r)}if(e.options.contentFilters?.annotationBodies===!1)return;let i=r.filter(e=>H(e.resource));for(let{ref:t,resource:r,choice:a}of i){if(!pe(r,e.options.sourceLanguage))continue;let o=typeof r.value==`string`?r.value:``;if(!k(o))continue;let s=de(i.filter(e=>fe(a,e)),e.options.targetLanguage),c=typeof s?.resource.value==`string`?s.resource.value:``;e.occurrences.push({id:ce({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:ge(r,r.id||t.id)},propertyLabel:`Annotation body`,sourceLanguage:e.options.sourceLanguage,sourceMapLanguage:he(r.language,e.options.sourceLanguage),targetLanguage:e.options.targetLanguage,sourceIndex:0,sourceText:o,targetText:c,valueFormat:r.format===`text/html`||F(o)?`html`:`text`,sourceFingerprint:A(o),status:k(c)?`existing`:`missing`})}}function V(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=te(t.value,e.options.sourceLanguage);for(let r of n){let n=P(t.value,e.options.targetLanguage,r.sourceIndex);e.occurrences.push({id:ce(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:F(r.sourceText)?`html`:`text`,sourceFingerprint:A(r.sourceText),status:k(n)?`existing`:`missing`})}}function ce(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 le(e,t){let n=[];for(let r of U(t.body,`ContentResource`))ue(e,r,n);return n}function ue(e,t,n,r){let i=W(e,t);if(i&&(n.push({ref:t,resource:i,choice:r}),i.type===`Choice`))for(let r of U(i.items,`ContentResource`))ue(e,r,n,t)}function de(e,t){return e.find(({resource:e})=>!H(e)||!k(String(e.value||``))?!1:me(e.language,t))}function fe(e,t){return(e?.id||``)===(t.choice?.id||``)}function pe(e,t){return!H(e)||typeof e.value!=`string`?!1:e.language?me(e.language,t):!0}function H(e){return e?.type===`TextualBody`||e?.type===`Text`}function me(e,t){let n=e=>e===t?!0:typeof e==`string`&&b(e)===b(t);return Array.isArray(e)?e.some(n):n(e)}function he(e,t){return Array.isArray(e)?typeof e[0]==`string`?e[0]:t:typeof e==`string`?e:t}function U(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 W(e,t){let n=e.get(t,{skipSelfReturn:!1});return n&&typeof n==`object`?n:null}function G(e){return{id:e.id,type:e.type,label:ge(e,e.id||e.type)}}function ge(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 _e(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 ve(e){switch(e){case`missing`:return 0;case`stale`:return 1;case`skipped`:return 2;case`suggested`:return 3;case`existing`:return 4}}function ye(e){return e.language}const K=`@manifest-editor/translation:config`;function be(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(K,{detail:{...e,resolve:r}}))})}function xe(e){return(0,i.jsx)(Se,{actionId:e})}function Se({actionId:t}){let[a,o]=(0,r.useState)(null),[s,c]=(0,r.useState)(v({}));(0,r.useEffect)(()=>{let e=e=>{let n=e.detail;n?.actionId===t&&(o(n),c(v(n.defaults)))};return window.addEventListener(K,e),()=>window.removeEventListener(K,e)},[t]),(0,r.useEffect)(()=>{if(!a?.signal)return;if(a.signal.aborted){o(null);return}let e=()=>o(null);return a.signal.addEventListener(`abort`,e,{once:!0}),()=>a.signal?.removeEventListener(`abort`,e)},[a]);let l=a?.detectedLanguages||[],u=(0,r.useMemo)(()=>l.map(e=>e.language),[l]);(0,r.useEffect)(()=>{!u.length||u.includes(s.sourceLanguage)||c(e=>u.includes(e.sourceLanguage)?e:v({...e,sourceLanguage:u[0]}))},[u.join(`|`),s.sourceLanguage]);let f=(0,r.useMemo)(()=>a?.getTargets?.(s)||a?.targets||[],[a,s]),p=(0,r.useMemo)(()=>f.filter(e=>e.status===`missing`).length,[f]),m=(0,r.useMemo)(()=>a?.getTargetLanguageProgress?.(s)||[],[a,s]),h=(0,r.useMemo)(()=>[{label:`Detected in manifest`,options:l.map(e=>({value:e.language,label:d(e.language)}))}],[l]),g=(0,r.useMemo)(()=>we(m),[m]),_=(e,t)=>{c(n=>v({...n,contentFilters:{...n.contentFilters,[e]:t}}))};if(!a)return null;let y=e=>{a.resolve(e===!1?!1:v(e)),o(null)},b=S(s.sourceLanguage,s)===s.targetLanguage,x=s.currentResourceOnly===!0&&!!a.currentResource,C=u.length===0||b||p===0;return(0,i.jsx)(n.Modal,{title:`Run translations`,onClose:()=>y(!1),className:`max-w-xl`,actions:(0,i.jsxs)(`div`,{className:`flex gap-2`,children:[(0,i.jsx)(`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:()=>y(!1),children:`Cancel`}),(0,i.jsx)(`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:C,onClick:()=>y(s),children:`Run translation`})]}),children:(0,i.jsxs)(`div`,{className:`flex flex-col gap-3 p-3 text-sm text-zinc-700`,children:[(0,i.jsxs)(`div`,{className:`flex flex-col gap-2 border-b border-zinc-100 pb-3`,children:[(0,i.jsxs)(`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:[(0,i.jsx)(Te,{label:`From`,value:s.sourceLanguage,groups:h,emptyLabel:`No detected languages`,onChange:e=>c(t=>v({...t,sourceLanguage:e}))}),(0,i.jsx)(`span`,{className:`mb-[7px] text-zinc-300 select-none`,children:`→`}),(0,i.jsx)(Te,{label:`To`,value:s.targetLanguage,groups:g,onChange:e=>c(t=>v({...t,targetLanguage:e}))}),(0,i.jsxs)(`label`,{className:`col-span-3 grid shrink-0 gap-1 sm:col-span-1`,children:[(0,i.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-wide text-zinc-400`,children:`Mode`}),(0,i.jsxs)(`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:s.runtime,onChange:e=>c(t=>v({...t,runtime:e.target.value})),children:[(0,i.jsx)(`option`,{value:`auto`,children:`Auto`}),(0,i.jsx)(`option`,{value:`webgpu`,children:`WebGPU`}),(0,i.jsx)(`option`,{value:`wasm`,children:`WASM`})]})]})]}),(0,i.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,i.jsxs)(`label`,{className:`flex items-center gap-2 text-xs ${a.currentResource?`text-zinc-600`:`text-zinc-300`}`,title:a.currentResource?.label||a.currentResource?.id,children:[(0,i.jsx)(`input`,{type:`checkbox`,className:`h-3.5 w-3.5 rounded border-zinc-300`,checked:x,disabled:!a.currentResource,onChange:e=>c(t=>v({...t,currentResourceOnly:e.currentTarget.checked}))}),`Current resource`]}),(0,i.jsx)(Ce,{filters:s.contentFilters,onChange:_})]})]}),u.length===0?(0,i.jsx)(`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,b?(0,i.jsx)(`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,(0,i.jsxs)(`div`,{className:`rounded border border-zinc-200 bg-zinc-50 px-2.5 py-2`,children:[(0,i.jsxs)(`div`,{className:`text-xs text-zinc-500`,children:[p>0?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(`span`,{className:`font-semibold text-amber-600`,children:p}),` missing`]}):(0,i.jsx)(`span`,{className:`text-zinc-400`,children:`No missing strings`}),f.length>0?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(`span`,{className:`text-zinc-300`,children:` · `}),(0,i.jsx)(`span`,{children:f.length}),` total`]}):null]}),(0,i.jsxs)(`div`,{className:`mt-1 text-xs text-zinc-500`,children:[`Missing target-language values will be filled using `,e.f,`. Existing target values are left unchanged.`]})]})]})})}function Ce({filters:e,onChange:t}){return(0,i.jsxs)(`details`,{className:`relative shrink-0`,children:[(0,i.jsx)(`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`}),(0,i.jsxs)(`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:[(0,i.jsxs)(`label`,{className:`flex items-center gap-2`,children:[(0,i.jsx)(`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`]}),(0,i.jsxs)(`label`,{className:`flex items-center gap-2`,children:[(0,i.jsx)(`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 we(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)} (${f(e)})`}))}),n.push({label:`All languages`,options:c.filter(e=>!t.has(e.code)).map(e=>({value:e.code,label:e.label}))}),n}function Te({label:e,value:t,groups:n,emptyLabel:r=`No languages available`,onChange:a}){let o=n.some(e=>e.options.length),s=n.some(e=>e.options.some(e=>e.value===t));return(0,i.jsxs)(`label`,{className:`grid min-w-0 flex-1 gap-1`,children:[(0,i.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-wide text-zinc-400`,children:e}),(0,i.jsxs)(`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:!o,onChange:e=>a(e.target.value),children:[s?null:(0,i.jsx)(`option`,{value:t,disabled:!0,children:o?d(t):r}),n.map(e=>e.options.length?(0,i.jsx)(`optgroup`,{label:e.label,children:e.options.map(e=>(0,i.jsx)(`option`,{value:e.value,children:e.label},e.value))},e.label):null)]})]})}const Ee=new Set([`br`,`hr`,`img`,`input`,`meta`,`link`,`area`,`base`,`col`,`embed`,`param`,`source`,`track`,`wbr`]);async function De(e,t){let n=Oe(e);if(!n||!ke(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 Oe(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 ke(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(`/>`)||Ee.has(i)||t.push(i)}return t.length===0}function Ae(){return typeof crypto<`u`&&`randomUUID`in crypto?crypto.randomUUID():`translation-${Date.now()}-${Math.random().toString(16).slice(2)}`}function je(t={}){let n=t.worker??new Worker(new URL(`./translation-worker.js`,require(`url`).pathToFileURL(__filename).href),{type:`module`}),r=new Set,i=new Map,a=!1,o=e=>{for(let t of r)t(e)},s=e=>{for(let t of i.values())t.reject(e);i.clear()};n.addEventListener(`message`,e=>{let t=e.data;if(t.kind===`event`){o(t.payload);return}let n=i.get(t.requestId);if(n){if(i.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)}}),n.addEventListener(`error`,e=>{let t=Error(e.message||`The translation worker crashed.`);t.name=`worker_failed`,o({type:`error`,code:`worker_failed`,message:t.message,recoverable:!1}),s(t)});let c=(t,r)=>{if(a)return Promise.reject(Error(`The translation worker client has been terminated.`));let o=Ae(),s=t===`translate`?e.o(o,r.payload):t===`dispose`?e.t(o):e.i(o,r.payload);return new Promise((e,r)=>{i.set(o,{command:t,resolve:t=>e(t),reject:r}),n.postMessage(s)})};return{async preload(e){await c(`preload`,{payload:e})},translate(e){return c(`translate`,{payload:e})},onEvent(e){return r.add(e),()=>{r.delete(e)}},terminate(){a||(a=!0,n.postMessage(e.t(Ae())),n.terminate(),s(Error(`The translation worker client has been terminated.`)))}}}const Me=`@manifest-editor/translation:results`;function Ne(e,t){typeof window>`u`||window.dispatchEvent(new CustomEvent(Me,{detail:{actionId:e,result:t}}))}function Pe(e){return(0,i.jsx)(Fe,{actionId:e})}function Fe({actionId:e}){let[t,a]=(0,r.useState)(null);return(0,r.useEffect)(()=>{let t=t=>{let n=t.detail;n?.actionId===e&&n.result&&a(n.result)};return window.addEventListener(Me,t),()=>window.removeEventListener(Me,t)},[e]),t?(0,i.jsx)(n.Modal,{title:`Translation results`,onClose:()=>a(null),className:`max-w-4xl`,children:(0,i.jsxs)(`div`,{className:`flex min-h-0 flex-col gap-4 p-4 text-sm text-zinc-700`,children:[(0,i.jsxs)(`div`,{className:`grid grid-cols-3 gap-2 sm:grid-cols-6`,children:[(0,i.jsx)(q,{label:`Strings`,value:t.total}),(0,i.jsx)(q,{label:`Translated`,value:t.translated}),(0,i.jsx)(q,{label:`Applied`,value:t.applied}),(0,i.jsx)(q,{label:`Existing`,value:t.existing}),(0,i.jsx)(q,{label:`Stale`,value:t.stale}),(0,i.jsx)(q,{label:`Skipped`,value:t.skipped+t.errors})]}),t.translations.length?(0,i.jsxs)(`div`,{className:`rounded border border-zinc-200`,children:[(0,i.jsx)(`div`,{className:`border-b border-zinc-200 bg-zinc-50 px-3 py-2 font-medium`,children:`Translated strings`}),(0,i.jsx)(`div`,{className:`max-h-64 overflow-auto`,children:t.translations.map(e=>(0,i.jsxs)(`div`,{className:`grid gap-1.5 border-b border-zinc-100 px-3 py-2.5 last:border-0`,children:[(0,i.jsx)(`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}),(0,i.jsx)(`div`,{className:`text-xs font-medium text-zinc-900 line-clamp-2`,children:e.translationText}),(0,i.jsxs)(`div`,{className:`text-[11px] text-zinc-400`,children:[e.applied,` occurrence`,e.applied===1?``:`s`]})]},e.key))})]}):null,t.skippedTargets.length?(0,i.jsxs)(`div`,{className:`rounded border border-zinc-200`,children:[(0,i.jsx)(`div`,{className:`border-b border-zinc-200 bg-zinc-50 px-3 py-2 font-medium`,children:`Skipped strings`}),(0,i.jsx)(`div`,{className:`max-h-56 overflow-auto`,children:t.skippedTargets.map(e=>(0,i.jsxs)(`div`,{className:`grid gap-1 border-b border-zinc-100 px-3 py-2 last:border-0`,children:[(0,i.jsx)(`div`,{className:`line-clamp-2 font-medium text-zinc-900`,children:e.sourceText}),(0,i.jsx)(`div`,{className:`text-zinc-500`,children:e.reason})]},`${e.key}-${e.reason}`))})]}):null]})}):null}function q({label:e,value:t}){return(0,i.jsxs)(`div`,{className:`rounded border border-zinc-200 bg-zinc-50 px-2.5 py-2`,children:[(0,i.jsx)(`div`,{className:`text-base font-semibold text-zinc-900`,children:t}),(0,i.jsx)(`div`,{className:`text-[10px] uppercase tracking-wide text-zinc-400`,children:e})]})}function J(e,t){let n=[],r=[],i=[];for(let a of t.occurrences){if(A(Le(e.vault,a))!==a.sourceFingerprint){i.push(a);continue}if(k(We(e.vault,a))){r.push(a);continue}n.push(a)}return{writable:n,existing:r,stale:i}}function Ie(e,t,n){let r=n.trim();if(!r)return!1;switch(t.path.kind){case`resource-language-map`:return ze(e.vault,t.path.resource,t.path.property,t,r),!0;case`metadata-language-map`:return Be(e.vault,t.path,t,r),!0;case`required-statement-language-map`:return Ve(e.vault,t.path,t,r),!0;case`textual-body`:return He(e.vault,t,r),!0}}function Le(e,t){if(t.path.kind===`textual-body`){let n=Y(e,t.path.body);return typeof n?.value==`string`?n.value:``}return M(Ue(e,t.path),t.sourceMapLanguage,t.sourceIndex)}function Re(e,t){if(t.path.kind===`textual-body`){let n=qe(e,t);return typeof n?.value==`string`?n.value:``}return M(Ue(e,t.path),t.targetLanguage,t.sourceIndex)}function ze(e,t,n,r,i){let a=Ge(Y(e,t)?.[n],r.sourceMapLanguage,r.sourceText,r.targetLanguage,r.sourceIndex,i);e.modifyEntityField(t,n,a)}function Be(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]:Ge(o[t.field],n.sourceMapLanguage,n.sourceText,n.targetLanguage,n.sourceIndex,r)},e.modifyEntityField(t.resource,`metadata`,a)}function Ve(e,t,n,r){let i=Y(e,t.resource)?.requiredStatement||{},a={label:{none:[``]},value:{none:[``]},...i,[t.field]:Ge(i[t.field],n.sourceMapLanguage,n.sourceText,n.targetLanguage,n.sourceIndex,r)};e.modifyEntityField(t.resource,`requiredStatement`,a)}function He(e,t,n){if(t.path.kind!==`textual-body`)return;let r=qe(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),o=Qe(t),s={id:o,type:`ContentResource`};if(t.path.choice){e.dispatch((0,a.importEntities)({entities:{ContentResource:{[o]:{id:o,type:`TextualBody`,format:i?.format||(t.valueFormat===`html`?`text/html`:`text/plain`),value:n,language:t.targetLanguage}}}}));let r=Y(e,t.path.choice),c=Array.isArray(r?.items)?r.items:[];e.modifyEntityField(t.path.choice,`items`,[...c,s]);return}e.dispatch((0,a.batchActions)({actions:[(0,a.importEntities)({entities:{ContentResource:{[o]:{id:o,type:`TextualBody`,format:i?.format||(t.valueFormat===`html`?`text/html`:`text/plain`),value:n,language:t.targetLanguage}}}}),(0,a.addReference)({id:t.path.annotation.id,type:`Annotation`,key:`body`,reference:s})]}))}function Ue(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 We(e,t){return t.path.kind===`textual-body`?Re(e,t):P(Ue(e,t.path),t.targetLanguage,t.sourceIndex)}function Ge(e,t,n,r,i,a){let o=Ke(e,t,n),s=[...o[r]||[]];for(;s.length<=i;)s.push(``);return s[i]=a,o[r]=s,o}function Ke(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 qe(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 Je(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:$e(e.language,t.targetLanguage))?.resource||null}function Je(e,t){let n=[];for(let r of Ze(t?.body,`ContentResource`))Ye(e,r,n);return n.filter(({resource:e})=>Xe(e))}function Ye(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 Ze(i.items,`ContentResource`))Ye(e,r,n,t)}function Xe(e){return e?.type===`TextualBody`||e?.type===`Text`}function Ze(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 Qe(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`${et(t)}/translation/${encodeURIComponent(e.targetLanguage)}/${tt(n)}`}function $e(e,t){let n=e=>e===t?!0:typeof e==`string`&&b(e)===b(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 et(e){return e.endsWith(`/`)?e.slice(0,-1):e}function tt(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 rt(e,t){nt.set(e,v(t))}function it(t={}){let n=t.createClient||je,r=t.collectTargets||E,a=t.requestConfig||ot,o=t.translateHtml||De,s=null,c=()=>(s||=n(),s),l=(e=s)=>{e&&(e.terminate(),s===e&&(s=null))};return{id:e.l,label:`Run translation`,summary:`Translate missing manifest strings with M2M100`,section:`Translations`,order:30,resourceTypes:[`Manifest`],resumable:!0,render:e=>(0,i.jsxs)(i.Fragment,{children:[xe(e.definition.id),Pe(e.definition.id)]}),onResults:e=>Ne(e.definition.id,e.instance?.result),supports:e=>e.vault.get(e.target)?.type===`Manifest`,prepare:async t=>{let n=t.plugins.getSettings(e.p),i=_(t.config,n),o=r(t.vault,X(t,i),i),s=nt.get(t.instanceKey)||await a(t,o,i);if(nt.delete(t.instanceKey),s===!1)return!1;let c=v(s);return at(r(t.vault,X(t,c),c),c)},run:async e=>{let t=st(e.plan),n=v(t?.options||_(e.config)),r=e.tasks.getAll(),i=e.tasks.getPending(),a={vault:e.vault};if(e.setActionLabel(`Running translation`),!r.length)return e.setActionStatus(`running`,`No translatable strings found`),e.setActionProgress({current:0,total:0,label:`No strings`}),ut(0);if(i.length){let t=c(),r=t.onEvent(t=>ft(e,t)),i=()=>l(t);e.signal.addEventListener(`abort`,i,{once:!0});try{ht(e.signal),e.setActionStatus(`running`,`Loading translation model`),await t.preload({runtime:n.runtime}),await e.tasks.runEach(async(r,{index:i,total:s})=>{ht(e.signal);let c=r.input;if(!c)return Z(`Missing translation target`,r.id,``,0,0);e.appendActionLog(`Translating ${i+1}/${s}`,`info`,{key:c.key,sourceLanguage:c.sourceLanguage,targetLanguage:c.targetLanguage});let u=J(a,c);if(!u.writable.length)return Z(dt(u.existing.length,u.stale.length),c.key,c.sourceText,u.existing.length,u.stale.length);let d;try{d=await ct(t,c,n,o)}catch(e){throw gt(e)&&l(t),e}if(!d)return Z(`HTML could not be parsed for safe translation`,c.key,c.sourceText,u.existing.length,u.stale.length);let f=0,p=u.existing.length,m=u.stale.length;for(let e of u.writable){let t=J(a,{...c,occurrences:[e]});if(t.stale.length){m+=t.stale.length;continue}if(t.existing.length){p+=t.existing.length;continue}Ie(a,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 l(t),e}finally{e.signal.removeEventListener(`abort`,i),r()}}let s=lt(t?.totalTargets||r.length,e.tasks.getAll());return e.setActionStatus(`running`,`Applied ${s.applied} translations`),e.setActionProgress({current:s.total,total:s.total,label:`Translations complete`}),s}}}function at(e,t){return{version:1,data:{options:v(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:mt(e),target:pt(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 ot(e,t,n){let r=D(e.vault,e.target),i=r.map(e=>e.language);return be({actionId:e.definition.id,instanceKey:e.instanceKey,defaults:n,targets:t,availableLanguages:y(e.config),detectedLanguages:r,currentResource:e.currentCanvas?{id:e.currentCanvas.id,type:e.currentCanvas.type,label:e.currentCanvas.label}:void 0,getTargets:t=>E(e.vault,X(e,v(t)),v(t)),getTargetLanguageProgress:t=>O(e.vault,X(e,v(t)),v(t),i),signal:e.signal})}function st(e){let t=e?.data;return t?.options?t:null}async function ct(e,t,n,r){let i=async r=>(await e.translate({text:r,sourceLanguage:S(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 lt(e,t){let n=ut(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 ut(e){return{total:e,translated:0,applied:0,skipped:0,existing:0,stale:0,errors:0,translations:[],skippedTargets:[]}}function dt(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 ft(e,t){switch(t.type){case`model-progress`:e.setActionStatus(`running`,`Loading model ${Math.round(t.progress)}% (${_t(t.loaded)} / ${_t(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 pt(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 mt(e){let t=e.normalisedSourceText||e.sourceText||`Translation string`;return t.length>80?`${t.slice(0,77)}...`:t}function ht(e){if(e.aborted)throw Error(`Translation cancelled.`)}function gt(e){return e instanceof Error&&(e.name===`model_load_failed`||e.name===`worker_failed`)}function _t(e){return e?`${Math.round(e/1024/1024)} MB`:`0 MB`}const vt=`language`,yt=[{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 bt(){return{id:e.d,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=>Ct(Dt(e)),run:async e=>{let t=e.tasks.getAll(),n=e.tasks.getPending();if(e.setActionLabel(`Tagging canvas languages`),!t.length){let t=Tt(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})=>{Rt(e.signal);let i=t.input,a=t.target?.id||i?.canvasId||t.id,o=Ot(e,a),s=Ft(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),wt(t)}let c=kt(e,o),l=St(c);if(!l){e.tags.removeTag({id:a,type:`Canvas`},vt);let t={canvasId:a,canvasLabel:s,reason:`No supported language detected`};return e.appendActionLog(`Skipped language tag`,`warn`,t),wt(t)}let u=xt(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=Et(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 xt(e){let t=It(e);return{type:vt,id:e,label:e,backgroundColor:t.backgroundColor,textColor:t.textColor}}function St(e){return e[0]||null}function Ct(e){return{version:1,tasks:e.map((e,t)=>{let n=e?.id||`canvas-${t+1}`,r=Ft(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 wt(e){return{taskStatus:`skipped`,statusText:e.reason,result:{type:`skipped`,skip:e}}}function Tt(e){return{total:e,tagged:0,skipped:0,counts:{},tags:[],skippedCanvases:[]}}function Et(e){let t=Tt(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 Dt(e){let t=e.vault.get(e.target);return t?.items?(e.vault.get(t.items)||[]).filter(Boolean):[]}function Ot(e,t){return e.vault.get({id:t,type:`Canvas`})}function kt(e,t){let n=jt(e,t)||t,r=At(n),i=[],a=new Set;for(let e of r){let t=typeof e==`string`?e:``,n=x(t);!n||a.has(n)||(a.add(n),i.push({language:n,count:1,iiifLanguages:[t]}))}return Mt(i,n)}function At(e){let n=new Set;for(let r of(0,t.getAvailableLanguagesFromResource)(e))typeof r==`string`&&n.add(r);$(n,e?.label),$(n,e?.summary);let r=e?.requiredStatement;if(r&&!Array.isArray(r)&&($(n,r.label),$(n,r.value)),Array.isArray(e?.metadata))for(let t of e.metadata)$(n,t?.label),$(n,t?.value);return Array.from(n)}function jt(e,t){if(!t?.id)return null;try{return e.vault.toPresentation3({id:t.id,type:`Canvas`})}catch{return null}}function Mt(e,t){if(e.length<2||Nt(t))return e;let n=Pt(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 Nt(e){return!!(Array.isArray(e?.items)&&e.items.length||Array.isArray(e?.annotations)&&e.annotations.length)}function Pt(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=x(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 Ft(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 It(e){return yt[Math.abs(Lt(e))%yt.length]||yt[0]}function Lt(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 Rt(e){if(e.aborted)throw Error(`Language tagging cancelled.`)}const zt={id:e.c,label:`Translations`,icon:(0,i.jsx)(Bt,{}),render:()=>(0,i.jsx)(Vt,{})};function Bt(e){return(0,i.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`1em`,height:`1em`,viewBox:`0 0 24 24`,...e,children:(0,i.jsx)(`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 Vt(){let t=(0,o.useConfig)(),a=(0,o.useAppResource)(),c=Wt(a),l=(0,o.usePluginRuntimeApi)().getSettings(e.p),u=(0,r.useMemo)(()=>_(t,l),[t,l]),[f,p]=(0,r.useState)(u),[m,h]=(0,r.useState)(`missing`);(0,r.useEffect)(()=>{p(u)},[u.sourceLanguage,u.targetLanguage,u.runtime]);let g=(0,s.useVaultSelector)((e,t)=>D(t,a),[a.id,a.type]),y=(0,r.useMemo)(()=>g.map(e=>e.language),[g]),x=y.join(`|`);(0,r.useEffect)(()=>{!y.length||y.includes(f.sourceLanguage)||p(e=>y.includes(e.sourceLanguage)?e:v({...e,sourceLanguage:y[0]}))},[x,f.sourceLanguage]);let w=(0,s.useVaultSelector)((e,t)=>E(t,a,f),[a.id,a.type,f.sourceLanguage,f.targetLanguage,f.runtime,f.contentFilters.annotationBodies,f.contentFilters.canvasLabels]),T=(0,s.useVaultSelector)((e,t)=>E(t,c,f),[c.id,c.type,f.sourceLanguage,f.targetLanguage,f.runtime,f.contentFilters.annotationBodies,f.contentFilters.canvasLabels]),ee=(0,s.useVaultSelector)((e,t)=>O(t,a,f,y),[a.id,a.type,f.sourceLanguage,f.runtime,f.contentFilters.annotationBodies,f.contentFilters.canvasLabels,x]),k=(0,s.useVault)(),A=Ht(),j=(0,o.useBackgroundActionsStoreApi)(),te=(0,r.useMemo)(()=>[{label:`Detected in manifest`,options:g.map(e=>({value:e.language,label:d(e.language)}))}],[g]),M=(0,r.useMemo)(()=>qt(ee),[ee]),N=(0,r.useMemo)(()=>(t.i18n?.availableLanguages||[]).filter(e=>!b(e)&&!C(e)),[t.i18n?.availableLanguages]),P=(0,r.useMemo)(()=>en(w),[w]),F=(0,r.useMemo)(()=>en(T),[T]),I=A?.instance?.status===`preparing`||A?.instance?.status===`running`,L=S(f.sourceLanguage,f)===f.targetLanguage,R=!!A&&!I&&y.length>0&&!L&&P.missing>0,z=e=>{p(t=>v({...t,...e}))},ne=(e,t)=>{p(n=>v({...n,contentFilters:{...n.contentFilters,[e]:t}}))},B=()=>{!A||!R||(rt(A.instanceKey,f),(0,o.runBackgroundAction)({store:j,context:A.context}))},re=(0,r.useMemo)(()=>m===`current`?T:m===`all`?w:w.filter(e=>e.status===m),[w,T,m]),ie=[{key:`all`,label:`All`,count:w.length},{key:`current`,label:`Current resource`,count:F.total,title:`Current ${c.type.toLowerCase()}`},{key:`missing`,label:`Missing`,count:P.missing},{key:`existing`,label:`Done`,count:P.existing},{key:`stale`,label:`Stale`,count:P.stale}];return(0,i.jsxs)(n.Sidebar,{children:[(0,i.jsx)(n.SidebarHeader,{title:`Translations`}),(0,i.jsxs)(n.SidebarContent,{className:`flex min-h-0 flex-col gap-0 p-0`,children:[(0,i.jsxs)(`div`,{className:`flex flex-col gap-2 border-b border-zinc-100 p-3`,children:[(0,i.jsxs)(`div`,{className:`flex items-end gap-1.5`,children:[(0,i.jsx)(Jt,{label:`From`,value:f.sourceLanguage,groups:te,emptyLabel:`No detected languages`,onChange:e=>z({sourceLanguage:e})}),(0,i.jsx)(`span`,{className:`mb-[7px] text-zinc-300 select-none`,children:`→`}),(0,i.jsx)(Jt,{label:`To`,value:f.targetLanguage,groups:M,onChange:e=>z({targetLanguage:e})}),(0,i.jsxs)(`label`,{className:`grid shrink-0 gap-1`,children:[(0,i.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-wide text-zinc-400`,children:`Mode`}),(0,i.jsxs)(`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:f.runtime,onChange:e=>z({runtime:e.target.value}),children:[(0,i.jsx)(`option`,{value:`auto`,children:`Auto`}),(0,i.jsx)(`option`,{value:`webgpu`,children:`WebGPU`}),(0,i.jsx)(`option`,{value:`wasm`,children:`WASM`})]})]})]}),N.length?(0,i.jsxs)(`div`,{className:`rounded border border-amber-200 bg-amber-50 px-2.5 py-2 text-xs text-amber-800`,children:[`Unsupported languages: `,N.join(`, `)]}):null,y.length===0?(0,i.jsx)(`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,L?(0,i.jsx)(`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,(0,i.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,i.jsxs)(`div`,{className:`min-w-[7rem] flex-1 text-xs text-zinc-500`,children:[P.missing>0&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(`span`,{className:`font-semibold text-amber-600`,children:P.missing}),` missing`]}),P.missing>0&&P.existing>0&&(0,i.jsx)(`span`,{className:`text-zinc-300`,children:` · `}),P.existing>0&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(`span`,{className:`font-semibold text-green-600`,children:P.existing}),` done`]}),P.stale>0&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(`span`,{className:`text-zinc-300`,children:` · `}),(0,i.jsx)(`span`,{className:`font-semibold text-red-500`,children:P.stale}),` stale`]}),w.length===0&&(0,i.jsx)(`span`,{className:`text-zinc-400`,children:`No strings found`})]}),(0,i.jsx)(`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:!R,onClick:B,title:R?`Translate ${P.missing} missing string${P.missing===1?``:`s`}`:void 0,children:I?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)($t,{className:`h-3 w-3 animate-spin`}),`Running…`]}):(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(Qt,{className:`h-3 w-3`}),`Translate`]})}),(0,i.jsx)(Kt,{filters:f.contentFilters,onChange:ne})]})]}),w.length>0&&(0,i.jsx)(`div`,{className:`flex shrink-0 overflow-x-auto border-b border-zinc-100 bg-zinc-50/50`,children:ie.filter(e=>e.key===`all`||e.key===`current`||e.count>0).map(e=>(0,i.jsxs)(`button`,{type:`button`,className:`flex shrink-0 items-center gap-1 whitespace-nowrap px-3 py-2 text-xs font-medium transition-colors ${m===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:()=>h(e.key),children:[e.label,(0,i.jsx)(`span`,{className:`text-[10px] ${m===e.key?`text-me-primary-400`:`text-zinc-400`}`,children:e.count})]},e.key))}),(0,i.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:re.length?re.map(e=>(0,i.jsx)(Gt,{target:e,onSave:t=>{for(let n of e.occurrences)Ie({vault:k},n,t)}},e.key)):(0,i.jsx)(`div`,{className:`px-4 py-8 text-center text-xs text-zinc-400`,children:w.length===0?`No translatable strings found.`:m===`current`?`No current resource strings.`:`No ${m} strings.`})})]})]})}function Ht(){return Ut(e.l)}function Ut(e){let t=(0,o.useAvailableBackgroundActions)();return(0,r.useMemo)(()=>t.flatMap(e=>e.actions).find(t=>t.definition.id===e)||null,[t,e])}function Wt(e){let t=(0,o.useEditingResource)(),n=(0,o.useEditingResourceStack)();return(0,r.useMemo)(()=>{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 Gt({target:e,onSave:t}){let n=e.occurrences[0],a=tn(e.occurrences),[o,s]=(0,r.useState)(a),c=e.status===`existing`||e.status===`suggested`,[l,u]=(0,r.useState)(!c);return(0,r.useEffect)(()=>{s(a)},[a]),(0,i.jsxs)(`div`,{className:`border-b border-zinc-100 last:border-0 ${c&&!l?`opacity-60`:``}`,children:[(0,i.jsxs)(`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:()=>u(e=>!e),children:[(0,i.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,i.jsx)(`span`,{className:`block truncate text-xs font-semibold text-zinc-800`,children:n?.resource.label||n?.resource.id}),(0,i.jsxs)(`span`,{className:`text-[11px] text-zinc-400`,children:[n?.propertyLabel||`String`,e.occurrences.length>1?` · ${e.occurrences.length}×`:``]})]}),(0,i.jsx)(Xt,{status:e.status}),(0,i.jsx)(Zt,{expanded:l})]}),l&&(0,i.jsxs)(`div`,{className:`px-3 pb-3`,children:[(0,i.jsxs)(`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:[(0,i.jsx)(`div`,{className:`mb-1 text-[10px] font-semibold uppercase tracking-widest text-me-primary-400`,children:`Source`}),e.sourceText]}),(0,i.jsx)(`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:o,placeholder:`${d(e.targetLanguage)} translation…`,onChange:e=>s(e.target.value),onBlur:()=>{o.trim()!==a.trim()&&t(o)}})]})]})}function Kt({filters:e,onChange:t}){return(0,i.jsxs)(`details`,{className:`relative shrink-0`,children:[(0,i.jsx)(`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`}),(0,i.jsxs)(`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:[(0,i.jsxs)(`label`,{className:`flex items-center gap-2`,children:[(0,i.jsx)(`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`]}),(0,i.jsxs)(`label`,{className:`flex items-center gap-2`,children:[(0,i.jsx)(`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 qt(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)} (${f(e)})`}))}),n.push({label:`All languages`,options:c.filter(e=>!t.has(e.code)).map(e=>({value:e.code,label:e.label}))}),n}function Jt({label:e,value:t,groups:n,emptyLabel:r=`No languages available`,onChange:a}){let o=n.some(e=>e.options.length),s=n.some(e=>e.options.some(e=>e.value===t));return(0,i.jsxs)(`label`,{className:`grid min-w-0 flex-1 gap-1`,children:[(0,i.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-wide text-zinc-400`,children:e}),(0,i.jsxs)(`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:!o,onChange:e=>a(e.target.value),children:[s?null:(0,i.jsx)(`option`,{value:t,disabled:!0,children:o?d(t):r}),n.map(e=>e.options.length?(0,i.jsx)(`optgroup`,{label:e.label,children:e.options.map(e=>(0,i.jsx)(`option`,{value:e.value,children:e.label},e.value))},e.label):null)]})]})}const Yt={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 Xt({status:e}){let t=Yt[e]||Yt.skipped;return(0,i.jsxs)(`span`,{className:`flex shrink-0 items-center gap-1 text-[10px] font-medium ${t.text}`,children:[(0,i.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full ${t.dot}`}),t.label]})}function Zt({expanded:e}){return(0,i.jsx)(`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:(0,i.jsx)(`path`,{d:`M6 9l6 6 6-6`})})}function Qt({className:e}){return(0,i.jsx)(`svg`,{className:e,viewBox:`0 0 24 24`,fill:`currentColor`,children:(0,i.jsx)(`path`,{d:`M8 5v14l11-7z`})})}function $t({className:e}){return(0,i.jsxs)(`svg`,{className:e,viewBox:`0 0 24 24`,fill:`none`,children:[(0,i.jsx)(`circle`,{cx:`12`,cy:`12`,r:`9`,stroke:`currentColor`,strokeWidth:`2.5`,strokeOpacity:`0.3`}),(0,i.jsx)(`path`,{d:`M12 3a9 9 0 0 1 9 9`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`})]})}function en(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 tn(e){for(let t of e)if(t.targetText?.trim())return t.targetText;return``}var nn={id:e.p,label:`Translations`,description:`Review manifest strings and fill missing translations with M2M100.`,author:`Digirati`,official:!0,defaultEnabled:!1,tags:[`translation`,`i18n`,`automation`],supports:{apps:[`manifest-editor`],projectTypes:[`Manifest`]}};const rn={defaults:{runtimePreference:`auto`},fields:[{id:`defaultSourceLanguage`,label:`Default source language`,type:`text`,description:`Optional M2M100 source language code. Falls back to the editor default language.`,placeholder:`en`},{id:`defaultTargetLanguage`,label:`Default target language`,type:`text`,description:`Optional M2M100 target language code. Falls back to another configured editor language.`,placeholder:`nl`},{id:`runtimePreference`,label:`Runtime preference`,type:`select`,description:`WebGPU is attempted first in Auto mode, then WASM is used as a fallback.`,options:[{label:`Auto`,value:`auto`},{label:`WebGPU`,value:`webgpu`},{label:`WASM`,value:`wasm`}]}]},an=[zt],on=[it(),bt()];exports.M2M100_LANGUAGES=c,exports.TRANSLATIONS_LEFT_PANEL_ID=e.c,exports.TRANSLATION_ACTION_ID=e.l,exports.TRANSLATION_CACHE_KEY=e.u,exports.TRANSLATION_CONFIG_EVENT=K,exports.TRANSLATION_LANGUAGE_TAG_ACTION_ID=e.d,exports.TRANSLATION_LANGUAGE_TAG_TYPE=vt,exports.TRANSLATION_MODEL_ID=e.f,exports.TRANSLATION_NONE_LANGUAGE=h,exports.TRANSLATION_PLUGIN_ID=e.p,exports.TranslationsIcon=Bt,exports.backgroundActions=on,exports.collectDetectedManifestLanguages=D,exports.collectTranslationLanguageProgress=O,exports.collectTranslationTargets=E,exports.createDisposeRequest=e.t,exports.createErrorResponse=e.n,exports.createEventEnvelope=e.r,exports.createLanguageTag=xt,exports.createPreloadRequest=e.i,exports.createSuccessResponse=e.a,exports.createTranslateRequest=e.o,exports.createTranslationBackgroundAction=it,exports.createTranslationLanguageTagsBackgroundAction=bt,exports.createTranslationPlan=at,exports.createTranslationResultResponse=e.s,exports.createTranslationTargetKey=j,exports.createTranslationWorkerClient=je,exports.default=nn,exports.defaultTranslationContentFilters=g,exports.fingerprintTranslationText=A,exports.getDefaultRunOptions=_,exports.getLanguageLabel=d,exports.getLanguageMapSourceEntries=te,exports.getLanguageMapTargetText=P,exports.getLanguageProgressLabel=f,exports.getLanguageValueAt=M,exports.getLanguageValues=N,exports.getModelSourceLanguage=S,exports.getSupportedAvailableLanguages=y,exports.getWritableOccurrences=J,exports.isHtmlTranslationValue=F,exports.isNoLanguageCode=C,exports.isSupportedM2M100Language=u,exports.leftPanels=an,exports.normaliseLanguageCode=w,exports.normaliseRunOptions=v,exports.normaliseTranslationText=k,exports.openTranslationResults=Ne,exports.queueTranslationRunOptions=rt,exports.readOccurrenceSourceText=Le,exports.readOccurrenceTargetText=Re,exports.renderTranslationConfigModal=xe,exports.renderTranslationResults=Pe,exports.requestTranslationConfig=be,exports.resolveSourceLanguage=x,exports.resolveSupportedLanguage=b,exports.selectPrimaryDetectedLanguage=St,exports.settings=rn,exports.translatePreservingSimpleHtml=De,exports.translationsPanel=zt,exports.writeTranslationForOccurrence=Ie;
1
+ Object.defineProperty(exports,`__esModule`,{value:!0});const e=require(`./constants-D5kaKQHg.cjs`),t=require(`./protocol-B15qfxfT.cjs`),n=require(`./plugin-DcjqyREu.cjs`);let r=require(`@iiif/helpers/i18n`),i=require(`@manifest-editor/components`),a=require(`react`),o=require(`react/jsx-runtime`),s=require(`@iiif/helpers/vault/actions`),c=require(`@manifest-editor/shell`),l=require(`react-iiif-vault`);const u=[{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`}],d=new Set(u.map(e=>e.code));function f(e){return!!e&&d.has(e)}function p(e){return u.find(t=>t.code===e)?.label||e}function m(e){if(!e.total)return`0`;let t=e.existing+(e.suggested||0);return`${Math.round(t/e.total*100)}%`}const ee=`en`,h=`nl`,g=`none`,_={annotationBodies:!0,canvasLabels:!0};function v(e,t={}){let n=b(e),r=S(t.defaultSourceLanguage)||x(e?.i18n?.defaultLanguage)||n[0]||`en`,i=x(t.defaultSourceLanguage)||x(e?.i18n?.defaultLanguage)||n[0]||`en`;return y({sourceLanguage:r,modelSourceLanguage:i,targetLanguage:x(t.defaultTargetLanguage,i)||n.find(e=>e!==i)||(i===`nl`?`en`:`nl`),runtime:t.runtimePreference,writePolicy:`fill-missing`})}function y(e={}){let t=S(e.sourceLanguage)||`en`,n=C(t,e);return{sourceLanguage:t,modelSourceLanguage:n,targetLanguage:x(e.targetLanguage,n)||(n===`nl`?`en`:`nl`),runtime:te(e.runtime),writePolicy:`fill-missing`,contentFilters:E(e.contentFilters),currentResourceOnly:e.currentResourceOnly===!0}}function b(e){let t=e?.i18n?.availableLanguages||[],n=[];for(let e of t){let t=x(e);t&&!n.includes(t)&&n.push(t)}return n}function x(e,t){if(typeof e!=`string`)return null;let n=T(e);if(!n||n===t)return null;if(f(n))return n;let r=n.split(`-`)[0]||``;return r!==n&&r!==t&&f(r)?r:null}function S(e){return w(e)?g:x(e)}function C(e,t={}){return x(e)||x(t.modelSourceLanguage)||`en`}function w(e){return typeof e==`string`&&T(e)===g}function T(e){return e.trim().replace(/_/g,`-`).toLowerCase()}function te(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:_.annotationBodies,canvasLabels:typeof t.canvasLabels==`boolean`?t.canvasLabels:_.canvasLabels}}function D(e,t,n){let r={vault:e,options:n,occurrences:[],visited:new Set};L(r,t);let i=new Map;for(let e of r.occurrences){let t=k(e.sourceText);if(!t)continue;let n=j(t,e.sourceLanguage,e.targetLanguage,e.valueFormat),r=i.get(n);if(r){r.occurrences.push(e),r.status=ve(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=ye(e.status)-ye(t.status);return n===0?e.sourceText.localeCompare(t.sourceText):n})}function O(e,t){let n={vault:e,languages:new Map,visited:new Set};return R(n,t),Array.from(n.languages.values()).sort((e,t)=>be(e).localeCompare(be(t)))}function ne(e,t,n,r=O(e,t).map(e=>e.language)){return r.filter(e=>!!x(e)).map(r=>{let i={language:r,total:0,missing:0,existing:0,suggested:0,skipped:0,stale:0};for(let a of D(e,t,{...n,targetLanguage:r}))i.total+=1,i[a.status]+=1;return i})}function k(e){return e.replace(/\s+/g,` `).trim()}function A(e){return k(e)}function j(e,t,n,r){return`${t}:${n}:${r}:${e.toLowerCase()}`}function M(e,t){if(!e)return[];if(typeof e==`string`)return e.trim()?[{sourceMapLanguage:t,sourceIndex:0,sourceText:e}]:[];let n=P(e,t);if(n.length)return n.map((e,n)=>({sourceMapLanguage:t,sourceIndex:n,sourceText:e})).filter(e=>k(e.sourceText));let r=x(t);if(r){let n=Object.keys(e).find(e=>e!==t&&x(e)===r);if(n)return P(e,n).map((e,t)=>({sourceMapLanguage:n,sourceIndex:t,sourceText:e})).filter(e=>k(e.sourceText))}return P(e,`none`).map((e,t)=>({sourceMapLanguage:`none`,sourceIndex:t,sourceText:e})).filter(e=>k(e.sourceText))}function N(e,t,n){return e?typeof e==`string`?t===`none`||n===0?e:``:P(e,t)[n]||``:``}function P(e,t){let n=e[t];return Array.isArray(n)?n.filter(e=>typeof e==`string`):[]}function F(e,t,n){let r=N(e,t,n);if(k(r))return r;if(!e||typeof e==`string`)return``;let i=x(t);if(i)for(let r of Object.keys(e)){if(r===t||x(r)!==i)continue;let a=N(e,r,n);if(k(a))return a}return P(e,t).find(e=>k(e))||``}function I(e){return/<\/?[a-z][\s\S]*>/i.test(e)}function L(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=W(e.vault,t);if(r){oe(e,r),se(e,r),ce(e,r);for(let t of U(r.provider,`Agent`))L(e,t);switch(r.type){case`Manifest`:for(let t of U(r.items,`Canvas`))L(e,t);for(let t of U(r.structures,`Range`))L(e,t);break;case`Canvas`:for(let t of[...U(r.items,`AnnotationPage`),...U(r.annotations,`AnnotationPage`)])L(e,t);break;case`Range`:for(let t of U(r.items))L(e,t);break;case`AnnotationPage`:for(let t of U(r.items,`Annotation`))L(e,t);break;case`Annotation`:le(e,r);break}}}function R(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=W(e.vault,t);if(r){re(e,r);for(let t of U(r.provider,`Agent`))R(e,t);switch(r.type){case`Manifest`:for(let t of U(r.items,`Canvas`))R(e,t);for(let t of U(r.structures,`Range`))R(e,t);break;case`Canvas`:for(let t of[...U(r.items,`AnnotationPage`),...U(r.annotations,`AnnotationPage`)])R(e,t);break;case`Range`:for(let t of U(r.items))R(e,t);break;case`AnnotationPage`:for(let t of U(r.items,`Annotation`))R(e,t);break;case`Annotation`:for(let t of U(r.body,`ContentResource`))R(e,t);break;case`Choice`:for(let t of U(r.items,`ContentResource`))R(e,t);break}}}function re(e,t){for(let n of ie(t))typeof n==`string`&&ae(e,n,1)}function ie(e){let t=new Set;try{for(let n of(0,r.getAvailableLanguagesFromResource)(e))typeof n==`string`&&t.add(n)}catch{}for(let n of z(e))t.add(n);return Array.from(t)}function z(e){let t=new Set;if(B(t,e?.label),B(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)&&(B(t,n.label),B(t,n.value)),Array.isArray(e?.metadata))for(let n of e.metadata)B(t,n?.label),B(t,n?.value);return Array.from(t)}function B(e,t){if(!(!t||typeof t==`string`))for(let[n,r]of Object.entries(t))Array.isArray(r)&&r.some(e=>typeof e==`string`&&k(e))&&e.add(n)}function ae(e,t,n){let r=S(t);if(!r)return;let i=T(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||G(t);V(e,{path:{kind:`resource-language-map`,resource:r,property:`label`},resource:r,propertyLabel:`Label`,value:t.label}),V(e,{path:{kind:`resource-language-map`,resource:r,property:`summary`},resource:r,propertyLabel:`Summary`,value:t.summary})}function se(e,t,n){let r=Array.isArray(t.metadata)?t.metadata:[],i=n||G(t);r.forEach((t,n)=>{V(e,{path:{kind:`metadata-language-map`,resource:i,metadataIndex:n,field:`label`},resource:i,propertyLabel:`Metadata ${n+1} label`,value:t?.label}),V(e,{path:{kind:`metadata-language-map`,resource:i,metadataIndex:n,field:`value`},resource:i,propertyLabel:`Metadata ${n+1} value`,value:t?.value})})}function ce(e,t,n){let r=t.requiredStatement;if(!r)return;let i=n||G(t);V(e,{path:{kind:`required-statement-language-map`,resource:i,field:`label`},resource:i,propertyLabel:`Required statement label`,value:r.label}),V(e,{path:{kind:`required-statement-language-map`,resource:i,field:`value`},resource:i,propertyLabel:`Required statement value`,value:r.value})}function le(e,t){let n={id:t.id,type:`Annotation`},r=de(e.vault,t);for(let{ref:t,resource:n}of r){let r={...t,label:K(n,n.id||t.id)};oe(e,n,r),se(e,n,r),ce(e,n,r)}if(e.options.contentFilters?.annotationBodies===!1)return;let i=r.filter(e=>H(e.resource));for(let{ref:t,resource:r,choice:a}of i){if(!he(r,e.options.sourceLanguage))continue;let o=typeof r.value==`string`?r.value:``;if(!k(o))continue;let s=pe(i.filter(e=>me(a,e)),e.options.targetLanguage),c=typeof s?.resource.value==`string`?s.resource.value:``;e.occurrences.push({id:ue({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:K(r,r.id||t.id)},propertyLabel:`Annotation body`,sourceLanguage:e.options.sourceLanguage,sourceMapLanguage:_e(r.language,e.options.sourceLanguage),targetLanguage:e.options.targetLanguage,sourceIndex:0,sourceText:o,targetText:c,valueFormat:r.format===`text/html`||I(o)?`html`:`text`,sourceFingerprint:A(o),status:k(c)?`existing`:`missing`})}}function V(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=M(t.value,e.options.sourceLanguage);for(let r of n){let n=F(t.value,e.options.targetLanguage,r.sourceIndex);e.occurrences.push({id:ue(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:I(r.sourceText)?`html`:`text`,sourceFingerprint:A(r.sourceText),status:k(n)?`existing`:`missing`})}}function ue(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 de(e,t){let n=[];for(let r of U(t.body,`ContentResource`))fe(e,r,n);return n}function fe(e,t,n,r){let i=W(e,t);if(i&&(n.push({ref:t,resource:i,choice:r}),i.type===`Choice`))for(let r of U(i.items,`ContentResource`))fe(e,r,n,t)}function pe(e,t){return e.find(({resource:e})=>!H(e)||!k(String(e.value||``))?!1:ge(e.language,t))}function me(e,t){return(e?.id||``)===(t.choice?.id||``)}function he(e,t){return!H(e)||typeof e.value!=`string`?!1:e.language?ge(e.language,t):!0}function H(e){return e?.type===`TextualBody`||e?.type===`Text`}function ge(e,t){let n=e=>e===t?!0:typeof e==`string`&&x(e)===x(t);return Array.isArray(e)?e.some(n):n(e)}function _e(e,t){return Array.isArray(e)?typeof e[0]==`string`?e[0]:t:typeof e==`string`?e:t}function U(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 W(e,t){let n=e.get(t,{skipSelfReturn:!1});return n&&typeof n==`object`?n:null}function G(e){return{id:e.id,type:e.type,label:K(e,e.id||e.type)}}function K(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 ve(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 ye(e){switch(e){case`missing`:return 0;case`stale`:return 1;case`skipped`:return 2;case`suggested`:return 3;case`existing`:return 4}}function be(e){return e.language}const q=`@manifest-editor/translation:config`;function xe(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 Se(e){return(0,o.jsx)(Ce,{actionId:e})}function Ce({actionId:t}){let[n,r]=(0,a.useState)(null),[s,c]=(0,a.useState)(y({}));(0,a.useEffect)(()=>{let e=e=>{let n=e.detail;n?.actionId===t&&(r(n),c(y(n.defaults)))};return window.addEventListener(q,e),()=>window.removeEventListener(q,e)},[t]),(0,a.useEffect)(()=>{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 l=n?.detectedLanguages||[],u=(0,a.useMemo)(()=>l.map(e=>e.language),[l]);(0,a.useEffect)(()=>{!u.length||u.includes(s.sourceLanguage)||c(e=>u.includes(e.sourceLanguage)?e:y({...e,sourceLanguage:u[0]}))},[u.join(`|`),s.sourceLanguage]);let d=(0,a.useMemo)(()=>n?.getTargets?.(s)||n?.targets||[],[n,s]),f=(0,a.useMemo)(()=>d.filter(e=>e.status===`missing`).length,[d]),m=(0,a.useMemo)(()=>n?.getTargetLanguageProgress?.(s)||[],[n,s]),ee=(0,a.useMemo)(()=>[{label:`Detected in manifest`,options:l.map(e=>({value:e.language,label:p(e.language)}))}],[l]),h=(0,a.useMemo)(()=>Te(m),[m]),g=(e,t)=>{c(n=>y({...n,contentFilters:{...n.contentFilters,[e]:t}}))};if(!n)return null;let _=e=>{n.resolve(e===!1?!1:y(e)),r(null)},v=C(s.sourceLanguage,s)===s.targetLanguage,b=s.currentResourceOnly===!0&&!!n.currentResource,x=u.length===0||v||f===0;return(0,o.jsx)(i.Modal,{title:`Run translations`,onClose:()=>_(!1),className:`max-w-xl`,actions:(0,o.jsxs)(`div`,{className:`flex gap-2`,children:[(0,o.jsx)(`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:()=>_(!1),children:`Cancel`}),(0,o.jsx)(`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:x,onClick:()=>_(s),children:`Run translation`})]}),children:(0,o.jsxs)(`div`,{className:`flex flex-col gap-3 p-3 text-sm text-zinc-700`,children:[(0,o.jsxs)(`div`,{className:`flex flex-col gap-2 border-b border-zinc-100 pb-3`,children:[(0,o.jsxs)(`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:[(0,o.jsx)(Ee,{label:`From`,value:s.sourceLanguage,groups:ee,emptyLabel:`No detected languages`,onChange:e=>c(t=>y({...t,sourceLanguage:e}))}),(0,o.jsx)(`span`,{className:`mb-[7px] text-zinc-300 select-none`,children:`→`}),(0,o.jsx)(Ee,{label:`To`,value:s.targetLanguage,groups:h,onChange:e=>c(t=>y({...t,targetLanguage:e}))}),(0,o.jsxs)(`label`,{className:`col-span-3 grid shrink-0 gap-1 sm:col-span-1`,children:[(0,o.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-wide text-zinc-400`,children:`Mode`}),(0,o.jsxs)(`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:s.runtime,onChange:e=>c(t=>y({...t,runtime:e.target.value})),children:[(0,o.jsx)(`option`,{value:`auto`,children:`Auto`}),(0,o.jsx)(`option`,{value:`webgpu`,children:`WebGPU`}),(0,o.jsx)(`option`,{value:`wasm`,children:`WASM`})]})]})]}),(0,o.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,o.jsxs)(`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:[(0,o.jsx)(`input`,{type:`checkbox`,className:`h-3.5 w-3.5 rounded border-zinc-300`,checked:b,disabled:!n.currentResource,onChange:e=>c(t=>y({...t,currentResourceOnly:e.currentTarget.checked}))}),`Current resource`]}),(0,o.jsx)(we,{filters:s.contentFilters,onChange:g})]})]}),u.length===0?(0,o.jsx)(`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,v?(0,o.jsx)(`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,(0,o.jsxs)(`div`,{className:`rounded border border-zinc-200 bg-zinc-50 px-2.5 py-2`,children:[(0,o.jsxs)(`div`,{className:`text-xs text-zinc-500`,children:[f>0?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(`span`,{className:`font-semibold text-amber-600`,children:f}),` missing`]}):(0,o.jsx)(`span`,{className:`text-zinc-400`,children:`No missing strings`}),d.length>0?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(`span`,{className:`text-zinc-300`,children:` · `}),(0,o.jsx)(`span`,{children:d.length}),` total`]}):null]}),(0,o.jsxs)(`div`,{className:`mt-1 text-xs text-zinc-500`,children:[`Missing target-language values will be filled using `,e.a,`. Existing target values are left unchanged.`]})]})]})})}function we({filters:e,onChange:t}){return(0,o.jsxs)(`details`,{className:`relative shrink-0`,children:[(0,o.jsx)(`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`}),(0,o.jsxs)(`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:[(0,o.jsxs)(`label`,{className:`flex items-center gap-2`,children:[(0,o.jsx)(`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`]}),(0,o.jsxs)(`label`,{className:`flex items-center gap-2`,children:[(0,o.jsx)(`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 Te(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:`${p(e.language)} (${m(e)})`}))}),n.push({label:`All languages`,options:u.filter(e=>!t.has(e.code)).map(e=>({value:e.code,label:e.label}))}),n}function Ee({label:e,value:t,groups:n,emptyLabel:r=`No languages available`,onChange:i}){let a=n.some(e=>e.options.length),s=n.some(e=>e.options.some(e=>e.value===t));return(0,o.jsxs)(`label`,{className:`grid min-w-0 flex-1 gap-1`,children:[(0,o.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-wide text-zinc-400`,children:e}),(0,o.jsxs)(`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:[s?null:(0,o.jsx)(`option`,{value:t,disabled:!0,children:a?p(t):r}),n.map(e=>e.options.length?(0,o.jsx)(`optgroup`,{label:e.label,children:e.options.map(e=>(0,o.jsx)(`option`,{value:e.value,children:e.label},e.value))},e.label):null)]})]})}const De=new Set([`br`,`hr`,`img`,`input`,`meta`,`link`,`area`,`base`,`col`,`embed`,`param`,`source`,`track`,`wbr`]);async function Oe(e,t){let n=ke(e);if(!n||!Ae(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 ke(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 Ae(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(`/>`)||De.has(i)||t.push(i)}return t.length===0}function je(){return typeof crypto<`u`&&`randomUUID`in crypto?crypto.randomUUID():`translation-${Date.now()}-${Math.random().toString(16).slice(2)}`}function Me(e={}){let n=e.worker??Ne(e.workerUrl),r=new Set,i=new Map,a=!1,o=e=>{for(let t of r)t(e)},s=e=>{for(let t of i.values())t.reject(e);i.clear()};n.addEventListener(`message`,e=>{let t=e.data;if(t.kind===`event`){o(t.payload);return}let n=i.get(t.requestId);if(n){if(i.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)}}),n.addEventListener(`error`,e=>{let t=Error(e.message||`The translation worker crashed.`);t.name=`worker_failed`,o({type:`error`,code:`worker_failed`,message:t.message,recoverable:!1}),s(t)});let c=(e,r)=>{if(a)return Promise.reject(Error(`The translation worker client has been terminated.`));let o=je(),s=e===`translate`?t.o(o,r.payload):e===`dispose`?t.t(o):t.i(o,r.payload);return new Promise((t,r)=>{i.set(o,{command:e,resolve:e=>t(e),reject:r}),n.postMessage(s)})};return{async preload(e){await c(`preload`,{payload:e})},translate(e){return c(`translate`,{payload:e})},onEvent(e){return r.add(e),()=>{r.delete(e)}},terminate(){a||(a=!0,n.postMessage(t.t(je())),n.terminate(),s(Error(`The translation worker client has been terminated.`)))}}}function Ne(e){try{return new Worker(Pe(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 Pe(e){return e instanceof URL?e:e?new URL(e,globalThis.location?.href||require(`url`).pathToFileURL(__filename).href):new URL(Fe(),require(`url`).pathToFileURL(__filename).href)}function Fe(){return`./translation-worker.js`}const Ie=`@manifest-editor/translation:results`;function Le(e,t){typeof window>`u`||window.dispatchEvent(new CustomEvent(Ie,{detail:{actionId:e,result:t}}))}function Re(e){return(0,o.jsx)(ze,{actionId:e})}function ze({actionId:e}){let[t,n]=(0,a.useState)(null);return(0,a.useEffect)(()=>{let t=t=>{let r=t.detail;r?.actionId===e&&r.result&&n(r.result)};return window.addEventListener(Ie,t),()=>window.removeEventListener(Ie,t)},[e]),t?(0,o.jsx)(i.Modal,{title:`Translation results`,onClose:()=>n(null),className:`max-w-4xl`,children:(0,o.jsxs)(`div`,{className:`flex min-h-0 flex-col gap-4 p-4 text-sm text-zinc-700`,children:[(0,o.jsxs)(`div`,{className:`grid grid-cols-3 gap-2 sm:grid-cols-6`,children:[(0,o.jsx)(J,{label:`Strings`,value:t.total}),(0,o.jsx)(J,{label:`Translated`,value:t.translated}),(0,o.jsx)(J,{label:`Applied`,value:t.applied}),(0,o.jsx)(J,{label:`Existing`,value:t.existing}),(0,o.jsx)(J,{label:`Stale`,value:t.stale}),(0,o.jsx)(J,{label:`Skipped`,value:t.skipped+t.errors})]}),t.translations.length?(0,o.jsxs)(`div`,{className:`rounded border border-zinc-200`,children:[(0,o.jsx)(`div`,{className:`border-b border-zinc-200 bg-zinc-50 px-3 py-2 font-medium`,children:`Translated strings`}),(0,o.jsx)(`div`,{className:`max-h-64 overflow-auto`,children:t.translations.map(e=>(0,o.jsxs)(`div`,{className:`grid gap-1.5 border-b border-zinc-100 px-3 py-2.5 last:border-0`,children:[(0,o.jsx)(`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}),(0,o.jsx)(`div`,{className:`text-xs font-medium text-zinc-900 line-clamp-2`,children:e.translationText}),(0,o.jsxs)(`div`,{className:`text-[11px] text-zinc-400`,children:[e.applied,` occurrence`,e.applied===1?``:`s`]})]},e.key))})]}):null,t.skippedTargets.length?(0,o.jsxs)(`div`,{className:`rounded border border-zinc-200`,children:[(0,o.jsx)(`div`,{className:`border-b border-zinc-200 bg-zinc-50 px-3 py-2 font-medium`,children:`Skipped strings`}),(0,o.jsx)(`div`,{className:`max-h-56 overflow-auto`,children:t.skippedTargets.map(e=>(0,o.jsxs)(`div`,{className:`grid gap-1 border-b border-zinc-100 px-3 py-2 last:border-0`,children:[(0,o.jsx)(`div`,{className:`line-clamp-2 font-medium text-zinc-900`,children:e.sourceText}),(0,o.jsx)(`div`,{className:`text-zinc-500`,children:e.reason})]},`${e.key}-${e.reason}`))})]}):null]})}):null}function J({label:e,value:t}){return(0,o.jsxs)(`div`,{className:`rounded border border-zinc-200 bg-zinc-50 px-2.5 py-2`,children:[(0,o.jsx)(`div`,{className:`text-base font-semibold text-zinc-900`,children:t}),(0,o.jsx)(`div`,{className:`text-[10px] uppercase tracking-wide text-zinc-400`,children:e})]})}function Be(e,t){let n=[],r=[],i=[];for(let a of t.occurrences){if(A(He(e.vault,a))!==a.sourceFingerprint){i.push(a);continue}if(k(Ye(e.vault,a))){r.push(a);continue}n.push(a)}return{writable:n,existing:r,stale:i}}function Ve(e,t,n){let r=n.trim();if(!r)return!1;switch(t.path.kind){case`resource-language-map`:return We(e.vault,t.path.resource,t.path.property,t,r),!0;case`metadata-language-map`:return Ge(e.vault,t.path,t,r),!0;case`required-statement-language-map`:return Ke(e.vault,t.path,t,r),!0;case`textual-body`:return qe(e.vault,t,r),!0}}function He(e,t){if(t.path.kind===`textual-body`){let n=Y(e,t.path.body);return typeof n?.value==`string`?n.value:``}return N(Je(e,t.path),t.sourceMapLanguage,t.sourceIndex)}function Ue(e,t){if(t.path.kind===`textual-body`){let n=Qe(e,t);return typeof n?.value==`string`?n.value:``}return N(Je(e,t.path),t.targetLanguage,t.sourceIndex)}function We(e,t,n,r,i){let a=Xe(Y(e,t)?.[n],r.sourceMapLanguage,r.sourceText,r.targetLanguage,r.sourceIndex,i);e.modifyEntityField(t,n,a)}function Ge(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]:Xe(o[t.field],n.sourceMapLanguage,n.sourceText,n.targetLanguage,n.sourceIndex,r)},e.modifyEntityField(t.resource,`metadata`,a)}function Ke(e,t,n,r){let i=Y(e,t.resource)?.requiredStatement||{},a={label:{none:[``]},value:{none:[``]},...i,[t.field]:Xe(i[t.field],n.sourceMapLanguage,n.sourceText,n.targetLanguage,n.sourceIndex,r)};e.modifyEntityField(t.resource,`requiredStatement`,a)}function qe(e,t,n){if(t.path.kind!==`textual-body`)return;let r=Qe(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=rt(t),o={id:a,type:`ContentResource`};if(t.path.choice){e.dispatch((0,s.importEntities)({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),c=Array.isArray(r?.items)?r.items:[];e.modifyEntityField(t.path.choice,`items`,[...c,o]);return}e.dispatch((0,s.batchActions)({actions:[(0,s.importEntities)({entities:{ContentResource:{[a]:{id:a,type:`TextualBody`,format:i?.format||(t.valueFormat===`html`?`text/html`:`text/plain`),value:n,language:t.targetLanguage}}}}),(0,s.addReference)({id:t.path.annotation.id,type:`Annotation`,key:`body`,reference:o})]}))}function Je(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 Ye(e,t){return t.path.kind===`textual-body`?Ue(e,t):F(Je(e,t.path),t.targetLanguage,t.sourceIndex)}function Xe(e,t,n,r,i,a){let o=Ze(e,t,n),s=[...o[r]||[]];for(;s.length<=i;)s.push(``);return s[i]=a,o[r]=s,o}function Ze(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 Qe(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 $e(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:it(e.language,t.targetLanguage))?.resource||null}function $e(e,t){let n=[];for(let r of nt(t?.body,`ContentResource`))et(e,r,n);return n.filter(({resource:e})=>tt(e))}function et(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 nt(i.items,`ContentResource`))et(e,r,n,t)}function tt(e){return e?.type===`TextualBody`||e?.type===`Text`}function nt(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 rt(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`${at(t)}/translation/${encodeURIComponent(e.targetLanguage)}/${ot(n)}`}function it(e,t){let n=e=>e===t?!0:typeof e==`string`&&x(e)===x(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 at(e){return e.endsWith(`/`)?e.slice(0,-1):e}function ot(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 st=new Map;function ct(e,t){st.set(e,y(t))}function lt(t={}){let n=t.createClient||(e=>Me({workerUrl:typeof e?.workerUrl==`string`&&e.workerUrl.trim()?e.workerUrl:void 0})),r=t.collectTargets||D,i=t.requestConfig||dt,a=t.translateHtml||Oe,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 t=l(e);return s&&c!==t&&u(s),s||(s=n(e),c=t),s};return{id:e.n,label:`Run translation`,summary:`Translate missing manifest strings with M2M100`,section:`Translations`,order:30,resourceTypes:[`Manifest`],resumable:!0,render:e=>(0,o.jsxs)(o.Fragment,{children:[Se(e.definition.id),Re(e.definition.id)]}),onResults:e=>Le(e.definition.id,e.instance?.result),supports:e=>e.vault.get(e.target)?.type===`Manifest`,prepare:async t=>{let n=t.plugins.getSettings(e.o),a=v(t.config,n),o=r(t.vault,X(t,a),a),s=st.get(t.instanceKey)||await i(t,o,a);if(st.delete(t.instanceKey),s===!1)return!1;let c=y(s);return ut(r(t.vault,X(t,c),c),c)},run:async t=>{let n=ft(t.plan),r=y(n?.options||v(t.config)),i=t.tasks.getAll(),o=t.tasks.getPending(),s={vault:t.vault};if(t.setActionLabel(`Running translation`),!i.length)return t.setActionStatus(`running`,`No translatable strings found`),t.setActionProgress({current:0,total:0,label:`No strings`}),ht(0);if(o.length){let n=d(t.plugins.getSettings(e.o)),i=n.onEvent(e=>_t(t,e)),o=()=>u(n);t.signal.addEventListener(`abort`,o,{once:!0});try{bt(t.signal),t.setActionStatus(`running`,`Loading translation model`),await n.preload({runtime:r.runtime}),await t.tasks.runEach(async(e,{index:i,total:o})=>{bt(t.signal);let c=e.input;if(!c)return Z(`Missing translation target`,e.id,``,0,0);t.appendActionLog(`Translating ${i+1}/${o}`,`info`,{key:c.key,sourceLanguage:c.sourceLanguage,targetLanguage:c.targetLanguage});let l=Be(s,c);if(!l.writable.length)return Z(gt(l.existing.length,l.stale.length),c.key,c.sourceText,l.existing.length,l.stale.length);let d;try{d=await pt(n,c,r,a)}catch(e){throw xt(e)&&u(n),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=Be(s,{...c,occurrences:[e]});if(t.stale.length){m+=t.stale.length;continue}if(t.existing.length){p+=t.existing.length;continue}Ve(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(n),e}finally{t.signal.removeEventListener(`abort`,o),i()}}let c=mt(n?.totalTargets||i.length,t.tasks.getAll());return t.setActionStatus(`running`,`Applied ${c.applied} translations`),t.setActionProgress({current:c.total,total:c.total,label:`Translations complete`}),c}}}function ut(e,t){return{version:1,data:{options:y(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:yt(e),target:vt(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 dt(e,t,n){let r=O(e.vault,e.target),i=r.map(e=>e.language);return xe({actionId:e.definition.id,instanceKey:e.instanceKey,defaults:n,targets:t,availableLanguages:b(e.config),detectedLanguages:r,currentResource:e.currentCanvas?{id:e.currentCanvas.id,type:e.currentCanvas.type,label:e.currentCanvas.label}:void 0,getTargets:t=>D(e.vault,X(e,y(t)),y(t)),getTargetLanguageProgress:t=>ne(e.vault,X(e,y(t)),y(t),i),signal:e.signal})}function ft(e){let t=e?.data;return t?.options?t:null}async function pt(e,t,n,r){let i=async r=>(await e.translate({text:r,sourceLanguage:C(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 mt(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 gt(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 _t(e,t){switch(t.type){case`model-progress`:e.setActionStatus(`running`,`Loading model ${Math.round(t.progress)}% (${St(t.loaded)} / ${St(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 vt(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 yt(e){let t=e.normalisedSourceText||e.sourceText||`Translation string`;return t.length>80?`${t.slice(0,77)}...`:t}function bt(e){if(e.aborted)throw Error(`Translation cancelled.`)}function xt(e){return e instanceof Error&&(e.name===`model_load_failed`||e.name===`worker_failed`)}function St(e){return e?`${Math.round(e/1024/1024)} MB`:`0 MB`}const Ct=`language`,wt=[{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 Tt(){return{id:e.i,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=>Ot(Mt(e)),run:async e=>{let t=e.tasks.getAll(),n=e.tasks.getPending();if(e.setActionLabel(`Tagging canvas languages`),!t.length){let t=At(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})=>{Ut(e.signal);let i=t.input,a=t.target?.id||i?.canvasId||t.id,o=Nt(e,a),s=Bt(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),kt(t)}let c=Pt(e,o),l=Dt(c);if(!l){e.tags.removeTag({id:a,type:`Canvas`},Ct);let t={canvasId:a,canvasLabel:s,reason:`No supported language detected`};return e.appendActionLog(`Skipped language tag`,`warn`,t),kt(t)}let u=Et(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=jt(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 Et(e){let t=Vt(e);return{type:Ct,id:e,label:e,backgroundColor:t.backgroundColor,textColor:t.textColor}}function Dt(e){return e[0]||null}function Ot(e){return{version:1,tasks:e.map((e,t)=>{let n=e?.id||`canvas-${t+1}`,r=Bt(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 kt(e){return{taskStatus:`skipped`,statusText:e.reason,result:{type:`skipped`,skip:e}}}function At(e){return{total:e,tagged:0,skipped:0,counts:{},tags:[],skippedCanvases:[]}}function jt(e){let t=At(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 Mt(e){let t=e.vault.get(e.target);return t?.items?(e.vault.get(t.items)||[]).filter(Boolean):[]}function Nt(e,t){return e.vault.get({id:t,type:`Canvas`})}function Pt(e,t){let n=It(e,t)||t,r=Ft(n),i=[],a=new Set;for(let e of r){let t=typeof e==`string`?e:``,n=S(t);!n||a.has(n)||(a.add(n),i.push({language:n,count:1,iiifLanguages:[t]}))}return Lt(i,n)}function Ft(e){let t=new Set;for(let n of(0,r.getAvailableLanguagesFromResource)(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 It(e,t){if(!t?.id)return null;try{return e.vault.toPresentation3({id:t.id,type:`Canvas`})}catch{return null}}function Lt(e,t){if(e.length<2||Rt(t))return e;let n=zt(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 Rt(e){return!!(Array.isArray(e?.items)&&e.items.length||Array.isArray(e?.annotations)&&e.annotations.length)}function zt(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=S(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 Bt(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 Vt(e){return wt[Math.abs(Ht(e))%wt.length]||wt[0]}function Ht(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 Ut(e){if(e.aborted)throw Error(`Language tagging cancelled.`)}const Wt={id:e.t,label:`Translations`,icon:(0,o.jsx)(Gt,{}),render:()=>(0,o.jsx)(Kt,{})};function Gt(e){return(0,o.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`1em`,height:`1em`,viewBox:`0 0 24 24`,...e,children:(0,o.jsx)(`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 Kt(){let t=(0,c.useConfig)(),n=(0,c.useAppResource)(),r=Yt(n),s=(0,c.usePluginRuntimeApi)().getSettings(e.o),u=(0,a.useMemo)(()=>v(t,s),[t,s]),[d,f]=(0,a.useState)(u),[m,ee]=(0,a.useState)(`missing`);(0,a.useEffect)(()=>{f(u)},[u.sourceLanguage,u.targetLanguage,u.runtime]);let h=(0,l.useVaultSelector)((e,t)=>O(t,n),[n.id,n.type]),g=(0,a.useMemo)(()=>h.map(e=>e.language),[h]),_=g.join(`|`);(0,a.useEffect)(()=>{!g.length||g.includes(d.sourceLanguage)||f(e=>g.includes(e.sourceLanguage)?e:y({...e,sourceLanguage:g[0]}))},[_,d.sourceLanguage]);let b=(0,l.useVaultSelector)((e,t)=>D(t,n,d),[n.id,n.type,d.sourceLanguage,d.targetLanguage,d.runtime,d.contentFilters.annotationBodies,d.contentFilters.canvasLabels]),S=(0,l.useVaultSelector)((e,t)=>D(t,r,d),[r.id,r.type,d.sourceLanguage,d.targetLanguage,d.runtime,d.contentFilters.annotationBodies,d.contentFilters.canvasLabels]),T=(0,l.useVaultSelector)((e,t)=>ne(t,n,d,g),[n.id,n.type,d.sourceLanguage,d.runtime,d.contentFilters.annotationBodies,d.contentFilters.canvasLabels,_]),te=(0,l.useVault)(),E=qt(),k=(0,c.useBackgroundActionsStoreApi)(),A=(0,a.useMemo)(()=>[{label:`Detected in manifest`,options:h.map(e=>({value:e.language,label:p(e.language)}))}],[h]),j=(0,a.useMemo)(()=>Qt(T),[T]),M=(0,a.useMemo)(()=>(t.i18n?.availableLanguages||[]).filter(e=>!x(e)&&!w(e)),[t.i18n?.availableLanguages]),N=(0,a.useMemo)(()=>on(b),[b]),P=(0,a.useMemo)(()=>on(S),[S]),F=E?.instance?.status===`preparing`||E?.instance?.status===`running`,I=C(d.sourceLanguage,d)===d.targetLanguage,L=!!E&&!F&&g.length>0&&!I&&N.missing>0,R=e=>{f(t=>y({...t,...e}))},re=(e,t)=>{f(n=>y({...n,contentFilters:{...n.contentFilters,[e]:t}}))},ie=()=>{!E||!L||(ct(E.instanceKey,d),(0,c.runBackgroundAction)({store:k,context:E.context}))},z=(0,a.useMemo)(()=>m===`current`?S:m===`all`?b:b.filter(e=>e.status===m),[b,S,m]),B=[{key:`all`,label:`All`,count:b.length},{key:`current`,label:`Current resource`,count:P.total,title:`Current ${r.type.toLowerCase()}`},{key:`missing`,label:`Missing`,count:N.missing},{key:`existing`,label:`Done`,count:N.existing},{key:`stale`,label:`Stale`,count:N.stale}];return(0,o.jsxs)(i.Sidebar,{children:[(0,o.jsx)(i.SidebarHeader,{title:`Translations`}),(0,o.jsxs)(i.SidebarContent,{className:`flex min-h-0 flex-col gap-0 p-0`,children:[(0,o.jsxs)(`div`,{className:`flex flex-col gap-2 border-b border-zinc-100 p-3`,children:[(0,o.jsxs)(`div`,{className:`flex items-end gap-1.5`,children:[(0,o.jsx)($t,{label:`From`,value:d.sourceLanguage,groups:A,emptyLabel:`No detected languages`,onChange:e=>R({sourceLanguage:e})}),(0,o.jsx)(`span`,{className:`mb-[7px] text-zinc-300 select-none`,children:`→`}),(0,o.jsx)($t,{label:`To`,value:d.targetLanguage,groups:j,onChange:e=>R({targetLanguage:e})}),(0,o.jsxs)(`label`,{className:`grid shrink-0 gap-1`,children:[(0,o.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-wide text-zinc-400`,children:`Mode`}),(0,o.jsxs)(`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:d.runtime,onChange:e=>R({runtime:e.target.value}),children:[(0,o.jsx)(`option`,{value:`auto`,children:`Auto`}),(0,o.jsx)(`option`,{value:`webgpu`,children:`WebGPU`}),(0,o.jsx)(`option`,{value:`wasm`,children:`WASM`})]})]})]}),M.length?(0,o.jsxs)(`div`,{className:`rounded border border-amber-200 bg-amber-50 px-2.5 py-2 text-xs text-amber-800`,children:[`Unsupported languages: `,M.join(`, `)]}):null,g.length===0?(0,o.jsx)(`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,I?(0,o.jsx)(`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,(0,o.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,o.jsxs)(`div`,{className:`min-w-[7rem] flex-1 text-xs text-zinc-500`,children:[N.missing>0&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(`span`,{className:`font-semibold text-amber-600`,children:N.missing}),` missing`]}),N.missing>0&&N.existing>0&&(0,o.jsx)(`span`,{className:`text-zinc-300`,children:` · `}),N.existing>0&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(`span`,{className:`font-semibold text-green-600`,children:N.existing}),` done`]}),N.stale>0&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(`span`,{className:`text-zinc-300`,children:` · `}),(0,o.jsx)(`span`,{className:`font-semibold text-red-500`,children:N.stale}),` stale`]}),b.length===0&&(0,o.jsx)(`span`,{className:`text-zinc-400`,children:`No strings found`})]}),(0,o.jsx)(`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:!L,onClick:ie,title:L?`Translate ${N.missing} missing string${N.missing===1?``:`s`}`:void 0,children:F?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(an,{className:`h-3 w-3 animate-spin`}),`Running…`]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(rn,{className:`h-3 w-3`}),`Translate`]})}),(0,o.jsx)(Zt,{filters:d.contentFilters,onChange:re})]})]}),b.length>0&&(0,o.jsx)(`div`,{className:`flex shrink-0 overflow-x-auto border-b border-zinc-100 bg-zinc-50/50`,children:B.filter(e=>e.key===`all`||e.key===`current`||e.count>0).map(e=>(0,o.jsxs)(`button`,{type:`button`,className:`flex shrink-0 items-center gap-1 whitespace-nowrap px-3 py-2 text-xs font-medium transition-colors ${m===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:()=>ee(e.key),children:[e.label,(0,o.jsx)(`span`,{className:`text-[10px] ${m===e.key?`text-me-primary-400`:`text-zinc-400`}`,children:e.count})]},e.key))}),(0,o.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:z.length?z.map(e=>(0,o.jsx)(Xt,{target:e,onSave:t=>{for(let n of e.occurrences)Ve({vault:te},n,t)}},e.key)):(0,o.jsx)(`div`,{className:`px-4 py-8 text-center text-xs text-zinc-400`,children:b.length===0?`No translatable strings found.`:m===`current`?`No current resource strings.`:`No ${m} strings.`})})]})]})}function qt(){return Jt(e.n)}function Jt(e){let t=(0,c.useAvailableBackgroundActions)();return(0,a.useMemo)(()=>t.flatMap(e=>e.actions).find(t=>t.definition.id===e)||null,[t,e])}function Yt(e){let t=(0,c.useEditingResource)(),n=(0,c.useEditingResourceStack)();return(0,a.useMemo)(()=>{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 Xt({target:e,onSave:t}){let n=e.occurrences[0],r=sn(e.occurrences),[i,s]=(0,a.useState)(r),c=e.status===`existing`||e.status===`suggested`,[l,u]=(0,a.useState)(!c);return(0,a.useEffect)(()=>{s(r)},[r]),(0,o.jsxs)(`div`,{className:`border-b border-zinc-100 last:border-0 ${c&&!l?`opacity-60`:``}`,children:[(0,o.jsxs)(`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:()=>u(e=>!e),children:[(0,o.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,o.jsx)(`span`,{className:`block truncate text-xs font-semibold text-zinc-800`,children:n?.resource.label||n?.resource.id}),(0,o.jsxs)(`span`,{className:`text-[11px] text-zinc-400`,children:[n?.propertyLabel||`String`,e.occurrences.length>1?` · ${e.occurrences.length}×`:``]})]}),(0,o.jsx)(tn,{status:e.status}),(0,o.jsx)(nn,{expanded:l})]}),l&&(0,o.jsxs)(`div`,{className:`px-3 pb-3`,children:[(0,o.jsxs)(`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:[(0,o.jsx)(`div`,{className:`mb-1 text-[10px] font-semibold uppercase tracking-widest text-me-primary-400`,children:`Source`}),e.sourceText]}),(0,o.jsx)(`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:`${p(e.targetLanguage)} translation…`,onChange:e=>s(e.target.value),onBlur:()=>{i.trim()!==r.trim()&&t(i)}})]})]})}function Zt({filters:e,onChange:t}){return(0,o.jsxs)(`details`,{className:`relative shrink-0`,children:[(0,o.jsx)(`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`}),(0,o.jsxs)(`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:[(0,o.jsxs)(`label`,{className:`flex items-center gap-2`,children:[(0,o.jsx)(`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`]}),(0,o.jsxs)(`label`,{className:`flex items-center gap-2`,children:[(0,o.jsx)(`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 Qt(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:`${p(e.language)} (${m(e)})`}))}),n.push({label:`All languages`,options:u.filter(e=>!t.has(e.code)).map(e=>({value:e.code,label:e.label}))}),n}function $t({label:e,value:t,groups:n,emptyLabel:r=`No languages available`,onChange:i}){let a=n.some(e=>e.options.length),s=n.some(e=>e.options.some(e=>e.value===t));return(0,o.jsxs)(`label`,{className:`grid min-w-0 flex-1 gap-1`,children:[(0,o.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-wide text-zinc-400`,children:e}),(0,o.jsxs)(`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:[s?null:(0,o.jsx)(`option`,{value:t,disabled:!0,children:a?p(t):r}),n.map(e=>e.options.length?(0,o.jsx)(`optgroup`,{label:e.label,children:e.options.map(e=>(0,o.jsx)(`option`,{value:e.value,children:e.label},e.value))},e.label):null)]})]})}const en={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 tn({status:e}){let t=en[e]||en.skipped;return(0,o.jsxs)(`span`,{className:`flex shrink-0 items-center gap-1 text-[10px] font-medium ${t.text}`,children:[(0,o.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full ${t.dot}`}),t.label]})}function nn({expanded:e}){return(0,o.jsx)(`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:(0,o.jsx)(`path`,{d:`M6 9l6 6 6-6`})})}function rn({className:e}){return(0,o.jsx)(`svg`,{className:e,viewBox:`0 0 24 24`,fill:`currentColor`,children:(0,o.jsx)(`path`,{d:`M8 5v14l11-7z`})})}function an({className:e}){return(0,o.jsxs)(`svg`,{className:e,viewBox:`0 0 24 24`,fill:`none`,children:[(0,o.jsx)(`circle`,{cx:`12`,cy:`12`,r:`9`,stroke:`currentColor`,strokeWidth:`2.5`,strokeOpacity:`0.3`}),(0,o.jsx)(`path`,{d:`M12 3a9 9 0 0 1 9 9`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`})]})}function on(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 sn(e){for(let t of e)if(t.targetText?.trim())return t.targetText;return``}const cn=[Wt],ln=[lt(),Tt()];exports.M2M100_LANGUAGES=u,exports.TRANSLATIONS_LEFT_PANEL_ID=e.t,exports.TRANSLATION_ACTION_ID=e.n,exports.TRANSLATION_CACHE_KEY=e.r,exports.TRANSLATION_CONFIG_EVENT=q,exports.TRANSLATION_LANGUAGE_TAG_ACTION_ID=e.i,exports.TRANSLATION_LANGUAGE_TAG_TYPE=Ct,exports.TRANSLATION_MODEL_ID=e.a,exports.TRANSLATION_NONE_LANGUAGE=g,exports.TRANSLATION_PLUGIN_ID=e.o,exports.TranslationsIcon=Gt,exports.backgroundActions=ln,exports.collectDetectedManifestLanguages=O,exports.collectTranslationLanguageProgress=ne,exports.collectTranslationTargets=D,exports.createDisposeRequest=t.t,exports.createErrorResponse=t.n,exports.createEventEnvelope=t.r,exports.createLanguageTag=Et,exports.createPreloadRequest=t.i,exports.createSuccessResponse=t.a,exports.createTranslateRequest=t.o,exports.createTranslationBackgroundAction=lt,exports.createTranslationLanguageTagsBackgroundAction=Tt,exports.createTranslationPlan=ut,exports.createTranslationResultResponse=t.s,exports.createTranslationTargetKey=j,exports.createTranslationWorkerClient=Me,exports.default=n.t,exports.defaultTranslationContentFilters=_,exports.fingerprintTranslationText=A,exports.getDefaultRunOptions=v,exports.getLanguageLabel=p,exports.getLanguageMapSourceEntries=M,exports.getLanguageMapTargetText=F,exports.getLanguageProgressLabel=m,exports.getLanguageValueAt=N,exports.getLanguageValues=P,exports.getModelSourceLanguage=C,exports.getSupportedAvailableLanguages=b,exports.getWritableOccurrences=Be,exports.isHtmlTranslationValue=I,exports.isNoLanguageCode=w,exports.isSupportedM2M100Language=f,exports.leftPanels=cn,exports.normaliseLanguageCode=T,exports.normaliseRunOptions=y,exports.normaliseTranslationText=k,exports.openTranslationResults=Le,exports.queueTranslationRunOptions=ct,exports.readOccurrenceSourceText=He,exports.readOccurrenceTargetText=Ue,exports.renderTranslationConfigModal=Se,exports.renderTranslationResults=Re,exports.requestTranslationConfig=xe,exports.resolveSourceLanguage=S,exports.resolveSupportedLanguage=x,exports.selectPrimaryDetectedLanguage=Dt,exports.settings=n.n,exports.translatePreservingSimpleHtml=Oe,exports.translationsPanel=Wt,exports.writeTranslationForOccurrence=Ve;