@manifest-editor/translation 2.0.3-next.0.f58cbd8

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 digirati-co-uk
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/dist/index.cjs ADDED
@@ -0,0 +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;
@@ -0,0 +1,418 @@
1
+ import { BackgroundActionDefinition, BackgroundActionPlan, BackgroundActionRunContext, Config, LayoutPanel, ManifestEditorTag, PluginSettingsDefinition } from "@manifest-editor/shell";
2
+ import { InternationalString, Reference } from "@iiif/presentation-3";
3
+ import { Vault } from "@iiif/helpers/vault";
4
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
5
+ import { SVGProps } from "react";
6
+
7
+ //#region src/types.d.ts
8
+ type TranslationRuntimePreference = "auto" | "webgpu" | "wasm";
9
+ type TranslationWritePolicy = "fill-missing";
10
+ type TranslationValueFormat = "text" | "html";
11
+ type TranslationStatus = "missing" | "existing" | "suggested" | "skipped" | "stale";
12
+ type TranslationContentFilters = {
13
+ annotationBodies: boolean;
14
+ canvasLabels: boolean;
15
+ };
16
+ type TranslationPluginSettings = {
17
+ [key: string]: unknown;
18
+ defaultSourceLanguage?: string;
19
+ defaultTargetLanguage?: string;
20
+ runtimePreference?: TranslationRuntimePreference;
21
+ };
22
+ type TranslationRunOptions = {
23
+ sourceLanguage: string;
24
+ modelSourceLanguage?: string;
25
+ targetLanguage: string;
26
+ runtime: TranslationRuntimePreference;
27
+ writePolicy: TranslationWritePolicy;
28
+ contentFilters: TranslationContentFilters;
29
+ currentResourceOnly?: boolean;
30
+ };
31
+ type TranslationResourceRef = Reference & {
32
+ label?: string;
33
+ };
34
+ type ResourceLanguageMapPath = {
35
+ kind: "resource-language-map";
36
+ resource: Reference;
37
+ property: "label" | "summary";
38
+ };
39
+ type MetadataLanguageMapPath = {
40
+ kind: "metadata-language-map";
41
+ resource: Reference;
42
+ metadataIndex: number;
43
+ field: "label" | "value";
44
+ };
45
+ type RequiredStatementLanguageMapPath = {
46
+ kind: "required-statement-language-map";
47
+ resource: Reference;
48
+ field: "label" | "value";
49
+ };
50
+ type TextualBodyPath = {
51
+ kind: "textual-body";
52
+ annotation: Reference<"Annotation">;
53
+ body: Reference<"ContentResource">;
54
+ choice?: Reference<"ContentResource">;
55
+ targetBody?: Reference<"ContentResource">;
56
+ };
57
+ type TranslationPath = ResourceLanguageMapPath | MetadataLanguageMapPath | RequiredStatementLanguageMapPath | TextualBodyPath;
58
+ type TranslationOccurrence = {
59
+ id: string;
60
+ path: TranslationPath;
61
+ resource: TranslationResourceRef;
62
+ propertyLabel: string;
63
+ sourceLanguage: string;
64
+ sourceMapLanguage: string;
65
+ targetLanguage: string;
66
+ sourceIndex: number;
67
+ sourceText: string;
68
+ targetText: string;
69
+ valueFormat: TranslationValueFormat;
70
+ sourceFingerprint: string;
71
+ status: TranslationStatus;
72
+ };
73
+ type TranslationTarget = {
74
+ key: string;
75
+ sourceLanguage: string;
76
+ targetLanguage: string;
77
+ sourceText: string;
78
+ normalisedSourceText: string;
79
+ valueFormat: TranslationValueFormat;
80
+ occurrences: TranslationOccurrence[];
81
+ status: TranslationStatus;
82
+ };
83
+ type TranslationTaskResult = {
84
+ type: "translated";
85
+ key: string;
86
+ sourceText: string;
87
+ translationText: string;
88
+ applied: number;
89
+ existing: number;
90
+ stale: number;
91
+ } | {
92
+ type: "skipped";
93
+ key: string;
94
+ sourceText: string;
95
+ reason: string;
96
+ existing?: number;
97
+ stale?: number;
98
+ };
99
+ type TranslationActionResult = {
100
+ total: number;
101
+ translated: number;
102
+ applied: number;
103
+ skipped: number;
104
+ existing: number;
105
+ stale: number;
106
+ errors: number;
107
+ translations: Array<{
108
+ key: string;
109
+ sourceText: string;
110
+ translationText: string;
111
+ applied: number;
112
+ }>;
113
+ skippedTargets: Array<{
114
+ key: string;
115
+ sourceText: string;
116
+ reason: string;
117
+ }>;
118
+ };
119
+ type LanguageMapLike = InternationalString | string | null | undefined;
120
+ //#endregion
121
+ //#region src/collection.d.ts
122
+ type SourceEntry = {
123
+ sourceMapLanguage: string;
124
+ sourceIndex: number;
125
+ sourceText: string;
126
+ };
127
+ type DetectedManifestLanguage = {
128
+ language: string;
129
+ count: number;
130
+ iiifLanguages: string[];
131
+ };
132
+ type TranslationLanguageProgress = {
133
+ language: string;
134
+ total: number;
135
+ missing: number;
136
+ existing: number;
137
+ suggested: number;
138
+ skipped: number;
139
+ stale: number;
140
+ };
141
+ declare function collectTranslationTargets(vault: Vault, root: Reference, options: TranslationRunOptions): TranslationTarget[];
142
+ declare function collectDetectedManifestLanguages(vault: Vault, root: Reference): DetectedManifestLanguage[];
143
+ declare function collectTranslationLanguageProgress(vault: Vault, root: Reference, options: TranslationRunOptions, languages?: string[]): TranslationLanguageProgress[];
144
+ declare function normaliseTranslationText(value: string): string;
145
+ declare function fingerprintTranslationText(value: string): string;
146
+ declare function createTranslationTargetKey(sourceText: string, sourceLanguage: string, targetLanguage: string, valueFormat: TranslationValueFormat): string;
147
+ declare function getLanguageMapSourceEntries(value: LanguageMapLike, sourceLanguage: string): SourceEntry[];
148
+ declare function getLanguageValueAt(value: LanguageMapLike, language: string, index: number): string;
149
+ declare function getLanguageValues(value: InternationalString, language: string): string[];
150
+ declare function getLanguageMapTargetText(value: LanguageMapLike, targetLanguage: string, sourceIndex: number): string;
151
+ declare function isHtmlTranslationValue(value: string): boolean;
152
+ //#endregion
153
+ //#region src/html.d.ts
154
+ declare function translatePreservingSimpleHtml(value: string, translateText: (text: string) => Promise<string>): Promise<string | null>;
155
+ //#endregion
156
+ //#region src/runtime/types.d.ts
157
+ type TranslationErrorCode = "busy" | "invalid_request" | "model_load_failed" | "translation_failed" | "worker_failed";
158
+ type TranslationRuntimeUsed = "webgpu" | "wasm";
159
+ interface TranslationPreloadRequest {
160
+ runtime: TranslationRuntimePreference;
161
+ }
162
+ interface TranslationTextRequest {
163
+ text: string;
164
+ sourceLanguage: string;
165
+ targetLanguage: string;
166
+ runtime: TranslationRuntimePreference;
167
+ }
168
+ interface TranslationTextResult {
169
+ text: string;
170
+ sourceLanguage: string;
171
+ targetLanguage: string;
172
+ runtime: TranslationRuntimeUsed;
173
+ durationMs: number;
174
+ }
175
+ interface TranslationModelProgressEvent {
176
+ type: "model-progress";
177
+ progress: number;
178
+ loaded: number;
179
+ total: number;
180
+ files: Record<string, {
181
+ loaded: number;
182
+ total: number;
183
+ }>;
184
+ }
185
+ interface TranslationModelReadyEvent {
186
+ type: "model-ready";
187
+ modelId: string;
188
+ runtime: TranslationRuntimeUsed;
189
+ }
190
+ interface TranslationRuntimeFallbackEvent {
191
+ type: "runtime-fallback";
192
+ from: TranslationRuntimeUsed;
193
+ to: TranslationRuntimeUsed;
194
+ message: string;
195
+ }
196
+ interface TranslationStartEvent {
197
+ type: "translation-start";
198
+ requestId: string;
199
+ sourceLanguage: string;
200
+ targetLanguage: string;
201
+ }
202
+ interface TranslationCompleteEvent {
203
+ type: "translation-complete";
204
+ requestId: string;
205
+ result: TranslationTextResult;
206
+ }
207
+ interface TranslationErrorEvent {
208
+ type: "error";
209
+ code: TranslationErrorCode;
210
+ message: string;
211
+ recoverable: boolean;
212
+ requestId?: string;
213
+ }
214
+ type TranslationEvent = TranslationModelProgressEvent | TranslationModelReadyEvent | TranslationRuntimeFallbackEvent | TranslationStartEvent | TranslationCompleteEvent | TranslationErrorEvent;
215
+ //#endregion
216
+ //#region src/runtime/browser/client.types.d.ts
217
+ interface TranslationWorkerClient {
218
+ preload(request: TranslationPreloadRequest): Promise<void>;
219
+ translate(request: TranslationTextRequest): Promise<TranslationTextResult>;
220
+ onEvent(listener: (event: TranslationEvent) => void): () => void;
221
+ terminate(): void;
222
+ }
223
+ //#endregion
224
+ //#region src/runtime/browser/client.d.ts
225
+ interface CreateTranslationWorkerClientOptions {
226
+ worker?: Worker;
227
+ }
228
+ declare function createTranslationWorkerClient(options?: CreateTranslationWorkerClientOptions): TranslationWorkerClient;
229
+ //#endregion
230
+ //#region src/runtime/protocol.d.ts
231
+ type TranslationWorkerCommand = "preload" | "translate" | "dispose";
232
+ interface TranslationWorkerRequestBase {
233
+ kind: "request";
234
+ command: TranslationWorkerCommand;
235
+ requestId: string;
236
+ }
237
+ interface TranslationWorkerPreloadRequest extends TranslationWorkerRequestBase {
238
+ command: "preload";
239
+ payload: TranslationPreloadRequest;
240
+ }
241
+ interface TranslationWorkerTranslateRequest extends TranslationWorkerRequestBase {
242
+ command: "translate";
243
+ payload: TranslationTextRequest;
244
+ }
245
+ interface TranslationWorkerDisposeRequest extends TranslationWorkerRequestBase {
246
+ command: "dispose";
247
+ }
248
+ interface TranslationWorkerSuccessResponse<T = undefined> {
249
+ kind: "success";
250
+ requestId: string;
251
+ command: TranslationWorkerCommand;
252
+ payload: T;
253
+ }
254
+ interface TranslationWorkerErrorPayload {
255
+ code: TranslationErrorCode;
256
+ message: string;
257
+ recoverable: boolean;
258
+ }
259
+ interface TranslationWorkerErrorResponse {
260
+ kind: "error";
261
+ requestId: string;
262
+ command: TranslationWorkerCommand;
263
+ payload: TranslationWorkerErrorPayload;
264
+ }
265
+ interface TranslationWorkerEventEnvelope {
266
+ kind: "event";
267
+ payload: TranslationEvent;
268
+ }
269
+ declare function createPreloadRequest(requestId: string, payload: TranslationPreloadRequest): TranslationWorkerPreloadRequest;
270
+ declare function createTranslateRequest(requestId: string, payload: TranslationTextRequest): TranslationWorkerTranslateRequest;
271
+ declare function createDisposeRequest(requestId: string): TranslationWorkerDisposeRequest;
272
+ declare function createSuccessResponse<T>(command: TranslationWorkerCommand, requestId: string, payload: T): TranslationWorkerSuccessResponse<T>;
273
+ declare function createTranslationResultResponse(requestId: string, payload: TranslationTextResult): TranslationWorkerSuccessResponse<TranslationTextResult>;
274
+ declare function createErrorResponse(command: TranslationWorkerCommand, requestId: string, payload: TranslationWorkerErrorPayload): TranslationWorkerErrorResponse;
275
+ declare function createEventEnvelope(payload: TranslationEvent): TranslationWorkerEventEnvelope;
276
+ //#endregion
277
+ //#region src/background-action.d.ts
278
+ type TranslationPlanData = {
279
+ options: TranslationRunOptions;
280
+ totalTargets: number;
281
+ };
282
+ type TranslationActionDependencies = {
283
+ createClient?: () => TranslationWorkerClient;
284
+ collectTargets?: typeof collectTranslationTargets;
285
+ requestConfig?: (ctx: BackgroundActionRunContext, targets: TranslationTarget[], defaults: TranslationRunOptions) => Promise<TranslationRunOptions | false>;
286
+ translateHtml?: typeof translatePreservingSimpleHtml;
287
+ };
288
+ declare function queueTranslationRunOptions(instanceKey: string, options: Partial<TranslationRunOptions>): void;
289
+ declare function createTranslationBackgroundAction(dependencies?: TranslationActionDependencies): BackgroundActionDefinition;
290
+ declare function createTranslationPlan(targets: TranslationTarget[], options: TranslationRunOptions): BackgroundActionPlan;
291
+ //#endregion
292
+ //#region src/config-modal.d.ts
293
+ declare const TRANSLATION_CONFIG_EVENT = "@manifest-editor/translation:config";
294
+ type TranslationConfigRequest = {
295
+ actionId: string;
296
+ instanceKey: string;
297
+ defaults: TranslationRunOptions;
298
+ availableLanguages: string[];
299
+ detectedLanguages?: DetectedManifestLanguage[];
300
+ currentResource?: TranslationResourceRef;
301
+ getTargets?: (options: TranslationRunOptions) => TranslationTarget[];
302
+ getTargetLanguageProgress?: (options: TranslationRunOptions) => TranslationLanguageProgress[];
303
+ targets: TranslationTarget[];
304
+ signal?: AbortSignal;
305
+ resolve: (options: TranslationRunOptions | false) => void;
306
+ };
307
+ declare function requestTranslationConfig(request: Omit<TranslationConfigRequest, "resolve">): Promise<TranslationRunOptions | false>;
308
+ declare function renderTranslationConfigModal(actionId: string): react_jsx_runtime0.JSX.Element;
309
+ //#endregion
310
+ //#region src/constants.d.ts
311
+ declare const TRANSLATION_PLUGIN_ID = "@manifest-editor/translation";
312
+ declare const TRANSLATION_ACTION_ID = "@manifest-editor/translation/translate-strings";
313
+ declare const TRANSLATION_LANGUAGE_TAG_ACTION_ID = "@manifest-editor/translation/tag-languages";
314
+ declare const TRANSLATIONS_LEFT_PANEL_ID = "@manifest-editor/translations";
315
+ declare const TRANSLATION_MODEL_ID = "Xenova/m2m100_418M";
316
+ declare const TRANSLATION_CACHE_KEY = "manifest-editor-translation-m2m100-418m";
317
+ //#endregion
318
+ //#region src/language-tags-background-action.d.ts
319
+ declare const TRANSLATION_LANGUAGE_TAG_TYPE = "language";
320
+ type CanvasLanguageTagResult = {
321
+ canvasId: string;
322
+ canvasLabel: string;
323
+ language: string;
324
+ label: string;
325
+ count: number;
326
+ detectedLanguages: string[];
327
+ };
328
+ type CanvasLanguageTagSkip = {
329
+ canvasId: string;
330
+ canvasLabel: string;
331
+ reason: string;
332
+ };
333
+ type TranslationLanguageTagActionResult = {
334
+ total: number;
335
+ tagged: number;
336
+ skipped: number;
337
+ counts: Record<string, number>;
338
+ tags: CanvasLanguageTagResult[];
339
+ skippedCanvases: CanvasLanguageTagSkip[];
340
+ };
341
+ type DetectedCanvasLanguage = {
342
+ language: string;
343
+ count: number;
344
+ iiifLanguages: string[];
345
+ };
346
+ declare function createTranslationLanguageTagsBackgroundAction(): BackgroundActionDefinition;
347
+ declare function createLanguageTag(language: string): ManifestEditorTag;
348
+ declare function selectPrimaryDetectedLanguage(languages: DetectedCanvasLanguage[]): DetectedCanvasLanguage | null;
349
+ //#endregion
350
+ //#region src/languages.d.ts
351
+ type M2M100Language = {
352
+ code: string;
353
+ label: string;
354
+ };
355
+ type LanguageProgressSummary = {
356
+ total: number;
357
+ existing: number;
358
+ suggested?: number;
359
+ };
360
+ declare const M2M100_LANGUAGES: M2M100Language[];
361
+ declare function isSupportedM2M100Language(code: string | null | undefined): boolean;
362
+ declare function getLanguageLabel(code: string): string;
363
+ declare function getLanguageProgressLabel(progress: LanguageProgressSummary): string;
364
+ //#endregion
365
+ //#region src/options.d.ts
366
+ declare const TRANSLATION_NONE_LANGUAGE = "none";
367
+ declare const defaultTranslationContentFilters: TranslationContentFilters;
368
+ declare function getDefaultRunOptions(config?: Partial<Config> | null, settings?: TranslationPluginSettings): TranslationRunOptions;
369
+ declare function normaliseRunOptions(options?: Partial<TranslationRunOptions>): TranslationRunOptions;
370
+ declare function getSupportedAvailableLanguages(config?: Partial<Config> | null): string[];
371
+ declare function resolveSupportedLanguage(language: unknown, disallow?: string): string | null;
372
+ declare function resolveSourceLanguage(language: unknown): string | null;
373
+ declare function getModelSourceLanguage(sourceLanguage: unknown, options?: Partial<TranslationRunOptions>): string;
374
+ declare function isNoLanguageCode(language: unknown): boolean;
375
+ declare function normaliseLanguageCode(language: string): string;
376
+ //#endregion
377
+ //#region src/results.d.ts
378
+ declare function openTranslationResults(actionId: string, result: unknown): void;
379
+ declare function renderTranslationResults(actionId: string): react_jsx_runtime0.JSX.Element;
380
+ //#endregion
381
+ //#region src/sidebar.d.ts
382
+ declare const translationsPanel: LayoutPanel;
383
+ declare function TranslationsIcon(props: SVGProps<SVGSVGElement>): react_jsx_runtime0.JSX.Element;
384
+ //#endregion
385
+ //#region src/writeback.d.ts
386
+ type TranslationWriteContext = {
387
+ vault: Vault;
388
+ };
389
+ type WritableOccurrenceCheck = {
390
+ writable: TranslationOccurrence[];
391
+ existing: TranslationOccurrence[];
392
+ stale: TranslationOccurrence[];
393
+ };
394
+ declare function getWritableOccurrences(ctx: TranslationWriteContext, target: TranslationTarget): WritableOccurrenceCheck;
395
+ declare function writeTranslationForOccurrence(ctx: TranslationWriteContext, occurrence: TranslationOccurrence, translationText: string): boolean;
396
+ declare function readOccurrenceSourceText(vault: Vault, occurrence: TranslationOccurrence): any;
397
+ declare function readOccurrenceTargetText(vault: Vault, occurrence: TranslationOccurrence): any;
398
+ //#endregion
399
+ //#region src/index.d.ts
400
+ declare const _default: {
401
+ id: string;
402
+ label: string;
403
+ description: string;
404
+ author: string;
405
+ official: true;
406
+ defaultEnabled: false;
407
+ tags: string[];
408
+ supports: {
409
+ apps: string[];
410
+ projectTypes: "Manifest"[];
411
+ };
412
+ };
413
+ declare const settings: PluginSettingsDefinition<TranslationPluginSettings>;
414
+ declare const leftPanels: LayoutPanel[];
415
+ declare const backgroundActions: BackgroundActionDefinition[];
416
+ //#endregion
417
+ export { CanvasLanguageTagResult, CanvasLanguageTagSkip, DetectedManifestLanguage, LanguageMapLike, LanguageProgressSummary, M2M100Language, M2M100_LANGUAGES, MetadataLanguageMapPath, RequiredStatementLanguageMapPath, ResourceLanguageMapPath, TRANSLATIONS_LEFT_PANEL_ID, TRANSLATION_ACTION_ID, TRANSLATION_CACHE_KEY, TRANSLATION_CONFIG_EVENT, TRANSLATION_LANGUAGE_TAG_ACTION_ID, TRANSLATION_LANGUAGE_TAG_TYPE, TRANSLATION_MODEL_ID, TRANSLATION_NONE_LANGUAGE, TRANSLATION_PLUGIN_ID, TextualBodyPath, TranslationActionDependencies, TranslationActionResult, TranslationConfigRequest, TranslationContentFilters, TranslationErrorCode, TranslationEvent, TranslationLanguageProgress, TranslationLanguageTagActionResult, TranslationOccurrence, TranslationPath, TranslationPlanData, TranslationPluginSettings, TranslationPreloadRequest, TranslationResourceRef, TranslationRunOptions, type TranslationRuntimePreference, TranslationRuntimeUsed, TranslationStatus, TranslationTarget, TranslationTaskResult, TranslationTextRequest, TranslationTextResult, TranslationValueFormat, TranslationWorkerClient, TranslationWriteContext, TranslationWritePolicy, TranslationsIcon, WritableOccurrenceCheck, backgroundActions, collectDetectedManifestLanguages, collectTranslationLanguageProgress, collectTranslationTargets, createDisposeRequest, createErrorResponse, createEventEnvelope, createLanguageTag, createPreloadRequest, createSuccessResponse, createTranslateRequest, createTranslationBackgroundAction, createTranslationLanguageTagsBackgroundAction, createTranslationPlan, createTranslationResultResponse, createTranslationTargetKey, createTranslationWorkerClient, _default as default, defaultTranslationContentFilters, fingerprintTranslationText, getDefaultRunOptions, getLanguageLabel, getLanguageMapSourceEntries, getLanguageMapTargetText, getLanguageProgressLabel, getLanguageValueAt, getLanguageValues, getModelSourceLanguage, getSupportedAvailableLanguages, getWritableOccurrences, isHtmlTranslationValue, isNoLanguageCode, isSupportedM2M100Language, leftPanels, normaliseLanguageCode, normaliseRunOptions, normaliseTranslationText, openTranslationResults, queueTranslationRunOptions, readOccurrenceSourceText, readOccurrenceTargetText, renderTranslationConfigModal, renderTranslationResults, requestTranslationConfig, resolveSourceLanguage, resolveSupportedLanguage, selectPrimaryDetectedLanguage, settings, translatePreservingSimpleHtml, translationsPanel, writeTranslationForOccurrence };
418
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/collection.ts","../src/html.ts","../src/runtime/types.ts","../src/runtime/browser/client.types.ts","../src/runtime/browser/client.ts","../src/runtime/protocol.ts","../src/background-action.tsx","../src/config-modal.tsx","../src/constants.ts","../src/language-tags-background-action.ts","../src/languages.ts","../src/options.ts","../src/results.tsx","../src/sidebar.tsx","../src/writeback.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}