@manifest-editor/creators 2.2.2-next.0.a82700e → 2.3.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/iiif-browser-form.lazy-5m6mTOpt.cjs +2 -0
- package/dist/iiif-browser-form.lazy-5m6mTOpt.cjs.map +1 -0
- package/dist/iiif-browser-form.lazy-B3L53hOy.js +2 -0
- package/dist/iiif-browser-form.lazy-B3L53hOy.js.map +1 -0
- package/dist/iiif-browser-output-BZhwClM1.cjs +2 -0
- package/dist/iiif-browser-output-BZhwClM1.cjs.map +1 -0
- package/dist/iiif-browser-output-Dgz2XDZo.js +2 -0
- package/dist/iiif-browser-output-Dgz2XDZo.js.map +1 -0
- package/dist/index.cjs +20 -20
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +188 -7
- package/dist/index.d.cts +19 -27
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +20 -28
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -20
- package/dist/index.js.map +1 -1
- package/package.json +15 -13
- package/dist/iiif-browser-form.lazy-Df2fAM6b.cjs +0 -2
- package/dist/iiif-browser-form.lazy-Df2fAM6b.cjs.map +0 -1
- package/dist/iiif-browser-form.lazy-DtTHoW1Q.js +0 -2
- package/dist/iiif-browser-form.lazy-DtTHoW1Q.js.map +0 -1
- package/dist/iiif-browser-output-DSDX-M6m.js +0 -2
- package/dist/iiif-browser-output-DSDX-M6m.js.map +0 -1
- package/dist/iiif-browser-output-IFaBMvwa.cjs +0 -2
- package/dist/iiif-browser-output-IFaBMvwa.cjs.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import{n as e,t}from"./iiif-browser-output-
|
|
1
|
+
import{n as e,t}from"./iiif-browser-output-Dgz2XDZo.js";import{creatorHelper as n,defineCreator as r}from"@manifest-editor/creator-api";import{useEditorI18n as i,useTranslations as a}from"@manifest-editor/i18n";import{Vault as o,createThumbnailHelper as s,getValue as c}from"@iiif/helpers";import{ActionButton as l,AddImageIcon as u,AudioIcon as d,EmptyCanvasIcon as f,ErrorMessage as p,Form as m,HTMLEditor as h,HTMLIcon as g,IIIFBrowserIcon as _,IIIFLogo as v,ImageListIcon as y,LocalizedIIIFBrowser as b,PaddedSidebarContainer as x,RangesIcon as ee,ScaledImageIcon as te,TextIcon as ne,VideoIcon as re,YouTubeIcon as ie}from"@manifest-editor/components";import{CanvasLayoutForm as ae,DimensionsTriplet as oe,FormFieldWrapper as se,Input as S,InputContainer as C,InputLabel as w,LanguageFieldEditor as T,centerRectangles as ce}from"@manifest-editor/editors";import{lazy as le,useEffect as ue,useId as de,useLayoutEffect as fe,useMemo as E,useRef as D,useState as O}from"react";import{jsx as k,jsxs as A}from"react/jsx-runtime";import{isSupportedDigitalCollectionPage as pe}from"iiif-browser/digital-collections";import{CanvasPanel as me,MediaPlayerProvider as he,VaultProvider as ge,formatTime as _e,useImage as ve,useManifest as ye,useMediaActions as be,useMediaElements as xe,useMediaState as Se,useSimpleMediaPlayer as Ce,useVault as we}from"react-iiif-vault";import j,{css as Te}from"styled-components";import{canonicalServiceUrl as Ee,createImageServiceRequest as De,getImageServices as Oe,imageServiceRequestToString as M,isImageService as N,parseImageServiceRequest as ke}from"@iiif/parser/image-3";import{ErrorBoundary as Ae}from"react-error-boundary";import{PreviewVaultBoundary as je,getFormat as Me,getImageDimensions as Ne,useAnnotationCreatorState as Pe,useConfig as Fe,useNotebookBrowserPlugins as Ie,usePreviewVault as Le}from"@manifest-editor/shell";import{CANVAS_LAYOUT_META as Re,EditorInstance as ze,canvasHasAv as Be,canvasLayouts as Ve,createCanvasLayoutState as He}from"@manifest-editor/editor-api";var Ue=Object.defineProperty,We=(e,t)=>{let n={};for(var r in e)Ue(n,r,{get:e[r],enumerable:!0});return t||Ue(n,Symbol.toStringTag,{value:`Module`}),n};async function Ge(e,t){let n={id:e.url||t.generateId(`provider`),label:e.label,type:`Agent`,homepage:[],logo:[]};return e.homepage&&(n.homepage=[t.embed({id:e.url,label:c(e.homepageLabel)?e.homepageLabel:{en:[`Homepage`]},type:`Text`,format:`text/html`,language:[`en`]})]),e.logo&&(n.logo=[t.embed({id:e.logo,type:`Image`})]),t.embed(n)}function Ke(e){let t=a(`editor-api`),n=a(`creators`),r=e.options.initialData,[i,o]=O(r.url||``),[s,c]=O(r.label||{en:[``]}),[u,d]=O(r.homepage||``),[f,p]=O(r.logo||``),[m,h]=O(r.homepageLabel||{en:[``]});return k(x,{children:A(`div`,{className:`max-w-xl`,children:[k(T,{containerId:`label`,focusId:`label_`,label:t(`fields.label`),fields:s,onSave:e=>c(e.toInternationalString())}),A(C,{$fluid:!0,children:[k(w,{htmlFor:`provider-logo`,children:t(`fields.logo`)}),k(S,{placeholder:`https://example.org/logo.png`,type:`text`,id:`provider-logo`,value:f,onChange:e=>p(e.target.value)})]}),A(C,{$fluid:!0,children:[k(w,{htmlFor:`provider-homepage`,children:t(`fields.homepage`)}),k(S,{placeholder:`https://example.org/homepage`,type:`text`,id:`provider-homepage`,value:u,onChange:e=>d(e.target.value)})]}),u?k(`div`,{children:k(T,{containerId:`homepageLabel`,focusId:`homepageLabel_`,label:n(`form.homepageLabel`),fields:m,onSave:e=>h(e.toInternationalString())})}):null,A(C,{$fluid:!0,children:[k(w,{$margin:!1,htmlFor:`provider-url`,children:n(`form.providerId`)}),k(`span`,{className:`text-gray-500 text-sm mb-2`,children:n(`form.providerIdHelp`)}),k(S,{placeholder:`https://id.loc.gov/authorities/abc123`,type:`text`,id:`provider-url`,value:i,onChange:e=>o(e.target.value)})]}),k(l,{primary:!0,large:!0,type:`button`,onPress:()=>{e.runCreate({url:i,label:s,homepage:u,homepageLabel:m,logo:f})},children:n(`form.addProvider`)})]})})}const qe=r({id:`@manifest-editor/provider`,label:`Provider`,labelMessage:{namespace:`editor-api`,key:`fields.provider`},icon:k(`svg`,{width:`1em`,height:`1em`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`,children:k(`path`,{d:`m3 9 9-6 9 6H3ZM3 21h18M5 10v8m5-8v8m4-8v8m5-8v8`})}),summary:`Add the organisation responsible for providing this resource.`,summaryMessage:{namespace:`creators`,key:`definitions.provider.summary`},resourceType:`Agent`,resourceFields:[`id`,`type`,`label`],supports:{parentTypes:[`Manifest`,`Collection`],parentFields:[`provider`],initialData:!0},create:Ge,render(e){return k(Ke,{...e})}});function P(e){try{let t=new URL(e);return t.protocol===`http:`||t.protocol===`https:`}catch{return!1}}async function Je(e,t){if(!P(e))return null;try{return await t.json(e)}catch{return null}}function Ye(e){let t=e?.type||e?.[`@type`];return t===`sc:Manifest`?`Manifest`:t===`sc:Collection`?`Collection`:t}function Xe(e){let t=Ye(e);return e?.protocol===`http://iiif.io/api/image`||t===`ImageService`||typeof t==`string`&&t.startsWith(`ImageService`)}async function Ze(e){return P(e)&&await pe(e)}async function F(e,t){try{return await t.contentType(e)}catch{return``}}function I(e,t){let n=new URL(e).pathname.toLowerCase();return t.some(e=>n.endsWith(e))}const Qe=e=>A(`svg`,{...e,viewBox:`4 4 16 16`,xmlns:`http://www.w3.org/2000/svg`,height:`1em`,width:`1em`,children:[e.title?k(`title`,{children:e.title}):null,k(`path`,{d:`M0 0h24v24H0z`,fill:`none`}),k(`path`,{d:`M8 5v14l11-7z`,fill:`currentColor`})]}),$e=e=>A(`svg`,{...e,viewBox:`4 4 16 16`,xmlns:`http://www.w3.org/2000/svg`,height:`1em`,width:`1em`,children:[e.title?k(`title`,{children:e.title}):null,k(`path`,{d:`M0 0h24v24H0z`,fill:`none`}),k(`path`,{fill:`currentColor`,d:`M6 19h4V5H6v14zm8-14v14h4V5h-4z`})]}),et=({title:e,...t})=>A(`svg`,{...t,xmlns:`http://www.w3.org/2000/svg`,height:`1em`,width:`1em`,viewBox:`2 2 20 20`,children:[e?k(`title`,{children:e}):null,k(`path`,{d:`M0 0h24v24H0z`,fill:`none`}),k(`path`,{fill:`currentColor`,d:`M3 9v6h4l5 5V4L7 9H3zm13.5 3A4.5 4.5 0 0 0 14 7.97v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z`})]}),tt=({title:e,...t})=>A(`svg`,{...t,xmlns:`http://www.w3.org/2000/svg`,height:`1em`,width:`1em`,viewBox:`2 2 20 20`,children:[e?k(`title`,{children:e}):null,k(`path`,{d:`M0 0h24v24H0z`,fill:`none`}),k(`path`,{fill:`currentColor`,d:`M18.5 12c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM5 9v6h4l5 5V4L9 9H5z`})]}),nt=({title:e,...t})=>A(`svg`,{...t,xmlns:`http://www.w3.org/2000/svg`,height:`1em`,width:`1em`,viewBox:`2 2 20 20`,children:[e?k(`title`,{children:e}):null,k(`path`,{d:`M0 0h24v24H0z`,fill:`none`}),k(`path`,{fill:`currentColor`,d:`M16.5 12A4.5 4.5 0 0 0 14 7.97v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51A8.796 8.796 0 0 0 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3 3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06a8.99 8.99 0 0 0 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4 9.91 6.09 12 8.18V4z`})]}),rt=j.div`
|
|
2
2
|
background: #ededed; // Not in variable.
|
|
3
3
|
display: flex;
|
|
4
4
|
padding: 0.5em;
|
|
5
5
|
align-items: center;
|
|
6
|
-
`,
|
|
6
|
+
`,it=j.button`
|
|
7
7
|
cursor: pointer;
|
|
8
8
|
padding: 0.75em 1.5em;
|
|
9
9
|
font-size: 0.938em;
|
|
@@ -14,7 +14,7 @@ import{n as e,t}from"./iiif-browser-output-DSDX-M6m.js";import{creatorHelper as
|
|
|
14
14
|
display: inline-block;
|
|
15
15
|
vertical-align: top;
|
|
16
16
|
white-space: nowrap;
|
|
17
|
-
`,
|
|
17
|
+
`,at=j(it)`
|
|
18
18
|
width: 2em;
|
|
19
19
|
height: 2em;
|
|
20
20
|
overflow: hidden;
|
|
@@ -28,17 +28,17 @@ import{n as e,t}from"./iiif-browser-output-DSDX-M6m.js";import{creatorHelper as
|
|
|
28
28
|
&:disabled {
|
|
29
29
|
color: #999;
|
|
30
30
|
}
|
|
31
|
-
|
|
31
|
+
`,ot=j.div`
|
|
32
32
|
margin: 0 1em;
|
|
33
33
|
font-size: 0.85em;
|
|
34
34
|
color: #000;
|
|
35
|
-
`,
|
|
35
|
+
`,st=j.div`
|
|
36
36
|
flex: 1 1 0px;
|
|
37
37
|
height: 6px;
|
|
38
38
|
display: flex;
|
|
39
39
|
position: relative;
|
|
40
40
|
padding: 15px 0;
|
|
41
|
-
`,
|
|
41
|
+
`,ct=j.div`
|
|
42
42
|
background: #d85680;
|
|
43
43
|
height: 6px;
|
|
44
44
|
pointer-events: none;
|
|
@@ -47,7 +47,7 @@ import{n as e,t}from"./iiif-browser-output-DSDX-M6m.js";import{creatorHelper as
|
|
|
47
47
|
left: 0;
|
|
48
48
|
border-radius: 3px;
|
|
49
49
|
transition: width 200ms;
|
|
50
|
-
`,
|
|
50
|
+
`,lt=j.div`
|
|
51
51
|
position: absolute;
|
|
52
52
|
top: 13px;
|
|
53
53
|
left: 0;
|
|
@@ -56,7 +56,7 @@ import{n as e,t}from"./iiif-browser-output-DSDX-M6m.js";import{creatorHelper as
|
|
|
56
56
|
width: 100%;
|
|
57
57
|
pointer-events: none;
|
|
58
58
|
background: #fff;
|
|
59
|
-
`,
|
|
59
|
+
`,ut=j(it)`
|
|
60
60
|
width: 2em;
|
|
61
61
|
height: 2em;
|
|
62
62
|
overflow: hidden;
|
|
@@ -65,22 +65,22 @@ import{n as e,t}from"./iiif-browser-output-DSDX-M6m.js";import{creatorHelper as
|
|
|
65
65
|
border-radius: 3px;
|
|
66
66
|
padding: 0;
|
|
67
67
|
margin: 0;
|
|
68
|
-
`,
|
|
68
|
+
`,dt=j.div`
|
|
69
69
|
display: flex;
|
|
70
70
|
align-items: center;
|
|
71
|
-
`,
|
|
71
|
+
`,ft=j.div`
|
|
72
72
|
width: 0;
|
|
73
73
|
overflow: hidden;
|
|
74
74
|
transition: width 500ms;
|
|
75
75
|
color: #4a473f; // Not in colours
|
|
76
76
|
|
|
77
|
-
${e=>e.$isOpen&&
|
|
77
|
+
${e=>e.$isOpen&&Te`
|
|
78
78
|
width: 150px;
|
|
79
79
|
`}
|
|
80
|
-
`,
|
|
80
|
+
`,pt=j.input.attrs({type:`range`})`
|
|
81
81
|
width: 120px;
|
|
82
82
|
margin: 0 15px;
|
|
83
|
-
`;function
|
|
83
|
+
`;function mt(e){return k(`svg`,{width:`1em`,height:`1em`,viewBox:`0 0 42 42`,xmlns:`http://www.w3.org/2000/svg`,stroke:`currentColor`,...e,children:A(`g`,{transform:`translate(2 2)`,strokeWidth:5,fill:`none`,fillRule:`evenodd`,children:[k(`circle`,{strokeOpacity:.5,cx:18,cy:18,r:18}),k(`path`,{d:`M36 18c0-9.94-8.06-18-18-18`,children:k(`animateTransform`,{attributeName:`transform`,type:`rotate`,from:`0 18 18`,to:`360 18 18`,dur:`1s`,repeatCount:`indefinite`})})]})})}const ht=Te`
|
|
84
84
|
clip: rect(1px, 1px, 1px, 1px);
|
|
85
85
|
clip-path: inset(50%);
|
|
86
86
|
height: 1px;
|
|
@@ -89,11 +89,11 @@ import{n as e,t}from"./iiif-browser-output-DSDX-M6m.js";import{creatorHelper as
|
|
|
89
89
|
overflow: hidden;
|
|
90
90
|
padding: 0;
|
|
91
91
|
position: absolute;
|
|
92
|
-
`,
|
|
93
|
-
${
|
|
94
|
-
`;function
|
|
95
|
-
`);i&&a.push(await t.create(`@manifest-editor/html-body-creator`,{language:r,body:i},{parent:{resource:n,property:`items`}}))}let o=await t.create(`@manifest-editor/image-url-creator`,{url:e.imageUrl},{parent:{resource:n,property:`body`}});if(o&&a.push(o),r===`Annotation`)return t.embed({...n,motivation:e.motivation||t.options.initialData?.motivation||`painting`,body:a,target:t.getTarget()});if(r===`Canvas`){let r=t.generateId(`canvas`),i=t.generateId(`annotation-page`,{id:r,type:`Canvas`}),o=t.embed({...n,motivation:`painting`,body:a,target:{type:`SpecificResource`,source:{id:r,type:`Canvas`}}}),s=t.embed({id:i,type:`AnnotationPage`,items:[o]});return t.embed({id:r,type:`Canvas`,label:e.label||{en:[`Untitled HTML canvas`]},height:e.height||1e3,width:e.width||1e3,items:[s]})}}function
|
|
96
|
-
`);i&&a.push(await t.create(`@manifest-editor/html-body-creator`,{language:r,body:i},{parent:{resource:n,property:`items`}}))}if(r===`Annotation`)return t.embed({...n,motivation:e.motivation||t.options.initialData?.motivation||`painting`,body:a,target:t.getTarget()});if(r===`Canvas`){let r=t.generateId(`canvas`),i=t.generateId(`annotation-page`,{id:r,type:`Canvas`}),o=t.embed({...n,motivation:`painting`,body:a,target:{type:`SpecificResource`,source:{id:r,type:`Canvas`}}}),s=t.embed({id:i,type:`AnnotationPage`,items:[o]});return t.embed({id:r,type:`Canvas`,label:e.label||{en:[`Untitled HTML canvas`]},height:e.height||1e3,width:e.width||1e3,items:[s]})}}function vt(e){let[t,n]=Te({key:`bodyValue`,initialValue:e.options.initialData?.body||{en:[``]},requestId:e.options.initialData?.requestId}),r=o(t).trim()===``;return O(ce,{children:[D(p,{className:`border-none`,value:t.en?.[0]||``,onChange:e=>n({en:[e]})}),D(s,{primary:!0,type:`button`,onPress:()=>{e.runCreate({body:t})},isDisabled:r,children:`Create`})]})}const yt=r({id:`@manifest-editor/html-annotation`,create:_t,label:`HTML`,summary:`HTML annotation`,icon:D(m,{}),render(e){return D(vt,{...e})},resourceType:`Annotation`,resourceFields:[`id`,`type`,`motivation`,`body`,`target`],additionalTypes:[`Canvas`],supports:{initialData:!0,parentTypes:[`AnnotationPage`,`Manifest`],parentFields:[`items`]},staticFields:{type:`Annotation`}}),F={canvasInteraction:!0,spatial:!0,async run(e,{vault:t,options:n}){if(e&&e.type===`Annotation`&&n.targetType===`Annotation`){let n=t.get(e),r=n.target;if(!(r&&r.source?.type===`Canvas`))return;let i=r.source,a=t.get(i);if(!a.items)return;let o=t.get(a.items[0]);if(!o||o.items.length<2&&!a.behavior.includes(`multi-image`))return;let s=t.get(n.body)[0],c=n.body[0]?.selector,l=(s.service||[]).find(e=>je(e));l&&l.width&&l.height&&(l.width!==s.width&&t.modifyEntityField({id:s.id,type:`ContentResource`},`width`,l.width),l.height!==s.height&&t.modifyEntityField({id:s.id,type:`ContentResource`},`height`,l.height));let u=l?.width||s.width,d=l?.height||s.height;if(c&&(c.type===`iiif:ImageApiSelector`||c.type===`ImageApiSelector`)&&c.region){let[e,t,n,r]=c.region.split(`,`);u=Number(n)||u,d=Number(r)||d}let f=new Ne({vault:t,reference:e}),p=ie(a,{width:u,height:d},.6);f.annotation.target.setPosition(p)}}},I={canvasInteraction:!0,spatial:!0,async run(e,{vault:t,options:n}){if(e&&e.type===`Annotation`&&n.targetType===`Annotation`){let n=t.get(e),r=n.target;if(!(r&&r.source?.type===`Canvas`))return;let i=r.source,a=t.get(i);if(!a.items||a.behavior.includes(`multi-image`))return;let o=t.get(a.items[0]);if(!o||o.items.length>1)return;let s=t.get(n.body);if(s.length!==1)return;let c=s[0],l=n.body[0]?.selector,u=(c.service||[])[0],d=u?.width||c.width,f=u?.height||c.height,p=c.duration||u?.duration;if(l&&(l.type===`iiif:ImageApiSelector`||l.type===`ImageApiSelector`)&&l.region){let[e,t,n,r]=l.region.split(`,`);d=Number(n)||d,f=Number(r)||f}let m=new Ne({vault:t,reference:i});t.batch(()=>{d!==void 0&&m.technical.width.set(d),f!==void 0&&m.technical.height.set(f),p!==void 0&&m.technical.duration.set(p)})}}};var bt=Object.defineProperty,xt=(e,t,n)=>t in e?bt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,L=(e,t,n)=>(xt(e,typeof t==`symbol`?t:t+``,n),n);function R(e){return e.endsWith(`info.json`)?e:e.endsWith(`/`)?`${e}info.json`:`${e}/info.json`}var St=`http://library.stanford.edu/iiif/image-api/compliance.html#level0`,Ct=`http://library.stanford.edu/iiif/image-api/compliance.html#level1`,wt=`http://library.stanford.edu/iiif/image-api/compliance.html#level2`,Tt=`http://library.stanford.edu/iiif/image-api/conformance.html#level0`,Et=`http://library.stanford.edu/iiif/image-api/conformance.html#level1`,Dt=`http://library.stanford.edu/iiif/image-api/conformance.html#level2`,Ot=`http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level0`,kt=`http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level1`,At=`http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2`,jt=`http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level0`,Mt=`http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level1`,Nt=`http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level2`,Pt=`http://iiif.io/api/image/1/level0.json`,Ft=`http://iiif.io/api/image/1/profiles/level0.json`,It=`http://iiif.io/api/image/1/level1.json`,Lt=`http://iiif.io/api/image/1/profiles/level1.json`,Rt=`http://iiif.io/api/image/1/level2.json`,zt=`http://iiif.io/api/image/1/profiles/level2.json`,Bt=`http://iiif.io/api/image/2/level0.json`,Vt=`http://iiif.io/api/image/2/profiles/level0.json`,Ht=`http://iiif.io/api/image/2/level1.json`,Ut=`http://iiif.io/api/image/2/profiles/level1.json`,Wt=`http://iiif.io/api/image/2/level2.json`,Gt=`http://iiif.io/api/image/2/profiles/level2.json`,Kt=`level0`,qt=`level1`,Jt=`level2`,Yt=`http://iiif.io/api/image/2/level0`,Xt=`http://iiif.io/api/image/2/level1`,Zt=`http://iiif.io/api/image/2/level2`,Qt=[Zt,wt,Dt,At,Nt,Rt,zt,Wt,Gt,Jt],$t=[...Qt,Xt,Ct,Et,kt,Mt,It,Lt,Ht,Ut,qt],en=[Yt,Xt,Zt,St,Ct,wt,Tt,Et,Dt,Ot,kt,At,jt,Mt,Nt,Pt,Ft,It,Lt,Rt,zt,Bt,Vt,Ht,Ut,Wt,Gt,Kt,qt,Jt],tn={extraFormats:[`jpg`],extraQualities:[`default`],extraFeatures:[`sizeByWhListed`]},nn={extraFormats:[`jpg`],extraQualities:[`default`],extraFeatures:[`baseUriRedirect`,`cors`,`jsonldMediaType`,`regionByPx`,`regionSquare`,`sizeByWhListed`,`sizeByH`,`sizeByW`,`sizeByWh`]},rn={extraFormats:[`jpg`,`png`],extraQualities:[`default`],extraFeatures:[`baseUriRedirect`,`cors`,`jsonldMediaType`,`regionByPct`,`regionByPx`,`regionSquare`,`rotationBy90s`,`sizeByWhListed`,`sizeByConfinedWh`,`sizeByH`,`sizeByPct`,`sizeByW`,`sizeByWh`]};function an(e){return Qt.indexOf(e)===-1?$t.indexOf(e)===-1?tn:nn:rn}function on(e){let t=e?Array.isArray(e.profile)?e.profile:[e.profile]:[],n={extraQualities:[],extraFormats:[],extraFeatures:[]};for(let e of t)if(typeof e==`string`&&(e=an(e)),e){if(e.formats)for(let t of e.formats)n.extraFormats.indexOf(t)===-1&&n.extraFormats.push(t);if(e.qualities)for(let t of e.qualities)n.extraQualities.indexOf(t)===-1&&n.extraQualities.push(t);if(e.supports)for(let t of e.supports)n.extraFeatures.indexOf(t)===-1&&n.extraFeatures.push(t);if(e.maxHeight&&(n.maxHeight=e.maxHeight),e.maxWidth&&(n.maxWidth=e.maxWidth),e.maxArea&&(n.maxArea=e.maxArea),e.extraFormats)for(let t of e.extraFormats)n.extraFormats.indexOf(t)===-1&&n.extraFormats.push(t);if(e.extraQualities)for(let t of e.extraQualities)n.extraQualities.indexOf(t)===-1&&n.extraQualities.push(t);if(e.extraFeatures)for(let t of e.extraFeatures)n.extraFeatures.indexOf(t)===-1&&n.extraFeatures.push(t);e.maxHeight&&(n.maxHeight=e.maxHeight),e.maxWidth&&(n.maxWidth=e.maxWidth),e.maxArea&&(n.maxArea=e.maxArea)}if(e.extraFormats)for(let t of e.extraFormats)n.extraFormats.indexOf(t)===-1&&n.extraFormats.push(t);if(e.extraFeatures)for(let t of e.extraFeatures)n.extraFeatures.indexOf(t)===-1&&n.extraFeatures.push(t);if(e.extraQualities)for(let t of e.extraQualities)n.extraQualities.indexOf(t)===-1&&n.extraQualities.push(t);return n}function sn(e){try{if(e===`full`)return{full:!0};if(e===`square`)return{square:!0};let t=e.startsWith(`pct:`),n=e.substr(t?4:0).split(`,`).map(e=>parseFloat(e));return{x:n[0],y:n[1],w:n[2],h:n[3],percent:t}}catch{throw Error(`Expected 'full', 'square' or 'x,y,w,h'. Found `+e)}}function cn(e){let t={upscaled:!1,max:!1,confined:!1};if(e[0]===`^`&&(t.upscaled=!0,e=e.slice(1)),e===`max`||e===`full`)return t.max=!0,t.serialiseAsFull=e===`full`,t;if(e[0]===`!`&&(t.confined=!0,e=e.slice(1)),e[0]===`p`)return t.percentScale=parseFloat(e.slice(4)),t;let n=e.split(`,`).map(e=>e.trim());return n.length&&typeof n[0]<`u`&&(n[0]!==``&&(t.width=parseInt(n[0],10)),typeof n[1]<`u`&&n[1]!==``?(t.height=parseInt(n[1],10),t.version=2):t.version=3),t}function ln(e){let t={angle:0};if(e[0]===`!`&&(t.mirror=!0,e=e.substr(1)),t.angle=parseFloat(e)%360,Number.isNaN(t.angle))throw Error(`Invalid rotation ${e}`);return t}function un(e,t=``){let n=e.match(/^(([a-zA-Z]+):\/\/([^/]+))?((.*)+)/);if(!n)throw Error(`Invalid or unknown input ${e}`);let r=n[2],i=n[3],a=n[4];if(a[0]===`/`&&(a=a.substring(1)),t.length>0){if(t[0]===`/`&&(t=t.substring(1)),t!==a.substring(0,t.length))throw Error(`Path does not start with prefix (path: ${a}, prefix: ${t})`);a=a.substring(t.length)}return{scheme:r,server:i,path:a,prefix:t}}function dn(e,t=``){let{path:n,scheme:r,server:i,prefix:a}=un(e,t),o=(n||``).split(`/`).reverse(),[s,c,l,u,...d]=o,f=d.reverse().filter(Boolean).join(`/`);if(o.length===1||s===``)return{type:`base`,scheme:r,server:i,prefix:a,identifier:f};if(s===`info.json`){let[,...e]=o;return{type:`info`,scheme:r,server:i,prefix:a,identifier:e.reverse().filter(Boolean).join(`/`)}}let p=(s||``).split(`.`);if(typeof p[1]>`u`||typeof p[0]>`u`||typeof u>`u`||typeof l>`u`||typeof c>`u`)throw Error(`Invalid image request`);return{type:`image`,scheme:r,server:i,prefix:a,identifier:f,originalPath:n,region:sn(u),size:cn(l),rotation:ln(c),quality:p[0],format:p[1]}}function fn(e){let t=dn(R(e.id));if(t.type!==`info`)throw Error(`Invalid service URL`);let n=on(e);return{identifier:t.identifier,originalPath:``,server:t.server,prefix:t.prefix,scheme:t.scheme,type:`image`,quality:n.extraQualities.indexOf(`default`)===-1?n.extraQualities[0]:`default`,region:{full:!0},size:{max:!0,upscaled:!1,confined:!1},format:`jpg`,rotation:{angle:0}}}function pn(e,t,n){let r=n.length,i=[];for(let t=0;t<r;t++){let r=n[t];if(r){let t=r.width;i.push(e/t)}}return i}function mn(e,t,n){let r=n.length,i=[];for(let a=0;a<r;a++){let r=n[a];r&&i.push({width:Math.floor(e/r),height:Math.floor(t/r)})}return i}function z(e){if(e[`@id`])return e[`@id`];if(e.id)return e.id}function B(e){if(!e||!e.profile||!z(e))return!1;let t=Array.isArray(e.profile)?e.profile:[e.profile];for(let e of t)if(typeof e==`string`&&en.indexOf(e)!==-1)return!0;return!1}function hn(e){if(!B(e))return!1;let t=Array.isArray(e.profile)?e.profile:[e.profile];for(let e of t)if(typeof e==`string`){if($t.indexOf(e)!==-1)return!0}else{let t=[...e.supports||[],...e.extraFeatures||[]];if(t.indexOf(`regionByPx`)!==-1&&(t.indexOf(`sizeByW`)!==-1||t.indexOf(`sizeByWh`)!==-1))return!0}return!1}function V(e,t){if(t&&t.profile){let n=t.profile;if(n){let t=Array.isArray(n)?n:[n];return t.includes(`level${e}`)||t.includes(`http://iiif.io/api/image/2/level${e}.json`)||t.includes(`http://iiif.io/api/image/1/level${e}.json`)||t.includes(`http://iiif.io/api/image/1/profiles/level${e}.json`)}}return!1}function H(e){return B(e)?V(0,e)?0:V(1,e)?1:V(2,e)?2:null:null}function gn(e){return(e[`@context`]?Array.isArray(e[`@context`])?e[`@context`]:[e[`@context`]]:[]).indexOf(`http://iiif.io/api/image/3/context.json`)!==-1}function _n(e){if(!hn(e))return[];let t=[],n=Array.isArray(e.profile)?e.profile:[e.profile],r=n.length;for(let t=0;t<r;t++){let r=n[t];if(r&&typeof r!=`string`&&(r.maxHeight||r.maxWidth))return[{id:z(e),type:`variable`,minWidth:0,minHeight:0,maxHeight:r.maxHeight||r.maxWidth,maxWidth:r.maxWidth||r.maxHeight,level:H(e),version:e[`@context`]===`http://iiif.io/api/image/3/context.json`?3:2}]}if(e.tiles){let n=e.tiles.length;for(let r=0;r<n;r++){let n=e.tiles[r];n&&(n.height||n.width)&&t.push({id:z(e),type:`variable`,minHeight:0,minWidth:0,maxHeight:n.height||n.width,maxWidth:n.width,level:H(e),version:gn(e)?3:2})}}return t}function vn(e){let t=e.match(/^.*\/(full)\/(((\d+),(\d+)?)|max)\/(\d+)\/default\.(jpg|png|jpeg)$/);if(t&&t[4]&&t[5]){let n=t[1],r=parseInt(t[4],10),i=parseInt(t[5],10),a=t[7];if((n===`max`||n===`full`)&&r&&i&&a)return{type:`fixed`,id:e,height:i,width:r}}return{type:`unknown`,id:e}}function yn(e){if(e[`@type`])return e[`@type`];if(e.type)return e.type}function bn(e){if(typeof e==`string`)return vn(e);let t=yn(e);if(t!==`Image`&&t!==`sc:Image`)return null;let n=e,r=z(n);return r?r&&n.width&&n.height?{id:r,type:`fixed`,width:n.width,height:n.height,unsafe:!0}:vn(r):null}function xn(e){return B(e)?(e&&e.sizes?e.sizes:[]).map(t=>({id:z(e),type:`fixed-service`,height:t.height,width:t.width,level:H(e),version:gn(e)?3:2})):[]}function Sn(e){let t=[],n=e.length;for(let r=0;r<n;r++){let n=e[r];if(!n)continue;let i=xn(n);i.length&&t.push(...i);let a=_n(n);a.length&&t.push(...a)}return t}function Cn(e){let t=e.service?Array.isArray(e.service)?e.service:[e.service]:[],n=t.length,r=[];for(let e=0;e<n;e++)B(t[e])&&r.push(t[e]);return r}function wn(e,t=!0,n){let r=[],i=bn(e);if(i===null)return r;let a=e;if(r.push(i),t&&a&&a.width&&a.height){let e=[],t=Cn(a);for(let r of t){let t={id:z(r),width:a.width,height:a.height};if(n.canLoadSync(t)){let r=n.loadServiceSync(t);r&&(r.height||(r.height=a.height),r.width||(r.width=a.width),e.push(...Sn([r])))}}if(e.length)return r.push(...e),r}return a.service&&r.push(...Sn(a.service)),r}function Tn({x:e=0,y:t=0,w:n,h:r,full:i,square:a,percent:o}){if(i)return`full`;if(a)return`square`;if(typeof n>`u`||typeof r>`u`)throw Error(`RegionParameter: invalid region`);let s=`${e},${t},${n},${r}`;return o?`pct:${s}`:s}function En({max:e,percentScale:t,upscaled:n,confined:r,width:i,height:a,serialiseAsFull:o,version:s}){let c=[];return n&&c.push(`^`),e?(c.push(o?`full`:`max`),c.join(``)):(r&&c.push(`!`),t&&c.push(`pct:${t}`),i&&c.push(`${i}`),c.push(`,`),a&&s===3&&c.push(`${a}`),c.join(``))}function Dn(e){return`${e.mirror?`!`:``}${(e.angle||0)%360}`}function On(e,t){let n=e.prefix.startsWith(`/`)?e.prefix.substr(1):e.prefix,r=`${e.scheme}://${e.server}/${n?`${n}/`:``}${e.identifier}`;if(e.type===`base`)return r;if(e.type===`info`)return`${r}/info.json`;let{size:i}=e,{region:a,rotation:o,format:s,quality:c}=e;if(t){let e=t[`@context`]?Array.isArray(t[`@context`])?t[`@context`]:[t[`@context`]]:[],n=e.indexOf(`http://iiif.io/api/image/2/context.json`)!==-1,r=e.indexOf(`http://iiif.io/api/image/3/context.json`)!==-1;if((i.width===t.width&&!i.height||i.height===t.height&&!i.width||i.width===t.width&&i.height===t.height)&&(i={...i,max:!0}),n&&(i.max&&!i.serialiseAsFull&&(i={...i,serialiseAsFull:!0}),!i.max&&i.width&&i.height&&(i={...i,height:void 0}),i={...i,version:2}),r){if(i.max&&i.serialiseAsFull&&(i={...i,serialiseAsFull:!1}),i.width&&!i.height&&t.width&&t.height){let e=t.height/t.width;i={...i,height:Math.ceil(i.width*e)}}i={...i,version:3}}}return[r,Tn(a),En(i),Dn(o),`${c}.${s}`].filter(Boolean).join(`/`)}function U(e,t,n){let r=fn({"@context":e.version===3?`http://iiif.io/api/image/3/context.json`:`http://iiif.io/api/image/2/context.json`,id:R(z(e)),profile:e.level===null||typeof e.level>`u`?`level0`:`level${e.level}`,type:e.version===3?`ImageService3`:`ImageService2`});if(r.type!==`image`)throw Error(`Invalid service`);return r.size.max=!1,r.size.width=t,r.size.height=n,{id:On(r),type:`fixed`,width:t,height:n||e.height/(e.width||1)*t,unsafe:e.width>t}}function W(e){let t=e.replace(/(https?:\/\/)?(www.)?/i,``);return t.indexOf(`/`)===-1?t:t.split(`/`)[0]}function kn(e,t,n){let r=e.width?e.width:e.maxWidth;return n.height<=e.maxHeight&&n.width<=e.maxWidth&&n.height>=e.minHeight&&n.width>=e.minWidth&&(!t||Math.abs(n.width-r)<Math.abs(t.width-r))}function An(e,t){let n=[],r=Object.assign({unsafeImageService:!1,atAnyCost:!0,fallback:!0,minHeight:64,minWidth:64,maxHeight:1/0,maxWidth:1/0,returnAllOptions:!1,preferFixedSize:!1,allowUnsafe:!1,explain:!1,height:0,width:0},e),i=(e,t=0)=>r.explain?n.push(Array(t).fill(0).map(e=>` `).join(``)+e().trim()):void 0,a=[],o=[],s=null;i(()=>`Using configuration: ${JSON.stringify(r,null,2)}`);let c=(e,t)=>{if(i(()=>`Swapping choice`,3),kn(r,t,e)){if(r.preferFixedSize&&e.unsafe){i(()=>`We found an image that was marked as unsafe, but it was the best size. (${e.id})`,4),o.push(e);return}r.returnAllOptions&&t&&o.push(t),i(()=>`We found a new image that was the best size. (${e.id})`,4),s=e}else r.returnAllOptions&&o.push(e)};i(()=>`The input shows we have ${t.length} list(s) of candidates to choose from.`);let l=t.length;for(let e=0;e<l;e++){let n=t[e]();i(()=>`Candidate group ${e}: ${JSON.stringify(n,null,2)}`,1);let o=n.length;i(()=>`Checking candidate list number ${e} and found ${o} potential ways of creating image(s)`,1);for(let e=0;e<o;e++){let t=n[e];i(()=>`-> Checking candidate ${e}`,1),t.type===`unknown`&&r.atAnyCost&&(i(()=>`We've found an unknown image type, adding this to the "last resort" list`,2),a.push(t)),t.type===`fixed`&&(t.unsafe?(i(()=>`We've found an unsafe fixed image type, adding this to the "last resort" list`,2),a.push(t)):(i(()=>`We've found a fixed size image, checking if it matches the request`,2),c(t,s))),t.type===`fixed-service`&&(r.unsafeImageService?(i(()=>`Checking for an image from the tile source, without calculating the right height and width (unsafeImageService)`,2),c(U(t,r.width,r.height),s)):(i(()=>`Checking for an image from the tile source 3`,2),c(U(t,t.width,t.height),s))),t.type===`variable`&&t.maxWidth&&c(U({id:t.id,type:`fixed-service`,width:t.maxWidth,height:t.maxWidth,level:t.level,version:t.version},t.maxWidth),s)}if(s&&!r.returnAllOptions){if(s.unsafe||r.allowUnsafe)continue;i(()=>`We found a match in choice list number ${e}, no searching any more`);break}}return r.atAnyCost&&o.length===0?(i(()=>s?`We found an image! ${s.id} of type ${s.type}`:`We found no images, but "atAnyCost" is set, so returning that`),{best:s||a[0]||null,fallback:a.slice(1),log:n}):r.returnAllOptions?(i(()=>`Returning all options that we have found`),{best:(r.atAnyCost?s||o[0]||a[0]:s||o[0])||null,fallback:[...o,...a],log:n}):(i(()=>`Returning the best image that we found, and a fallback`),{best:s||o[0]||null,fallback:s?o:o.slice(1),log:n})}function jn(e,t,n){let r=e>t?e:t,i=n.length,a=[];for(let e=0;e<i;e++){let t=n[e];if(!t||t.scaleFactors.length===0)continue;let i=t.scaleFactors[0];if(!i)continue;let o=r/i,s=[i];for(;o>=t.width;)i*=2,s.push(i),o/=2;a.push({...t,scaleFactors:s})}return a}function Mn(e,t){if(e.length!==t.length)return!1;if(e.length===0&&t.length===0)return!0;let n=e.length,r=!0;for(let i=0;i<n;i++){let n=e[i],a=t[i];if(n.width!==a.width||n.height!==a.height){r=!1;break}}if(r)return!0;let i=0;for(let r=0;r<n;r++)for(let a=0;a<n;a++)if(e[r].width===t[a].width&&e[r].height===t[a].height){i++;break}return i===n}function Nn(e){return V(0,e)}new class{constructor(e={}){L(this,`config`,{verificationsRequired:1,approximateServices:!1,enableFetching:!0,disableThrottling:!1}),L(this,`fetchingCount`,0),L(this,`imageServices`,{}),L(this,`knownImageServers`,{}),this.config=Object.assign(this.config,e)}setConfig(e){Object.assign(this.config,e)}sample(e,t,n=!0){let r=W(z(e)),i=R(z(e)),a=this.knownImageServers[r];return this.imageServices[i]=Object.assign(e,{real:!0}),!a&&e.tiles&&!Nn(e)?(this.knownImageServers[r]={verifications:0,malformed:!1,root:r,preLoaded:n,sampledId:z(e),verified:!1,server:null,result:{context:e[`@context`]||[],sampledProfile:e.profile,resourceServiceRatio:t&&e.height?t.height/e.height:1,sampledSizes:e.sizes||[],sizeRatios:pn(e.width,e.height,e.sizes||[]),sampledTiles:e.tiles||[]}},!0):this.verify(e)}preLoad(e,t=!0){this.knownImageServers[e.root]=e,t&&(this.knownImageServers[e.root].malformed=!1,this.knownImageServers[e.root].verifications=this.config.verificationsRequired)}predict(e,t=!1,n=!1){let r=e?.source,i=W(z(e)),a=this.knownImageServers[i],o=R(z(e));return this.imageServices[o]?this.imageServices[o]||null:!this.config.approximateServices||!a||!a.result||!(r?.height||e.height)||!(r?.width||e.width)||!n&&(a.malformed||a.verifications<this.config.verificationsRequired)||Nn(e.source)?null:(this.imageServices[o]||(this.imageServices[o]={"@context":a.result.context,"@id":z(e),id:z(e),protocol:`http://iiif.io/api/image`,tiles:r?.tiles||jn(e.width,e.height,a.result.sampledTiles),sizes:r?.sizes||mn(Math.round(e.width/a.result.resourceServiceRatio),Math.round(e.height/a.result.resourceServiceRatio),a.result.sizeRatios),profile:r?.profile||a.result.sampledProfile,height:r?.height||e.height,width:r?.width||e.width,real:!1}),this.imageServices[o]||null)}async getThumbnailFromResource(e,t,n=!0,r=[]){let i=e?await this.getImageCandidates(e,n):[];return An(t,[()=>r,()=>i])}async getImageCandidates(e,t=!0){let n=e;if(t&&n&&n.height&&n.width){let e=Cn(n);for(let t of e){let e={id:z(t),width:t.width?t.width:n.width,height:t.height?t.height:n.height,source:t};await this.loadService(e)}}return wn(e,t,this)}async verify(e){let t=this.predict(e,!1,!0),n=await this.fetchService(z(e));if(!t)return!1;let r=t.height===n.height&&t.width===n.width&&t[`@context`]===n[`@context`]&&Mn(t.sizes||[],n.sizes||[]);if(r){let t=W(z(e)),n=this.knownImageServers[t];n&&(n.verifications+=1,n.verifications>=this.config.verificationsRequired&&(n.verified=!0))}return r}canLoadSync(e){let t=typeof e==`string`?e:z(e),n=R(t);if(this.imageServices[n])return!0;let r=this.knownImageServers[W(t)];return!!(r&&!r.malformed&&r.verifications>=this.config.verificationsRequired)}async markAsMalformed(e){return this.knownImageServers[W(z(e))].malformed=!0,this.loadService(e,!0)}async fetchService(e,t=!1){let n=R(e),r=this.imageServices[n];if(r&&(!t||r.real))return r;if(!this.config.enableFetching)throw Error(`Fetching is not enabled`);let i=await this.fetch(n).then(e=>e.json());return!i.id&&i[`@id`]&&(i.id=i[`@id`]),i.id!==e&&(i.id=e,i[`@id`]&&(i[`@id`]=e)),this.imageServices[n]=Object.assign(i,{real:!0}),this.imageServices[n]}async fetch(e,t){return fetch(e,t)}async loadService(e,t=!1){if(!this.config.disableThrottling){let e=!0;for(;e;)if(this.fetchingCount>=this.config.verificationsRequired)await new Promise(e=>setTimeout(e,500));else{e=!1;break}}let n=this.knownImageServers[W(z(e))];if(n&&!n.malformed&&!t){await n.result;let t=this.loadServiceSync(e);if(t)return t}this.fetchingCount++;let r=await this.fetchService(z(e),t);return this.fetchingCount--,r.real&&this.sample(r,e),r}loadServiceSync(e){let t=R(z(e));return this.imageServices[t]?this.imageServices[t]:this.config.approximateServices?this.predict(e):null}};const G={canvasInteraction:!0,spatial:!0,async run(e,{vault:t,options:n}){if(e&&e.type===`Annotation`&&n.targetType===`Annotation`){let n=t.get(e),r=n.target;if(!(r&&r.source?.type===`Canvas`))return;let i=r.source,a=t.get(i);if(!a.items||a.behavior.includes(`multi-image`)||!t.get(a.items[0]))return;let o=Array.isArray(n.body)?n.body[0]:n.body;if(o.type===`SpecificResource`&&o.selector)return;let s=t.get(n.body)[0],c=(s.service||[]).find(e=>B(e));c&&c.width&&c.height&&(c.width!==s.width&&t.modifyEntityField({id:s.id,type:`ContentResource`},`width`,c.width),c.height!==s.height&&t.modifyEntityField({id:s.id,type:`ContentResource`},`height`,c.height))}}};function K(e){let{"@id":t,"@type":n,...r}=e,i=`${e[`@context`]||``} ${e.profile||``}`.match(/\/(?:image|image-api)\/([123])(?:[./])/);return{...r,id:e.id||t,type:e.type||n||`ImageService${i?.[1]||`2`}`}}function Pn(e,t={},n=!1){let r=[];t.compact!==`compact`&&r.push(`width`,`height`),(n||t.includeSizes===!0)&&r.push(`sizes`),(n||t.includeTiles===!0)&&r.push(`tiles`);let i=K(e);return{id:i.id,type:i.type,profile:i.profile,...Object.fromEntries(r.filter(e=>i[e]!==void 0).map(e=>[e,i[e]]))}}async function Fn(e,t){let n=K(e.service),r=ke(n),i=A({identifier:r.identifier,server:r.server,scheme:r.scheme,type:`image`,size:{max:!e.size?.width&&!e.size?.height,confined:!1,upscaled:!1,...e.size||{}},format:`jpg`,region:{full:!0},rotation:{angle:0},quality:`default`,prefix:r.prefix,originalPath:r.originalPath});return t.embed({id:i,type:`Image`,format:e.format||`image/jpeg`,height:e.height||n.height,width:e.width||n.width,service:e.embedService===!1?void 0:[Pn(n,t.config,t.options.parent?.property===`thumbnail`)]})}function q(e){return e.endsWith(`default.jpg`)?A({...Me(e),type:`info`}):Oe(e)}function J(e){let t=e.options.initialData,n=t.url?q(t.url):``,[r,i]=E(n||``);return D(v,{children:O(`form`,{onSubmit:t=>{t.preventDefault();let n=new FormData(t.target),r=Object.fromEntries(n.entries()),i=r.url;if(i){let t=q(i);if(!t)throw Error(`Invalid image service request`);fetch(t).then(e=>e.json()).then(t=>{e.runCreate({url:r.url,service:t})})}},children:[D(`div`,{className:`flex gap-2 items-center`,children:O(S,{$wide:!0,children:[D(C,{htmlFor:`url`,children:`Link to image service`}),D(x,{id:`url`,name:`url`,defaultValue:t.url||``,onPaste:e=>{let t=e.clipboardData.getData(`text/plain`);i(t?q(t):``)},onBlur:e=>i(e.currentTarget.value?q(e.currentTarget.value):``)})]})}),D(`div`,{className:`relative flex z-0 my-5 h-96 min-h-0 min-w-0 overflow-hidden bg-gray-200 rounded items-center justify-center`,children:r.trim()?D(Fe,{fallbackRender:()=>D(`div`,{children:`Invalid service`}),children:D(In,{src:r},r)}):D(`div`,{className:`text-grey-600`,children:`Preview`})}),D(`div`,{children:D(s,{primary:!0,large:!0,type:`submit`,isDisabled:!r,children:`Create`})})]})})}function In({src:e}){let t=me({id:e},{size:{width:512}});return t?D(`div`,{className:`h-full`,children:D(`img`,{className:`w-full h-full object-contain`,src:t})}):D(st,{})}async function Ln(e,t){let r={id:t.generateId(`annotation`),type:`Annotation`},i=t.options.targetType,a=await n(t,`Annotation`,`body`,`@manifest-editor/image-service-creator`)(e,{parent:{resource:r,property:`body`}});if(i===`Annotation`)return{...r,body:[a],motivation:e.motivation||`painting`,target:t.getTarget()};if(i===`Canvas`){let i=t.generateId(`canvas`),o=t.generateId(`annotation-page`,{id:i,type:`Canvas`}),s=t.embed({...r,motivation:`painting`,body:[a],target:{type:`SpecificResource`,source:{id:i,type:`Canvas`}}}),c=t.embed({id:o,type:`AnnotationPage`,items:[s]}),l;return e.service?.sizes&&(l=await n(t,`Canvas`,`thumbnail`,`@manifest-editor/thumbnail-image`)({service:e.service,width:e.thumbnailSize||400})),t.embed({id:i,type:`Canvas`,label:e.label||{en:[`Untitled canvas`]},height:a.resource.height||1e3,width:a.resource.width||1e3,thumbnail:l?[l]:void 0,items:[c]})}}function Rn(e){return D(J,{...e})}const Y=r({id:`@manifest-editor/image-service-creator`,configKey:`iiif-image-services`,create:Fn,label:`Image Service`,summary:`Add an image from Image Service`,icon:D(g,{style:{padding:10}}),tags:[`image`,`image-service`],async supportsResource(e,t){if(!j(e))return!1;let n=q(e);if(!n)return!1;let r=await M(n,t);return Ue(r)?{initialData:{url:e,service:r}}:!1},render(e){return D(J,{...e})},resourceType:`ContentResource`,resourceFields:[`id`,`type`,`height`,`width`,`format`,`service`],supports:{initialData:!0,parentFields:[`logo`,`body`,`thumbnail`,`items`],custom(e,t){return e.property!==`items`||e.resource.type===`ContentResource`&&t.get(e.resource,{skipSelfReturn:!1})?.type===`Choice`}}}),zn=r({id:`@manifest-editor/image-service-annotation`,create:Ln,label:`IIIF Image`,dependencies:[`@manifest-editor/image-service-creator`],summary:`IIIF Image service`,tags:[`image`,`image-service`],icon:D(g,{style:{padding:10}}),render(e){return D(Rn,{...e})},resourceType:`Annotation`,resourceFields:[`id`,`type`,`motivation`,`body`,`target`],additionalTypes:[`Canvas`],supportsResource:Y.supportsResource,supports:{initialData:!0,onlyPainting:!0,parentTypes:[`AnnotationPage`,`Manifest`],parentFields:[`items`]},sideEffects:[G,I,F],staticFields:{type:`Annotation`}});async function Bn(e,t){if(!e.height||!e.width){let t=await we(e.url);t&&(e.height=t.height,e.width=t.width)}return t.embed({id:e.url,type:`Image`,format:e.format||await Ce(e.url),height:e.height,width:e.width,service:e.service?Array.isArray(e.service)?e.service:[e.service]:void 0})}function X(e){let t=e.options.initialData;return D(v,{children:O(`form`,{onSubmit:t=>{t.preventDefault();let n=new FormData(t.target),r=Object.fromEntries(n.entries());r.url&&e.runCreate({url:r.url})},children:[O(S,{$wide:!0,children:[D(C,{htmlFor:`id`,children:`Link to Image`}),D(x,{id:`url`,name:`url`,defaultValue:t.url||``})]}),D(s,{primary:!0,large:!0,type:`submit`,children:`Create`})]})})}async function Vn(e,t){let r={id:t.generateId(`annotation`),type:`Annotation`},i=t.options.targetType,a=await n(t,`Annotation`,`body`,`@manifest-editor/image-url-creator`)(e,{parent:{resource:r,property:`body`}});if(i===`Annotation`)return t.embed({...r,body:[a],motivation:e.motivation||`painting`,target:t.getTarget()});if(i===`Canvas`){let n=t.generateId(`canvas`),i=t.generateId(`annotation-page`,{id:n,type:`Canvas`}),o=t.embed({...r,motivation:`painting`,body:[a],target:{type:`SpecificResource`,source:{id:n,type:`Canvas`}}}),s=t.embed({id:i,type:`AnnotationPage`,items:[o]});return t.embed({id:n,type:`Canvas`,label:e.label||{en:[`Untitled canvas`]},height:a.resource.height||1e3,width:a.resource.width||1e3,items:[s]})}throw Error(`Unsupported target type`)}function Hn(e){return D(X,{...e})}const Un=r({id:`@manifest-editor/image-url-creator`,create:Bn,label:`Image`,summary:`Image from a URL`,icon:D(c,{}),tags:[`image`],async supportsResource(e,t){if(!j(e))return!1;let n=q(e);if(n)try{if(Ue(await t.json(n)))return!1}catch{}let r=await N(e,t);return r.startsWith(`image/`)||P(e,[`.jpg`,`.jpeg`,`.png`,`.gif`,`.webp`])?{initialData:{url:e,format:r||void 0}}:!1},render(e){return D(X,{...e})},resourceType:`ContentResource`,resourceFields:[`format`],supports:{initialData:!0,parentFields:[`logo`,`body`,`thumbnail`,`items`],custom(e,t){return e.property!==`items`||e.resource.type===`ContentResource`&&t.get(e.resource,{skipSelfReturn:!1})?.type===`Choice`}},staticFields:{type:`Image`}}),Wn=r({id:`@manifest-editor/image-url-annotation`,create:Vn,label:`Image`,dependencies:[`@manifest-editor/image-url-creator`],summary:`Image from URL`,tags:[`image`],icon:D(c,{}),render(e){return D(Hn,{...e})},resourceType:`Annotation`,resourceFields:[`id`,`type`,`motivation`,`body`,`target`],additionalTypes:[`Canvas`],supportsResource:Un.supportsResource,supports:{initialData:!0,onlyPainting:!0,parentTypes:[`AnnotationPage`,`Manifest`],parentFields:[`items`]},sideEffects:[G,I,F],staticFields:{type:`Annotation`}});async function Gn(e,t){let r=[],i=n(t,`Annotation`,`body`,`@manifest-editor/image-url-creator`);for(let n of e.images)r.push(await i(n,t.options));return r}function Kn(e){return D(v,{children:O(f.Form,{onSubmit:t=>{t.preventDefault();let n=new FormData(t.target),r=Object.fromEntries(n.entries());r.urls&&e.runCreate({images:r.urls.split(`
|
|
97
|
-
`).map(e=>({url:e}))})},children:[
|
|
98
|
-
`)||``})]}),D(s,{primary:!0,large:!0,type:`submit`,children:`Create`})]})})}async function qn(e,t){let r=[],i=n(t,`AnnotationPage`,`items`,`@manifest-editor/image-url-annotation`);for(let n of e.images)r.push(await i(n,t.options));return r}const Jn=r({id:`@manifest-editor/image-url-list-annotation`,create:qn,label:`List of Images`,dependencies:[`@manifest-editor/image-url-annotation`],summary:`List of Images from URLs`,tags:[`image`],icon:D(_,{}),render(e){return D(Kn,{...e})},resourceType:`Annotation`,resourceFields:[`id`,`type`,`motivation`,`body`,`target`],additionalTypes:[`Canvas`],supports:{onlyPainting:!0,parentTypes:[`AnnotationPage`,`Manifest`],parentFields:[`items`]},sideEffects:[G,I,F],staticFields:{type:`Annotation`}}),Yn=r({id:`@manifest-editor/no-body-annotation`,create:Xn,label:`Annotation without body`,summary:`Add an annotation that only has motivation and target`,icon:D(u,{}),resourceType:`Annotation`,resourceFields:[`id`,`type`,`motivation`,`target`],supports:{initialData:!0,parentTypes:[`AnnotationPage`],parentFields:[`items`],disallowPainting:!0},actionButton:`Create empty annotation`,sideEffects:[],staticFields:{type:`Annotation`}});function Xn(e,t){return t.embed({id:t.generateId(`annotation`),type:`Annotation`,label:e?.label,motivation:e.motivation||t.options.initialData?.motivation||`highlighting`,target:t.getTarget()})}function Zn({media:e,onError:t,duration:n,onDuration:r,onDimensions:i}){let[{element:a,currentTime:o,progress:s},c,l]=ye({duration:n});return O(de,{element:a,state:c,actions:l,currentTime:o,progress:s,children:[D(`div`,{style:{maxHeight:400,aspectRatio:`${e.width}/${e.height}`,position:`relative`},children:D(ue.VideoHTML,{element:a,media:e,playPause:l.playPause})}),D(ut,{onError:t,onDuration:r,onDimensions:i})]})}async function Qn(e,t){let n={id:t.generateId(`annotation`),type:`Annotation`},r=t.options.targetType,i=t.embed({id:e.url,type:`Video`,format:`video/mp4`,width:e.width,height:e.height,duration:e.duration||0});if(r===`Annotation`)return t.embed({...n,label:o(e.label)&&e.label,motivation:e.motivation||t.options.initialData?.motivation||`painting`,body:i,target:t.getTarget()});if(r===`Canvas`){let r=t.generateId(`canvas`),a=t.generateId(`annotation-page`,{id:r,type:`Canvas`}),s=t.embed({...n,motivation:`painting`,body:i,target:{type:`SpecificResource`,source:{id:r,type:`Canvas`}}}),c=t.embed({id:a,type:`AnnotationPage`,items:[s]});return t.embed({id:r,type:`Canvas`,label:o(e.label)?e.label:void 0,duration:e.duration||0,width:e.width,height:e.height,items:[c]})}}function $n(e){let[t]=E(()=>e.options.initialData),[n,r]=E(t.url||``),[i,a]=E(t.duration||0),[o,c]=E(t.width||0),[l,u]=E(t.height||0),[f,p]=E(``),[m,h]=E(t.label||{en:[``]});return oe(()=>{p(``);let e=n===t.url?t:{};if(a(e.duration||0),c(e.width||0),u(e.height||0),n){let e=n.split(`/`).pop()?.split(`.`).shift();h(n===t.url&&t.label?t.label:{en:[e||``]})}},[n,t]),O(v,{children:[f?D(d,{children:f}):null,O(S,{$wide:!0,children:[D(C,{htmlFor:`video-url`,children:`URL`}),D(x,{type:`text`,id:`video-url`,value:n,onChange:e=>r(e.target.value)})]}),n&&!f?D(`div`,{children:D(w,{containerId:`label`,focusId:`label_`,label:`Label`,fields:m,onSave:e=>h(e.toInternationalString())},`${n}__${i}`)}):null,n&&!f?D(`div`,{className:`mb-4 bg-black`,children:D(Zn,{duration:i,onDuration:e=>a(e),onError:e=>p(e),media:{url:n,duration:i,height:l,width:o,type:`Video`},onDimensions:(e,t)=>{c(e||0),u(t||0)}})}):null,!f&&(i||o||l)?D(S,{$wide:!0,children:D(ne,{widthId:`width`,width:o||0,changeWidth:e=>c(e),heightId:`height`,height:l||0,changeHeight:e=>u(e),durationId:`duration`,duration:i||0,changeDuration:e=>a(e)})}):null,D(s,{primary:!0,large:!0,type:`button`,onPress:()=>{e.runCreate({url:n,duration:i,label:m,width:o,height:l})},isDisabled:!n||!!f,children:`Add video`})]})}const er=r({id:`@manifest-editor/video-annotation`,create:Qn,label:`Video`,summary:`Video annotation`,icon:D(ee,{}),render(e){return D($n,{...e})},resourceType:`Annotation`,resourceFields:[`id`,`type`,`motivation`,`body`,`target`],additionalTypes:[`Canvas`],async supportsResource(e,t){return j(e)&&((await N(e,t)).startsWith(`video/`)||P(e,[`.mp4`,`.m4v`,`.webm`,`.mov`]))?{initialData:{url:e}}:!1},supports:{onlyPainting:!0,initialData:!0,parentTypes:[`AnnotationPage`,`Manifest`],parentFields:[`items`]},staticFields:{type:`Annotation`}}),tr=()=>D(`svg`,{xmlns:`http://www.w3.org/2000/svg`,height:`24px`,viewBox:`0 0 24 24`,width:`24px`,fill:`#000000`,transform:`scale(-1, 1)`,children:O(`g`,{children:[D(`rect`,{fill:`none`,height:`24`,width:`24`}),D(`path`,{d:`M16,20H2V4h14V20z M18,8h4V4h-4V8z M18,20h4v-4h-4V20z M18,14h4v-4h-4V14z`})]})}),nr=r({id:`@manifest-editor/empty-annotation-page`,create:(e,t)=>t.embed({id:t.generateId(`annotations`),label:e.label,type:`AnnotationPage`,items:[]}),label:`Empty annotation page`,summary:`AnnotationPage with nothing`,icon:D(tr,{}),resourceType:`AnnotationPage`,resourceFields:[`id`,`type`,`items`],supports:{parentTypes:[`Manifest`,`Canvas`,`Range`],parentFieldMap:{Manifest:[`annotations`],Canvas:[`items`,`annotations`],Range:[`annotations`]}}}),rr=e=>O(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,height:`1em`,width:`1em`,...e,children:[D(`path`,{d:`M0 0h24v24H0z`,fill:`none`}),D(`path`,{d:`M5 17v2h14v-2H5zm4.5-4.2h5l.9 2.2h2.1L12.75 4h-1.5L6.5 15h2.1l.9-2.2zM12 5.98 13.87 11h-3.74L12 5.98z`})]});async function ir(e,t){let n=e.url.trim();if(!j(n))throw Error(`Enter an absolute HTTP or HTTPS URL for the WebVTT file.`);let r=t.getParent();if(r?.type!==`Canvas`)throw Error(`WebVTT captions must belong to a Canvas.`);let i=t.embed({id:n,type:`Text`,format:`text/vtt`,...o(e.label)?{label:e.label}:{},...e.language?.trim()?{language:e.language.trim()}:{}}),a=t.embed({id:t.generateId(`annotation`),type:`Annotation`,motivation:`supplementing`,body:i,target:r});return t.embed({id:t.generateId(`annotation-page`),type:`AnnotationPage`,items:[a]})}function ar(e){let[t,n]=E(e.options.initialData?.label||{en:[`Captions in WebVTT format`]});return D(v,{children:O(`form`,{onSubmit:n=>{n.preventDefault();let r=new FormData(n.currentTarget),i=String(r.get(`url`)||``).trim(),a=String(r.get(`language`)||``).trim();e.runCreate({url:i,label:o(t)?t:void 0,language:a||void 0})},children:[D(`p`,{id:`vtt-help`,className:`mb-4 text-sm text-gray-600`,children:`Link an existing WebVTT (.vtt) file to this canvas. Host the file at a public URL before adding it.`}),O(S,{$wide:!0,children:[D(C,{htmlFor:`vtt-url`,children:`WebVTT file URL`}),D(x,{id:`vtt-url`,name:`url`,type:`url`,required:!0,placeholder:`https://example.org/captions.vtt`,pattern:`https?://.+`,title:`Enter an absolute http:// or https:// URL`,"aria-describedby":`vtt-help`,defaultValue:e.options.initialData?.url||``})]}),D(w,{focusId:`vtt-label`,label:`Label`,fields:t,onSave:e=>n(e.toInternationalString())}),O(S,{$wide:!0,children:[D(C,{htmlFor:`vtt-language`,children:`Language (BCP 47 code)`}),D(x,{id:`vtt-language`,name:`language`,type:`text`,placeholder:`en`,title:`A language code such as en, fr or pt-BR`,defaultValue:e.options.initialData?.language??`en`})]}),D(s,{primary:!0,large:!0,type:`submit`,children:`Add captions`})]})})}const or=r({id:`@manifest-editor/vtt-annotation-page`,label:`WebVTT captions`,tags:[`captions`],summary:`Link captions to an audio or video canvas`,icon:D(rr,{}),create:ir,render:e=>D(ar,{...e}),resourceType:`AnnotationPage`,resourceFields:[`id`,`type`,`items`],supports:{parentTypes:[`Canvas`],parentFields:[`annotations`],custom:({resource:e},t)=>Pe(t,e)}}),sr=r({id:`@manifest-editor/empty-canvas`,create:(e,t)=>{let n=t.generateId(`canvas`),r=t.embed({id:t.generateId(`annotation-page`,{id:n,type:`Canvas`}),type:`AnnotationPage`,items:[]});return{id:n,type:`Canvas`,label:e.label||{en:[``]},height:e.height||1e3,width:e.width||1e3,items:[r]}},label:`Empty canvas`,summary:`No content`,icon:D(u,{}),resourceType:`Canvas`,resourceFields:[`id`,`type`,`label`,`height`,`width`,`items`],supports:{parentTypes:[`Manifest`],parentFields:[`items`]}});var cr=`Invariant failed`;function Z(e,t){if(!e)throw Error(cr)}const lr=r({id:`@manifest-editor/internal-canvas`,create:dr,label:`Internal canvas link`,summary:`Canvas from the same manifest`,icon:D(tr,{}),resourceType:`Canvas`,resourceFields:[`id`,`type`,`label`],supports:{parentTypes:[`Manifest`],parentFields:[`start`]},render:e=>D(ur,{...e})});function ur(e){let{runCreate:t}=e,n=he(),r=be(),i=T(()=>({canSelectCanvas:!0,canSelectCollection:!1,canSelectManifest:!1,canCropImage:!1,alwaysShowNavigationArrow:!1,multiSelect:!1}),[]),a=T(()=>[{type:`callback`,cb:e=>t({id:e}),label:`Select canvas`,supportedTypes:[`Canvas`],format:{type:`url`}}],[t]),o=T(()=>({saveToLocalStorage:!1,restoreFromLocalStorage:!1,initialHistory:[{url:n?.id,resource:n?.id,route:`/manifest?id=${encodeURIComponent(n?.id||``)}`,metadata:{type:`Manifest`}}]}),[n?.id]);return Z(n,`Manifest is not loaded`),D(fe,{vault:r,children:D(Ie,{vault:r,navigation:i,output:a,history:o})})}async function dr(e,t){let n=t.vault.get({id:e.id,type:`Canvas`},{skipSelfReturn:!0});return Z(n,`Selected Canvas is not loaded`),t.embed(n)}async function fr(e,t){return t.embed({id:t.generateId(`html/${e.language}`),language:e.language,type:`TextualBody`,format:`text/html`,value:e.body||``})}function pr(e){let{i18n:t}=Ee(),[n,r]=E(e.options.initialData?.body??`<p></p>`),[i,a]=E(e.options.initialData?.language??t.defaultLanguage);return O(v,{children:[D(p,{className:`border-none`,value:n,onChange:e=>r(e)}),D(s,{primary:!0,large:!0,type:`button`,onPress:()=>{e.runCreate({language:i,body:n})},children:`Create`})]})}const mr=r({id:`@manifest-editor/html-body-creator`,create:fr,label:`HTML Body`,summary:`Add HTML annotation body`,icon:D(rr,{}),render(e){return D(pr,{...e})},resourceType:`ContentResource`,resourceFields:[`id`,`language`,`type`,`format`,`value`],supports:{parentTypes:[`Annotation`,`ContentResource`],parentFields:[`body`,`items`],custom(e,t){if(e.resource.type===`Annotation`)return e.property===`body`;let n=t.get(e.resource,{skipSelfReturn:!1});return e.property===`items`&&n?.type===`Choice`}},staticFields:{type:`TextualBody`,format:`text/html`}});function Q(e,t,n,r=0){return`${e}/${Math.floor(t.x)},${Math.floor(t.y)},${Math.floor(t.width)},${Math.floor(t.height)}/${n}/${r}/default.jpg`}async function hr(n,r){let a=r.options.targetType,o=n.output,s=[];for(let{resource:c,selector:l,parent:u,rotation:d}of o){let o=c.type,f=new i;if((a===`Canvas`||a===`Annotation`||a===`ContentResource`)&&o===`Canvas`){let i=c.id,o=u?.type===`Manifest`?u.id:void 0;Z(o,`Could not find Manifest`);let p=f.get({id:o,type:`Manifest`})||await f.loadManifest(o);Z(p,`Manifest not found`);let m=r.config.addManifestMetadataToCanvas!==!1;n.trackManifest?.({requiredStatement:p.requiredStatement,rights:p.rights,...m?{metadata:p.metadata||[]}:{},partOf:[{id:o,type:`Manifest`,label:p.label}]});let h=e=>{if(e.type===`SpecificResource`&&e.source)return{...e,source:h(e.source)};let t=e.type===`Canvas`&&!m?{}:{metadata:p.metadata||[]};return{requiredStatement:p.requiredStatement,rights:p.rights,...t,...e,partOf:[{id:o,type:`Manifest`,label:p.label}]}},g=p.items.find(e=>e.id===i);Z(g,`Canvas not found`);let _=f.get(g),v=t(l,d);if(a===`Canvas`&&!v){let e=f.toPresentation3(_);e.label||(e.label={en:[`Untitled canvas`]}),r.vault.loadSync(e.id,h(e)),s.push(r.embed(r.vault.get({id:e.id,type:`Canvas`})));continue}let y=f.get(_.items[0]),b=f.get(y.items[0]);if(a===`Annotation`||a===`Canvas`||a===`ContentResource`){let t=f.toPresentation3(b);t.id=r.generateId(`Annotation`);let i=null,o={width:0,height:0};if(t?.body?.service){let e=t?.body.width,r=t?.body.height;i=Ae(t?.body)[0],i&&(!i.width||!i.height)&&(i.width=e,i.height=r),o.width=e,o.height=r,n.trackSize&&n.trackSize(o)}if(v){let c={...t.body},u=``;if(i&&l?.type===`BoxSelector`){let e=i.id||i[`@id`]||``;e&&(c.id=Q(e,l.spatial,`max`,d),u=Q(e,l.spatial,`512,`,d))}t.body={id:r.generateId(`SpecificResource`,b),type:`SpecificResource`,source:c,selector:v};let f=e(l?.type===`BoxSelector`?{width:~~l.spatial.width,height:~~l.spatial.height}:o,d);if(n.trackSize&&n.trackSize(f),a===`ContentResource`){s.push(h(t.body));continue}if(a===`Canvas`){let e=r.generateId(`Canvas`,b);t.target=e;let n=r.generateId(`Page`,b),i=r.embed({id:n,type:`AnnotationPage`,items:[t]}),{width:a,height:o}=f;s.push(r.embed(h({id:e,type:`Canvas`,label:{en:[`Untitled canvas`]},width:a,height:o,thumbnail:u?[r.embed({id:u,type:`Image`,format:`image/jpeg`,width:512,height:Math.round(o/a*512)})]:void 0,items:[i]})));continue}s.push(r.embed(h({...t,target:r.getTarget()})));continue}s.push(r.embed(h({...t,target:r.getTarget()})))}}}return s}const gr=ae(()=>import(`./iiif-browser-form.lazy-DtTHoW1Q.js`)),_r=r({id:`@manifest-editor/iiif-browser-creator`,create:hr,label:`IIIF Browser`,summary:`Browse IIIF Resources`,icon:D(h,{}),configuration:{fields:[{id:`addManifestMetadataToCanvas`,type:`checkbox`,label:`Add manifest metadata to imported canvases`,summary:`Copies metadata from the source Manifest when the IIIF Browser creates a Canvas.`,defaultValue:!0}]},render(e){return D(gr,{...e})},hiddenModal:!0,tags:[`image`,`image-service`],async supportsResource(e,t){let n=He(await M(e,t));return n===`Manifest`||n===`Collection`||await We(e)?{initialData:{url:e}}:!1},resourceType:`ContentResource`,resourceFields:[`id`,`language`,`type`,`format`,`value`],additionalTypes:[`Annotation`,`Canvas`],supports:{initialData:!0,onlyPainting:!0,parentTypes:[`Annotation`,`Manifest`,`AnnotationPage`],parentFields:[`body`,`items`],parentFieldMap:{Annotation:[`body`],Manifest:[`items`],AnnotationPage:[`items`]}},sideEffects:[{canvasInteraction:!0,spatial:!0,async run(e,{vault:t,options:n}){if(!(e&&e.type===`Annotation`&&n.targetType===`Annotation`))return;let r=t.get(e),i=r.target;if(!(i&&i.source?.type===`Canvas`))return;let a=(Array.isArray(r.body)?r.body[0]:r.body)?.selector;if(!(a&&(a.type===`iiif:ImageApiSelector`||a.type===`ImageApiSelector`)&&a.region))return;let[o,s,c,l]=a.region.split(`,`).map(Number);if(![o,s,c,l].every(Number.isFinite)||c<=0||l<=0)return;let[u]=t.get(r.body),d=(u?.service||[]).find(e=>je(e)),f=d?.id||d?.[`@id`];if(!f)return;let p=Q(f,{x:o,y:s,width:c,height:l},`512,`);t.loadSync(p,{id:p,type:`Image`,format:`image/jpeg`,width:512,height:Math.round(l/c*512),service:[d]}),t.modifyEntityField(i.source,`thumbnail`,[{id:p,type:`ContentResource`}])}},G,I,F],staticFields:{}}),vr=r({id:`@manifest-editor/image-url-list`,label:`Image URL List`,summary:`Image from a list of URLs`,create:Gn,icon:D(_,{}),render(e){return D(Kn,{...e})},resourceType:`ContentResource`,resourceFields:[`format`],supports:{parentFields:[`logo`,`body`,`thumbnail`]},staticFields:{type:`Image`}});async function yr(e,t){return t.embed({id:e.url,type:`Text`,label:e.label,format:`text/plain`})}function br(e){let[t,n]=E(e.options.initialData?.label||{en:[`View as text`]});return D(v,{children:O(`form`,{onSubmit:n=>{n.preventDefault();let r=new FormData(n.target),i=Object.fromEntries(r.entries());i.url&&e.runCreate({url:i.url,label:t})},children:[D(w,{focusId:`label`,label:`Label`,fields:t,onSave:e=>n(e.toInternationalString())}),O(S,{$wide:!0,children:[D(C,{htmlFor:`id`,children:`Link to plaintext`}),D(x,{id:`url`,name:`url`,defaultValue:e.options.initialData?.url||``})]}),D(s,{primary:!0,large:!0,type:`submit`,children:`Create`})]})})}const xr=r({id:`@manifest-editor/plaintext-creator`,create:yr,label:`Plaintext`,summary:`Add link to an plaintext`,icon:D(rr,{}),render(e){return D(br,{...e})},resourceType:`ContentResource`,resourceFields:[`label`,`format`],supports:{parentFields:[`seeAlso`,`rendering`]},staticFields:{format:`text/plain`}});function Sr(e,t){let n=ke(K(e));return A({identifier:n.identifier,server:n.server,scheme:n.scheme,type:`image`,size:{max:!1,confined:!1,upscaled:!1,width:t.width,height:t.height},format:`jpg`,region:{full:!0},rotation:{angle:0},quality:`default`,prefix:n.prefix,originalPath:n.originalPath})}function Cr(e){return e.endsWith(`default.jpg`)?A({...Me(e),type:`info`}):Oe(e)}async function wr(e,t){let n=K(e.service),r=n.sizes,i=Pn(n,t.config,!0);if(e.thumbnailUrl)return t.embed({id:e.thumbnailUrl,type:`Image`,format:`image/jpeg`,width:e.width,height:e.height,service:[i]});if(r){let a=e.width||400,o=null;for(let e of r)(!o||Math.abs(e.width-a)<Math.abs(o.width-a))&&(o={width:e.width,height:e.height});if(o){let e=Sr(n,o);return t.embed({id:e,type:`Image`,format:`image/jpeg`,width:o.width,height:o.height,service:[i]})}}return null}function Tr(e){let[t,n]=E(e.options.initialData?.url||``),[r,i]=E(e.options.initialData?.service||null),[a,o]=E({width:e.options.initialData?.width||0,height:e.options.initialData?.height||0}),c=T(()=>!r||!a.width||!a.height?null:Sr(r,a),[a,r]);return r?O(v,{children:[O(`div`,{className:`mb-4`,children:[D(`div`,{className:`mb-2`,children:r[`@id`]||r.id}),D(`div`,{className:`flex gap-2 mb-4`,children:r.sizes?.map(e=>{let t=e.width===a.width;return O(s,{primary:t,isDisabled:t,large:!0,onPress:()=>o(e),children:[e.width,`x`,e.height]},e.width)})}),c?D(`img`,{src:c,alt:`preview of selected resource`}):null]}),D(s,{primary:!0,large:!0,isDisabled:!c,onPress:()=>{r&&e.runCreate({service:r,width:a.width,height:a.height,thumbnailUrl:c})},children:`Add thumbnail`})]}):D(v,{children:O(`form`,{onSubmit:e=>{e.preventDefault();let t=new FormData(e.target),n=Object.fromEntries(t.entries()).url;if(n){let e=Cr(n);if(!e)throw Error(`Invalid image service request`);fetch(e).then(e=>e.json()).then(e=>{i(e);let t=e.sizes?.[0];t&&o(t)})}},children:[D(`div`,{className:`flex gap-2 items-center`,children:O(S,{$wide:!0,children:[D(C,{htmlFor:`url`,children:`Link to image service`}),D(x,{id:`url`,name:`url`,defaultValue:e.options.initialData?.url||``,onPaste:e=>{let t=e.clipboardData.getData(`text/plain`);n(t?Cr(t):``)},onBlur:e=>n(e.currentTarget.value?Cr(e.currentTarget.value):``)})]})}),D(`div`,{children:D(s,{primary:!0,large:!0,type:`submit`,isDisabled:!t,children:`Select size`})})]})})}const Er=r({id:`@manifest-editor/thumbnail-image`,configKey:`iiif-image-services`,create:wr,label:`Thumbnail from service`,summary:`Add thumbnail from an image service`,icon:D(b,{}),render(e){return D(Tr,{...e})},resourceType:`ContentResource`,resourceFields:[`id`,`type`,`format`,`width`,`height`,`service`],supports:{parentFields:[`thumbnail`]}});function Dr(){return O(`svg`,{xmlns:`http://www.w3.org/2000/svg`,height:`24px`,viewBox:`0 0 24 24`,width:`24px`,fill:`#000000`,children:[D(`path`,{d:`M0 0h24v24H0z`,fill:`none`}),D(`path`,{d:`M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z`})]})}async function Or(e,t){return t.embed({id:e.url,type:`Text`,label:e.label,format:`text/html`})}function kr(e){let[t,n]=E(e.options.initialData?.label||{en:[``]});return D(v,{children:O(`form`,{onSubmit:n=>{n.preventDefault();let r=new FormData(n.target),i=Object.fromEntries(r.entries());i.url&&e.runCreate({url:i.url,label:t})},children:[D(w,{focusId:`label`,label:`Label`,fields:t,onSave:e=>n(e.toInternationalString())}),O(S,{$wide:!0,children:[D(C,{htmlFor:`id`,children:`Link`}),D(x,{id:`url`,name:`url`,defaultValue:e.options.initialData?.url||``})]}),D(s,{primary:!0,large:!0,type:`submit`,children:`Create link`})]})})}const Ar=r({id:`@manifest-editor/web-page-creator`,create:Or,label:`Web page`,summary:`Add link to an external web page`,icon:D(Dr,{}),render(e){return D(kr,{...e})},resourceType:`ContentResource`,resourceFields:[`label`,`format`],supports:{parentFields:[`seeAlso`,`rendering`,`homepage`]}}),jr=/^.*(?:(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/|shorts\/)|(?:(?:watch)?\?vi?=|&vi?=))([^#&?]*).*/;function $(e){let t=(e||``).match(jr);return t?t[1]:null}function Mr(e){return!!$(e.youtubeUrl)}function Nr(e,t){let n=$(e.youtubeUrl);return t.embed({id:`https://www.youtube.com/watch?v=${n}`,type:`Video`,service:[{type:`Service`,profile:`http://digirati.com/objectifier`,params:{data:`https://www.youtube.com/embed/${n}`}},{id:`https://www.youtube.com/watch?v=${n}`,type:`Service`,profile:`https://www.youtube.com`}]})}async function Pr(e,t){let n=Nr(e,t);if(t.options.targetType===`Canvas`){let r=t.generateId(`canvas`),i=t.generateId(`annotation-page`,{id:r,type:`Canvas`}),a=t.embed({id:t.generateId(`annotation`,{id:i,type:`AnnotationPage`}),type:`Annotation`,motivation:`painting`,body:[n],target:{type:`SpecificResource`,source:{id:r,type:`Canvas`}}}),o=t.embed({id:i,type:`AnnotationPage`,items:[a]});return t.embed({id:r,type:`Canvas`,label:e.label||{en:[`Untitled YouTube canvas`]},height:e.height||1e3,width:e.width||1e3,duration:e.duration||1,items:[o]})}return t.options.targetType===`Annotation`?t.embed({id:t.generateId(`annotation`),type:`Annotation`,motivation:`painting`,body:[n],target:t.getTarget()}):n}function Fr(e){let t=e.options.initialData;return D(v,{children:O(`form`,{onSubmit:t=>{t.preventDefault();let n=new FormData(t.target),r=Object.fromEntries(n.entries());r.youtubeUrl&&e.runCreate({youtubeUrl:r.youtubeUrl})},children:[O(S,{$wide:!0,children:[D(C,{htmlFor:`id`,children:`Link to YouTube`}),D(x,{id:`youtubeUrl`,name:`youtubeUrl`,defaultValue:t.youtubeUrl||``})]}),D(s,{primary:!0,large:!0,type:`submit`,children:`Create`})]})})}const Ir=r({id:`@manifest-editor/youtube`,create:Pr,label:`YouTube`,summary:`Embed YouTube`,icon:D(te,{}),resourceType:`ContentResource`,additionalTypes:[`Canvas`,`Annotation`],resourceFields:[`id`,`type`,`service`],supportsResource(e){return $(e)?{initialData:{youtubeUrl:e}}:!1},render:e=>D(Fr,{...e}),supports:{initialData:!0,onlyPainting:!0,parentTypes:[`Annotation`,`Manifest`,`AnnotationPage`],parentFieldMap:{Annotation:[`body`],Manifest:[`items`],AnnotationPage:[`items`]}},staticFields:{type:`Video`}});async function Lr(e,t){let n=e.output||[],r=[];for(let e of n){let{resource:n,parent:i,selector:o}=e,s=t.getPreviewVault(),c=a(s);if(n.type===`Manifest`){let e=n.id;Z(e,`Could not find Manifest ID`);let i=await s.loadManifest(e),a=await c.getBestThumbnailAtSize(i,{width:256,height:256},!1);Z(i,`Manifest not found`),r.push(t.embed({id:n.id,type:`Manifest`,label:i.label,summary:i.summary,thumbnail:a?.best?[{id:a.best.id,type:`Image`}]:void 0}));continue}if(n.type===`Collection`){let e=n.id;Z(e,`Could not find Manifest ID`);let i=await s.loadManifest(e);Z(i,`Collection not found`),r.push(t.embed({id:n.id,type:`Collection`,label:i.label}))}}return r}const Rr=ae(()=>Promise.resolve().then(()=>zr));var zr=Re({default:()=>Br});function Br(e){let t=De(),n=T(()=>e.options.initialData||{},[e.options.initialData]),r=T(()=>[{type:`callback`,label:`Select`,supportedTypes:[`Manifest`,`Collection`,`ManifestList`,`CollectionList`,`CollectionItemList`],cb:t=>e.runCreate({output:t}),format:{type:`custom`,format:(e,t,n)=>{let r=Array.isArray(e)?e:[{...e,parent:t}],i=[];for(let e of r)i.push({resource:n.get(e),parent:e.parent,selector:e.selector});return i}}}],[e.runCreate]),i=T(()=>({canCropImage:!1,canSelectCanvas:!1,canSelectManifest:!0,canSelectCollection:!0,multiSelect:!0,...n.iiifBrowserOptions?.navigation||{}}),[n.iiifBrowserOptions?.navigation]),a=T(()=>({buttonClassName:`bg-me-primary-500 text-white hover:bg-me-primary-600`,homeLink:n.url||(typeof e.config?.defaultCollection==`string`?e.config.defaultCollection:void 0),...n.iiifBrowserOptions?.ui||{}}),[n,e.config]),o=T(()=>{let e=n.iiifBrowserOptions?.history||{};return n.url?{...e,restoreFromLocalStorage:!1,saveToLocalStorage:!1,initialHistory:[{url:n.url,resource:null,route:`/loading?id=${encodeURIComponent(n.url)}`}]}:e},[n]);return D(Se,{children:D(Ie,{ui:a,vault:t,className:`iiif-browser border-none border-t rounded-none h-[70vh] min-h-[60vh] max-h-full max-w-full`,output:r,navigation:i,customPages:n.iiifBrowserOptions?.customPages||{},history:o})})}const Vr=r({id:`@manifest-editor/manifest-browser-creator`,configKey:`@manifest-editor/iiif-browser-creator`,create:Lr,label:`IIIF Browser`,summary:`Browse IIIF Resources`,icon:D(h,{}),render(e){return D(Br,{...e})},async supportsResource(e,t){let n=He(await M(e,t));return n===`Manifest`||n===`Collection`||await We(e)?{initialData:{url:e}}:!1},resourceType:`Manifest`,resourceFields:[`id`,`label`],additionalTypes:[`Collection`],supports:{initialData:!0,parentTypes:[`Collection`,`Manifest`,`Canvas`],parentFieldMap:{Collection:[`items`],Manifest:[`partOf`],Canvas:[`partOf`]}},sideEffects:[],staticFields:{}});async function Hr(e,t,n){let r=t.generateId(`range`,n?{id:n,type:`Range`}:void 0);return t.embed({id:r,type:`Range`,label:e.label||{en:[`Untitled range`]},items:e.items||[]})}function Ur(e){let[t,n]=E(e.options.initialData?.label||{en:[``]});return D(v,{children:O(`form`,{onSubmit:n=>{n.preventDefault(),t&&e.runCreate({type:`Range`,label:t,items:e.options.initialData?.items||[]})},children:[D(w,{focusId:`label`,label:`Label`,fields:t,onSave:e=>n(e.toInternationalString())}),D(s,{primary:!0,type:`submit`,children:`Create range`})]})})}const Wr=r({id:`@manifest-editor/range-with-items`,create:Hr,label:`Range`,summary:`Add a new range`,icon:D(y,{}),render(e){return D(Ur,{...e})},resourceType:`Range`,resourceFields:[`id`,`label`,`type`],supports:{parentTypes:[`Range`],parentFields:[`items`]},staticFields:{type:`Range`}});async function Gr(e,t,n){let r=t.generateId(`range`,n?{id:n,type:`Range`}:void 0);return t.embed({id:r,type:`Range`,label:e.label||{en:[`Table of Contents`]},items:(e.items||[]).map(e=>t.ref(e))})}function Kr(e){let[t,n]=E(e.options.initialData?.label||{en:[``]});return D(v,{children:O(`form`,{onSubmit:n=>{n.preventDefault(),t&&e.runCreate({type:`Range`,label:t})},children:[D(w,{focusId:`label`,label:`Label`,fields:t,onSave:e=>n(e.toInternationalString())}),D(s,{primary:!0,type:`submit`,children:`Create range`})]})})}const qr=r({id:`@manifest-editor/range-top-level`,create:Gr,label:`Top Level Range`,summary:`Add a new top level range`,icon:D(y,{}),render(e){return D(Kr,{...e})},resourceType:`Range`,resourceFields:[`id`,`label`,`type`],supports:{parentTypes:[`Manifest`],parentFields:[`structures`]},staticFields:{type:`Range`}}),Jr=[Y,zn,Un,Wn,er,pt,mr,yt,Ir,_r,sr,xr,Ar,nr,or,Yn,lr,gt,vr,Jn,Er,qr,Wr,Ve];export{ft as CreateAudioAnnotationForm,ht as CreateCaptionedImageAnnotation,vt as CreateHTMLAnnotation,pr as CreateHTMLBodyForm,J as CreateImageServerForm,Rn as CreateImageServiceAnnotationForm,Hn as CreateImageUrlAnnotationForm,X as CreateImageUrlForm,Kn as CreateImageUrlListForm,br as CreatePlaintextForm,Be as CreateProviderForm,Tr as CreateThumbnailForm,$n as CreateVideoAnnotationForm,ar as CreateVttAnnotationPageForm,kr as CreateWebPageForm,gr as IIIFBrowserCreatorForm,Rr as ManifestBrowserCreatorForm,Ur as RangeWithItemsCreatorForm,Kr as TopLevelRangeCreatorForm,Fr as YouTubeForm,Jr as allCreators,pt as audioAnnotation,gt as captionedImageAnnotation,dt as createAudioAnnotation,mt as createCaptionedImageAnnotation,hr as createFromIIIFBrowserOutput,Lr as createFromManifestBrowserOutput,_t as createHtmlAnnotation,fr as createHtmlBody,Fn as createImageServer,Ln as createImageServiceAnnotation,Bn as createImageUrl,Vn as createImageUrlAnnotation,Gn as createImageUrlList,qn as createImageUrlListAnnotation,Xn as createNoBodyAnnotation,yr as createPlaintext,ze as createProvider,Gr as createRangeTopLevel,Hr as createRangeWithItems,wr as createThumbnail,Qn as createVideoAnnotation,ir as createVttAnnotationPage,Or as createWebPage,Pr as createYoutubeBody,Nr as createYoutubeBodyResource,Q as croppedRegion,nr as emptyAnnotationPage,sr as emptyCanvas,q as getCanonicalUrl,$ as getYouTubeId,yt as htmlAnnotation,mr as htmlBodyCreator,_r as iiifBrowserCreator,zn as imageServiceAnnotation,Y as imageServiceCreator,Wn as imageUrlAnnotation,Un as imageUrlCreator,Jn as imageUrlListAnnotation,vr as imageUrlListCreator,lr as internalCanvas,Vr as manifestBrowserCreator,Yn as noBodyAnnotation,xr as plaintextCreator,Ve as providerCreator,qr as rangeTopLevel,Wr as rangeWithItems,Mr as validateYouTube,er as videoAnnotation,or as vttAnnotationPage,Ar as webPageCreator,Ir as youTubeBodyCreator};
|
|
92
|
+
`,gt=j.label`
|
|
93
|
+
${ht}
|
|
94
|
+
`;function _t(e){let t=a(`ui`),n=de(),r=D(e);r.current=e;let i=D(t);i.current=t;let[o,s]=O(!1),{progress:c,currentTime:l,element:u}=xe(),{duration:d,isMuted:f,volume:p,isPlaying:m,playRequested:h}=Se(),{setVolume:g,toggleMute:_,play:v,pause:y,setDurationPercent:b}=be(),x=f||p===0?nt:p>50?et:tt;return fe(()=>{if(u.current){let e=u.current;if(e.error&&r.current.onError){r.current.onError(e.error?.message||i.current(`media.unknownError`));return}let t=()=>{r.current.onError&&r.current.onError(e.error?.message||i.current(`media.unknownError`))},n=()=>{e.duration&&r.current.onDuration&&r.current.onDuration(e.duration),r.current.onDimensions&&e instanceof HTMLVideoElement&&r.current.onDimensions(e.videoWidth,e.videoHeight)};return e.addEventListener(`loadedmetadata`,n),e.addEventListener(`error`,t),()=>{e.removeEventListener(`loadedmetadata`,n),e.removeEventListener(`error`,t)}}},[u]),A(rt,{children:[k(at,{"aria-label":t(h?`loading.title`:m?`media.pause`:`media.play`),disabled:h,onClick:()=>{m?y():v()},children:h?k(mt,{stroke:`#999`}):m?k($e,{title:t(`media.pause`)}):k(Qe,{title:t(`media.play`)})}),k(ot,{ref:l,children:`0:00`}),A(st,{"aria-label":t(`media.seek`),title:t(`media.seek`),onClick:e=>{let{left:t,width:n}=e.currentTarget.getBoundingClientRect(),r=(e.pageX-t)/n;b(r)},children:[k(lt,{}),d?k(ct,{ref:c}):null]}),k(ot,{children:_e(d)}),A(dt,{onMouseEnter:()=>s(!0),onMouseLeave:()=>s(!1),children:[k(ft,{$isOpen:o,children:A(`span`,{children:[k(gt,{htmlFor:n,children:t(`media.changeVolume`)}),k(pt,{id:n,disabled:f,min:`0`,max:`100`,value:p,onChange:e=>g(Number(e.currentTarget.value))})]})}),k(ut,{"aria-label":t(f?`media.unmute`:`media.mute`),onClick:()=>_(),children:k(x,{title:t(f?`media.unmute`:`media.mute`)})})]})]})}async function vt(e,t){let n={id:t.generateId(`annotation`),type:`Annotation`},r=t.options.targetType,i=t.embed({id:e.url,type:`Sound`,format:`audio/mp4`,duration:e.duration||0});if(r===`Annotation`)return t.embed({...n,label:c(e.label)&&e.label,motivation:e.motivation||t.options.initialData?.motivation||`painting`,body:i,target:t.getTarget()});if(r===`Canvas`){let r=t.generateId(`canvas`),a=t.generateId(`annotation-page`,{id:r,type:`Canvas`}),o=t.embed({...n,motivation:`painting`,body:i,target:{type:`SpecificResource`,source:{id:r,type:`Canvas`}}}),s=t.embed({id:a,type:`AnnotationPage`,items:[o]});return t.embed({id:r,type:`Canvas`,label:e.label||{en:[`Untitled HTML canvas`]},duration:e.duration||0,items:[s]})}}function yt(e){let t=a(`editor-api`),n=a(`creators`),[r]=O(()=>e.options.initialData),[i,o]=O(r.url||``),[s,c]=O(r.duration||0),[u,d]=O(``),[f,m]=O(r.label||{en:[``]});return ue(()=>{if(d(``),c(i===r.url&&r.duration||0),i){let e=i.split(`/`).pop()?.split(`.`).shift();m(i===r.url&&r.label?r.label:{en:[e||``]})}},[i,r]),A(x,{children:[u?A(p,{children:[k(`div`,{role:`alert`,children:n(`errors.media`)}),A(`details`,{children:[k(`summary`,{children:n(`errors.details`)}),u]})]}):null,A(C,{$wide:!0,children:[k(w,{htmlFor:`audio-url`,children:n(`form.audioUrl`)}),k(S,{type:`url`,placeholder:`https://example.org/audio.mp3`,id:`audio-url`,value:i,onChange:e=>o(e.target.value)})]}),i&&!u?k(`div`,{children:k(T,{containerId:`label`,focusId:`label_`,label:t(`fields.label`),fields:f,onSave:e=>m(e.toInternationalString())},`${i}__${s}`)}):null,i&&!u?k(me.AudioHTML,{media:{url:i,duration:s,type:`Sound`},children:k(_t,{onError:e=>d(e),onDuration:e=>c(~~e)},`${i}__${s}`)},`${i}__${s}`):null,s&&!u?A(se,{children:[k(w,{htmlFor:`duration`,children:t(`fields.duration`)}),k(S,{type:`number`,id:`duration`,value:s,onChange:e=>c(e.target.valueAsNumber)})]}):null,k(l,{primary:!0,large:!0,type:`button`,onPress:()=>{e.runCreate({url:i,duration:s,label:f})},isDisabled:!i||!!u,children:n(`form.addAudio`)})]})}const bt=r({id:`@manifest-editor/audio-annotation`,create:vt,label:`Audio`,labelMessage:{namespace:`creators`,key:`definitions.audio.label`},summary:`Add audio from a direct audio-file link.`,summaryMessage:{namespace:`creators`,key:`definitions.audio.summary`},icon:k(d,{}),render(e){return k(yt,{...e})},resourceType:`Annotation`,resourceFields:[`id`,`type`,`motivation`,`body`,`target`],additionalTypes:[`Canvas`],async supportsResource(e,t){return P(e)&&((await F(e,t)).startsWith(`audio/`)||I(e,[`.mp3`,`.m4a`,`.wav`,`.ogg`]))?{initialData:{url:e}}:!1},supports:{initialData:!0,onlyPainting:!0,parentTypes:[`AnnotationPage`,`Manifest`],parentFields:[`items`]},staticFields:{type:`Annotation`}});function xt(){let[e,t]=O(!1),[n,r]=O(!1);async function i(e,n){t(!0),r(!1);try{let t=e();if(!t)throw Error(`Invalid image service request`);let r=await fetch(t);if(!r.ok)throw Error(`Could not load the image service`);n(await r.json())}catch{r(!0)}finally{t(!1)}}return{load:i,loading:e,failed:n}}function L(e){let{"@id":t,"@type":n,...r}=e,i=`${e[`@context`]||``} ${e.profile||``}`.match(/\/(?:image|image-api)\/([123])(?:[./])/);return{...r,id:e.id||t,type:e.type||n||`ImageService${i?.[1]||`2`}`}}function St(e,t={},n=!1){let r=[];t.compact!==`compact`&&r.push(`width`,`height`),(n||t.includeSizes===!0)&&r.push(`sizes`),(n||t.includeTiles===!0)&&r.push(`tiles`);let i=L(e);return{id:i.id,type:i.type,profile:i.profile,...Object.fromEntries(r.filter(e=>i[e]!==void 0).map(e=>[e,i[e]]))}}async function Ct(e,t){let n=L(e.service),r=De(n),i=M({identifier:r.identifier,server:r.server,scheme:r.scheme,type:`image`,size:{max:!e.size?.width&&!e.size?.height,confined:!1,upscaled:!1,...e.size||{}},format:`jpg`,region:{full:!0},rotation:{angle:0},quality:`default`,prefix:r.prefix,originalPath:r.originalPath});return t.embed({id:i,type:`Image`,format:e.format||`image/jpeg`,height:e.height||n.height,width:e.width||n.width,service:e.embedService===!1?void 0:[St(n,t.config,t.options.parent?.property===`thumbnail`)]})}function R(e){return e.endsWith(`default.jpg`)?M({...ke(e),type:`info`}):Ee(e)}function z(e){let t=a(`creators`),n=a(`common`),r=e.options.initialData,i=r.url?R(r.url):``,[o,s]=O(i||``),{load:c,loading:u,failed:d}=xt();return k(x,{children:A(`form`,{onSubmit:t=>{t.preventDefault();let n=new FormData(t.target),r=Object.fromEntries(n.entries()),i=r.url;i&&c(()=>R(i),t=>{e.runCreate({url:r.url,service:t})})},"aria-busy":u,children:[d?k(`div`,{role:`alert`,children:t(`errors.service`)}):null,u?k(`output`,{children:n(`status.loading`)}):null,k(`div`,{className:`flex gap-2 items-center`,children:A(C,{$wide:!0,children:[k(w,{htmlFor:`url`,children:t(`form.serviceUrl`)}),k(S,{id:`url`,name:`url`,defaultValue:r.url||``,onPaste:e=>{let t=e.clipboardData.getData(`text/plain`);s(t?R(t):``)},onBlur:e=>s(e.currentTarget.value?R(e.currentTarget.value):``)})]})}),k(`div`,{className:`relative flex z-0 my-5 h-96 min-h-0 min-w-0 overflow-hidden bg-gray-200 rounded items-center justify-center`,children:o.trim()?k(Ae,{fallbackRender:()=>k(`div`,{children:t(`form.invalidService`)}),children:k(wt,{src:o},o)}):k(`div`,{className:`text-grey-600`,children:n(`actions.preview`)})}),k(`div`,{children:k(l,{primary:!0,large:!0,type:`submit`,isDisabled:!o||u,children:n(`actions.create`)})})]})})}function wt({src:e}){let t=a(`creators`),n=a(`common`),r=ve({id:e},{size:{width:512}});return r?k(`div`,{className:`h-full`,children:k(`img`,{className:`w-full h-full object-contain`,src:r,alt:t(`image.previewAlt`)})}):k(`output`,{"aria-label":n(`status.loading`),children:k(mt,{})})}async function Tt(e,t){if(!e.height||!e.width){let t=await Ne(e.url);t&&(e.height=t.height,e.width=t.width)}return t.embed({id:e.url,type:`Image`,format:e.format||await Me(e.url),height:e.height,width:e.width,service:e.service?Array.isArray(e.service)?e.service:[e.service]:void 0})}function Et(e){let t=a(`creators`),n=a(`common`),r=e.options.initialData;return k(x,{children:A(`form`,{onSubmit:t=>{t.preventDefault();let n=new FormData(t.target),r=Object.fromEntries(n.entries());r.url&&e.runCreate({url:r.url})},children:[A(C,{$wide:!0,children:[k(w,{htmlFor:`url`,children:t(`form.imageUrl`)}),k(S,{type:`url`,id:`url`,name:`url`,defaultValue:r.url||``})]}),k(l,{primary:!0,large:!0,type:`submit`,children:n(`actions.create`)})]})})}const B=r({id:`@manifest-editor/image-url-creator`,create:Tt,label:`Image`,labelMessage:{namespace:`creators`,key:`definitions.imageUrl.label`},summary:`Add an image using a direct image-file link.`,summaryMessage:{namespace:`creators`,key:`definitions.imageUrl.summary`},icon:k(u,{}),tags:[`image`],async supportsResource(e,t){if(!P(e))return!1;let n=R(e);if(n)try{if(Xe(await t.json(n)))return!1}catch{}let r=await F(e,t);return r.startsWith(`image/`)||I(e,[`.jpg`,`.jpeg`,`.png`,`.gif`,`.webp`])?{initialData:{url:e,format:r||void 0}}:!1},render(e){return k(Et,{...e})},resourceType:`ContentResource`,resourceFields:[`format`],supports:{initialData:!0,parentFields:[`logo`,`body`,`thumbnail`,`items`],custom(e,t){return e.property!==`items`||e.resource.type===`ContentResource`&&t.get(e.resource,{skipSelfReturn:!1})?.type===`Choice`}},staticFields:{type:`Image`}});async function Dt(e,t){let n={id:t.generateId(`annotation`),type:`Annotation`},r=t.options.targetType,i=Object.keys(e.body),a=[];for(let r of i){let i=e.body[r].join(`
|
|
95
|
+
`);i&&a.push(await t.create(`@manifest-editor/html-body-creator`,{language:r,body:i},{parent:{resource:n,property:`items`}}))}let o=await t.create(`@manifest-editor/image-url-creator`,{url:e.imageUrl},{parent:{resource:n,property:`body`}});if(o&&a.push(o),r===`Annotation`)return t.embed({...n,motivation:e.motivation||t.options.initialData?.motivation||`painting`,body:a,target:t.getTarget()});if(r===`Canvas`){let r=t.generateId(`canvas`),i=t.generateId(`annotation-page`,{id:r,type:`Canvas`}),o=t.embed({...n,motivation:`painting`,body:a,target:{type:`SpecificResource`,source:{id:r,type:`Canvas`}}}),s=t.embed({id:i,type:`AnnotationPage`,items:[o]});return t.embed({id:r,type:`Canvas`,label:e.label||{en:[`Untitled HTML canvas`]},height:e.height||1e3,width:e.width||1e3,items:[s]})}}function Ot(e){return e.trim().startsWith(`<`)?new DOMParser().parseFromString(e,`text/html`).body.textContent||``:e}function kt(e){let t=a(`creators`),n=a(`common`),[r,i]=Pe({key:`bodyValue`,initialValue:e.options.initialData?.body||{en:[``]},requestId:e.options.initialData?.requestId}),o=de();return A(`form`,{onSubmit:t=>{t.preventDefault();let n=new FormData(t.target),r=Object.fromEntries(n.entries());e.runCreate({body:{en:[r.caption]},imageUrl:r.url})},className:`flex flex-col gap-3`,children:[A(`div`,{children:[k(w,{htmlFor:`${o}-url`,children:t(`image.fromUrl`)}),k(S,{id:`${o}-url`,name:`url`,type:`url`,required:!0,defaultValue:e.options.initialData?.imageUrl||``,placeholder:`https://example.org/image.jpg`})]}),A(`div`,{children:[k(w,{htmlFor:`${o}-caption`,children:t(`form.caption`)}),k(S,{id:`${o}-caption`,name:`caption`,placeholder:t(`form.describeImage`),onChange:e=>i({en:[e.target.value]}),value:Ot(r.en?.[0]||``)})]}),k(`div`,{className:`flex justify-end`,children:k(l,{primary:!0,type:`submit`,children:n(`actions.create`)})})]})}const At=r({id:`@manifest-editor/captioned-image-annotation`,create:Dt,label:`Captioned image`,labelMessage:{namespace:`creators`,key:`definitions.captionedImage.label`},summary:`Add an image from a direct link and write its caption.`,summaryMessage:{namespace:`creators`,key:`definitions.captionedImage.summary`},icon:k(u,{}),async supportsResource(e,t,n){return await B.supportsResource(e,t,n)?{initialData:{imageUrl:e}}:!1},render(e){return k(kt,{...e})},resourceType:`Annotation`,resourceFields:[`id`,`type`,`motivation`,`body`,`target`],additionalTypes:[`Canvas`],supports:{initialData:!0,disallowPainting:!0,parentTypes:[`AnnotationPage`],parentFields:[`items`]},staticFields:{type:`Annotation`}});async function jt(e,t){let n={id:t.generateId(`annotation`),type:`Annotation`},r=t.options.targetType,i=Object.keys(e.body),a=[];for(let r of i){let i=e.body[r].join(`
|
|
96
|
+
`);i&&a.push(await t.create(`@manifest-editor/html-body-creator`,{language:r,body:i},{parent:{resource:n,property:`items`}}))}if(r===`Annotation`)return t.embed({...n,motivation:e.motivation||t.options.initialData?.motivation||`painting`,body:a,target:t.getTarget()});if(r===`Canvas`){let r=t.generateId(`canvas`),i=t.generateId(`annotation-page`,{id:r,type:`Canvas`}),o=t.embed({...n,motivation:`painting`,body:a,target:{type:`SpecificResource`,source:{id:r,type:`Canvas`}}}),s=t.embed({id:i,type:`AnnotationPage`,items:[o]});return t.embed({id:r,type:`Canvas`,label:e.label||{en:[`Untitled HTML canvas`]},height:e.height||1e3,width:e.width||1e3,items:[s]})}}function Mt(e){let t=a(`common`),[n,r]=Pe({key:`bodyValue`,initialValue:e.options.initialData?.body||{en:[``]},requestId:e.options.initialData?.requestId}),i=c(n).trim()===``;return A(`div`,{className:`flex flex-col gap-3`,children:[k(h,{value:n.en?.[0]||``,onChange:e=>r({en:[e]})}),k(`div`,{className:`flex justify-end`,children:k(l,{primary:!0,type:`button`,onPress:()=>{e.runCreate({body:n})},isDisabled:i,children:t(`actions.create`)})})]})}const Nt=r({id:`@manifest-editor/html-annotation`,create:jt,label:`HTML`,labelMessage:{namespace:`creators`,key:`definitions.html.label`},summary:`Write formatted text to display on a canvas.`,summaryMessage:{namespace:`creators`,key:`definitions.html.summary`},icon:k(g,{}),render(e){return k(Mt,{...e})},resourceType:`Annotation`,resourceFields:[`id`,`type`,`motivation`,`body`,`target`],additionalTypes:[`Canvas`],supports:{initialData:!0,parentTypes:[`AnnotationPage`,`Manifest`],parentFields:[`items`]},staticFields:{type:`Annotation`}}),V={canvasInteraction:!0,spatial:!0,async run(e,{vault:t,options:n}){if(e&&e.type===`Annotation`&&n.targetType===`Annotation`){let n=t.get(e),r=n.target;if(!(r&&r.source?.type===`Canvas`))return;let i=r.source,a=t.get(i);if(!a.items)return;let o=t.get(a.items[0]);if(!o||o.items.length<2&&!a.behavior.includes(`multi-image`))return;let s=t.get(n.body)[0],c=n.body[0]?.selector,l=(s.service||[]).find(e=>N(e));l&&l.width&&l.height&&(l.width!==s.width&&t.modifyEntityField({id:s.id,type:`ContentResource`},`width`,l.width),l.height!==s.height&&t.modifyEntityField({id:s.id,type:`ContentResource`},`height`,l.height));let u=l?.width||s.width,d=l?.height||s.height;if(c&&(c.type===`iiif:ImageApiSelector`||c.type===`ImageApiSelector`)&&c.region){let[e,t,n,r]=c.region.split(`,`);u=Number(n)||u,d=Number(r)||d}let f=new ze({vault:t,reference:e}),p=ce(a,{width:u,height:d},.6);f.annotation.target.setPosition(p)}}},H={canvasInteraction:!0,spatial:!0,async run(e,{vault:t,options:n}){if(e&&e.type===`Annotation`&&n.targetType===`Annotation`){let n=t.get(e),r=n.target;if(!(r&&r.source?.type===`Canvas`))return;let i=r.source,a=t.get(i);if(!a.items||a.behavior.includes(`multi-image`))return;let o=t.get(a.items[0]);if(!o||o.items.length>1)return;let s=t.get(n.body);if(s.length!==1)return;let c=s[0],l=n.body[0]?.selector,u=(c.service||[])[0],d=u?.width||c.width,f=u?.height||c.height,p=c.duration||u?.duration;if(l&&(l.type===`iiif:ImageApiSelector`||l.type===`ImageApiSelector`)&&l.region){let[e,t,n,r]=l.region.split(`,`);d=Number(n)||d,f=Number(r)||f}let m=new ze({vault:t,reference:i});t.batch(()=>{d!==void 0&&m.technical.width.set(d),f!==void 0&&m.technical.height.set(f),p!==void 0&&m.technical.duration.set(p)})}}};var Pt=Object.defineProperty,Ft=(e,t,n)=>t in e?Pt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,U=(e,t,n)=>(Ft(e,typeof t==`symbol`?t:t+``,n),n);function W(e){return e.endsWith(`info.json`)?e:e.endsWith(`/`)?`${e}info.json`:`${e}/info.json`}var It=`http://library.stanford.edu/iiif/image-api/compliance.html#level0`,Lt=`http://library.stanford.edu/iiif/image-api/compliance.html#level1`,Rt=`http://library.stanford.edu/iiif/image-api/compliance.html#level2`,zt=`http://library.stanford.edu/iiif/image-api/conformance.html#level0`,Bt=`http://library.stanford.edu/iiif/image-api/conformance.html#level1`,Vt=`http://library.stanford.edu/iiif/image-api/conformance.html#level2`,Ht=`http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level0`,Ut=`http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level1`,Wt=`http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2`,Gt=`http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level0`,Kt=`http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level1`,qt=`http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level2`,Jt=`http://iiif.io/api/image/1/level0.json`,Yt=`http://iiif.io/api/image/1/profiles/level0.json`,Xt=`http://iiif.io/api/image/1/level1.json`,Zt=`http://iiif.io/api/image/1/profiles/level1.json`,Qt=`http://iiif.io/api/image/1/level2.json`,$t=`http://iiif.io/api/image/1/profiles/level2.json`,en=`http://iiif.io/api/image/2/level0.json`,tn=`http://iiif.io/api/image/2/profiles/level0.json`,nn=`http://iiif.io/api/image/2/level1.json`,rn=`http://iiif.io/api/image/2/profiles/level1.json`,an=`http://iiif.io/api/image/2/level2.json`,on=`http://iiif.io/api/image/2/profiles/level2.json`,sn=`level0`,cn=`level1`,ln=`level2`,un=`http://iiif.io/api/image/2/level0`,dn=`http://iiif.io/api/image/2/level1`,fn=`http://iiif.io/api/image/2/level2`,pn=[fn,Rt,Vt,Wt,qt,Qt,$t,an,on,ln],mn=[...pn,dn,Lt,Bt,Ut,Kt,Xt,Zt,nn,rn,cn],hn=[un,dn,fn,It,Lt,Rt,zt,Bt,Vt,Ht,Ut,Wt,Gt,Kt,qt,Jt,Yt,Xt,Zt,Qt,$t,en,tn,nn,rn,an,on,sn,cn,ln],gn={extraFormats:[`jpg`],extraQualities:[`default`],extraFeatures:[`sizeByWhListed`]},_n={extraFormats:[`jpg`],extraQualities:[`default`],extraFeatures:[`baseUriRedirect`,`cors`,`jsonldMediaType`,`regionByPx`,`regionSquare`,`sizeByWhListed`,`sizeByH`,`sizeByW`,`sizeByWh`]},vn={extraFormats:[`jpg`,`png`],extraQualities:[`default`],extraFeatures:[`baseUriRedirect`,`cors`,`jsonldMediaType`,`regionByPct`,`regionByPx`,`regionSquare`,`rotationBy90s`,`sizeByWhListed`,`sizeByConfinedWh`,`sizeByH`,`sizeByPct`,`sizeByW`,`sizeByWh`]};function yn(e){return pn.indexOf(e)===-1?mn.indexOf(e)===-1?gn:_n:vn}function bn(e){let t=e?Array.isArray(e.profile)?e.profile:[e.profile]:[],n={extraQualities:[],extraFormats:[],extraFeatures:[]};for(let e of t)if(typeof e==`string`&&(e=yn(e)),e){if(e.formats)for(let t of e.formats)n.extraFormats.indexOf(t)===-1&&n.extraFormats.push(t);if(e.qualities)for(let t of e.qualities)n.extraQualities.indexOf(t)===-1&&n.extraQualities.push(t);if(e.supports)for(let t of e.supports)n.extraFeatures.indexOf(t)===-1&&n.extraFeatures.push(t);if(e.maxHeight&&(n.maxHeight=e.maxHeight),e.maxWidth&&(n.maxWidth=e.maxWidth),e.maxArea&&(n.maxArea=e.maxArea),e.extraFormats)for(let t of e.extraFormats)n.extraFormats.indexOf(t)===-1&&n.extraFormats.push(t);if(e.extraQualities)for(let t of e.extraQualities)n.extraQualities.indexOf(t)===-1&&n.extraQualities.push(t);if(e.extraFeatures)for(let t of e.extraFeatures)n.extraFeatures.indexOf(t)===-1&&n.extraFeatures.push(t);e.maxHeight&&(n.maxHeight=e.maxHeight),e.maxWidth&&(n.maxWidth=e.maxWidth),e.maxArea&&(n.maxArea=e.maxArea)}if(e.extraFormats)for(let t of e.extraFormats)n.extraFormats.indexOf(t)===-1&&n.extraFormats.push(t);if(e.extraFeatures)for(let t of e.extraFeatures)n.extraFeatures.indexOf(t)===-1&&n.extraFeatures.push(t);if(e.extraQualities)for(let t of e.extraQualities)n.extraQualities.indexOf(t)===-1&&n.extraQualities.push(t);return n}function xn(e){try{if(e===`full`)return{full:!0};if(e===`square`)return{square:!0};let t=e.startsWith(`pct:`),n=e.substr(t?4:0).split(`,`).map(e=>parseFloat(e));return{x:n[0],y:n[1],w:n[2],h:n[3],percent:t}}catch{throw Error(`Expected 'full', 'square' or 'x,y,w,h'. Found `+e)}}function Sn(e){let t={upscaled:!1,max:!1,confined:!1};if(e[0]===`^`&&(t.upscaled=!0,e=e.slice(1)),e===`max`||e===`full`)return t.max=!0,t.serialiseAsFull=e===`full`,t;if(e[0]===`!`&&(t.confined=!0,e=e.slice(1)),e[0]===`p`)return t.percentScale=parseFloat(e.slice(4)),t;let n=e.split(`,`).map(e=>e.trim());return n.length&&typeof n[0]<`u`&&(n[0]!==``&&(t.width=parseInt(n[0],10)),typeof n[1]<`u`&&n[1]!==``?(t.height=parseInt(n[1],10),t.version=2):t.version=3),t}function Cn(e){let t={angle:0};if(e[0]===`!`&&(t.mirror=!0,e=e.substr(1)),t.angle=parseFloat(e)%360,Number.isNaN(t.angle))throw Error(`Invalid rotation ${e}`);return t}function wn(e,t=``){let n=e.match(/^(([a-zA-Z]+):\/\/([^/]+))?((.*)+)/);if(!n)throw Error(`Invalid or unknown input ${e}`);let r=n[2],i=n[3],a=n[4];if(a[0]===`/`&&(a=a.substring(1)),t.length>0){if(t[0]===`/`&&(t=t.substring(1)),t!==a.substring(0,t.length))throw Error(`Path does not start with prefix (path: ${a}, prefix: ${t})`);a=a.substring(t.length)}return{scheme:r,server:i,path:a,prefix:t}}function Tn(e,t=``){let{path:n,scheme:r,server:i,prefix:a}=wn(e,t),o=(n||``).split(`/`).reverse(),[s,c,l,u,...d]=o,f=d.reverse().filter(Boolean).join(`/`);if(o.length===1||s===``)return{type:`base`,scheme:r,server:i,prefix:a,identifier:f};if(s===`info.json`){let[,...e]=o;return{type:`info`,scheme:r,server:i,prefix:a,identifier:e.reverse().filter(Boolean).join(`/`)}}let p=(s||``).split(`.`);if(typeof p[1]>`u`||typeof p[0]>`u`||typeof u>`u`||typeof l>`u`||typeof c>`u`)throw Error(`Invalid image request`);return{type:`image`,scheme:r,server:i,prefix:a,identifier:f,originalPath:n,region:xn(u),size:Sn(l),rotation:Cn(c),quality:p[0],format:p[1]}}function En(e){let t=Tn(W(e.id));if(t.type!==`info`)throw Error(`Invalid service URL`);let n=bn(e);return{identifier:t.identifier,originalPath:``,server:t.server,prefix:t.prefix,scheme:t.scheme,type:`image`,quality:n.extraQualities.indexOf(`default`)===-1?n.extraQualities[0]:`default`,region:{full:!0},size:{max:!0,upscaled:!1,confined:!1},format:`jpg`,rotation:{angle:0}}}function Dn(e,t,n){let r=n.length,i=[];for(let t=0;t<r;t++){let r=n[t];if(r){let t=r.width;i.push(e/t)}}return i}function On(e,t,n){let r=n.length,i=[];for(let a=0;a<r;a++){let r=n[a];r&&i.push({width:Math.floor(e/r),height:Math.floor(t/r)})}return i}function G(e){if(e[`@id`])return e[`@id`];if(e.id)return e.id}function K(e){if(!e||!e.profile||!G(e))return!1;let t=Array.isArray(e.profile)?e.profile:[e.profile];for(let e of t)if(typeof e==`string`&&hn.indexOf(e)!==-1)return!0;return!1}function kn(e){if(!K(e))return!1;let t=Array.isArray(e.profile)?e.profile:[e.profile];for(let e of t)if(typeof e==`string`){if(mn.indexOf(e)!==-1)return!0}else{let t=[...e.supports||[],...e.extraFeatures||[]];if(t.indexOf(`regionByPx`)!==-1&&(t.indexOf(`sizeByW`)!==-1||t.indexOf(`sizeByWh`)!==-1))return!0}return!1}function q(e,t){if(t&&t.profile){let n=t.profile;if(n){let t=Array.isArray(n)?n:[n];return t.includes(`level${e}`)||t.includes(`http://iiif.io/api/image/2/level${e}.json`)||t.includes(`http://iiif.io/api/image/1/level${e}.json`)||t.includes(`http://iiif.io/api/image/1/profiles/level${e}.json`)}}return!1}function An(e){return K(e)?q(0,e)?0:q(1,e)?1:q(2,e)?2:null:null}function jn(e){return(e[`@context`]?Array.isArray(e[`@context`])?e[`@context`]:[e[`@context`]]:[]).indexOf(`http://iiif.io/api/image/3/context.json`)!==-1}function Mn(e){if(!kn(e))return[];let t=[],n=Array.isArray(e.profile)?e.profile:[e.profile],r=n.length;for(let t=0;t<r;t++){let r=n[t];if(r&&typeof r!=`string`&&(r.maxHeight||r.maxWidth))return[{id:G(e),type:`variable`,minWidth:0,minHeight:0,maxHeight:r.maxHeight||r.maxWidth,maxWidth:r.maxWidth||r.maxHeight,level:An(e),version:e[`@context`]===`http://iiif.io/api/image/3/context.json`?3:2}]}if(e.tiles){let n=e.tiles.length;for(let r=0;r<n;r++){let n=e.tiles[r];n&&(n.height||n.width)&&t.push({id:G(e),type:`variable`,minHeight:0,minWidth:0,maxHeight:n.height||n.width,maxWidth:n.width,level:An(e),version:jn(e)?3:2})}}return t}function Nn(e){let t=e.match(/^.*\/(full)\/(((\d+),(\d+)?)|max)\/(\d+)\/default\.(jpg|png|jpeg)$/);if(t&&t[4]&&t[5]){let n=t[1],r=parseInt(t[4],10),i=parseInt(t[5],10),a=t[7];if((n===`max`||n===`full`)&&r&&i&&a)return{type:`fixed`,id:e,height:i,width:r}}return{type:`unknown`,id:e}}function Pn(e){if(e[`@type`])return e[`@type`];if(e.type)return e.type}function Fn(e){if(typeof e==`string`)return Nn(e);let t=Pn(e);if(t!==`Image`&&t!==`sc:Image`)return null;let n=e,r=G(n);return r?r&&n.width&&n.height?{id:r,type:`fixed`,width:n.width,height:n.height,unsafe:!0}:Nn(r):null}function In(e){return K(e)?(e&&e.sizes?e.sizes:[]).map(t=>({id:G(e),type:`fixed-service`,height:t.height,width:t.width,level:An(e),version:jn(e)?3:2})):[]}function Ln(e){let t=[],n=e.length;for(let r=0;r<n;r++){let n=e[r];if(!n)continue;let i=In(n);i.length&&t.push(...i);let a=Mn(n);a.length&&t.push(...a)}return t}function Rn(e){let t=e.service?Array.isArray(e.service)?e.service:[e.service]:[],n=t.length,r=[];for(let e=0;e<n;e++)K(t[e])&&r.push(t[e]);return r}function zn(e,t=!0,n){let r=[],i=Fn(e);if(i===null)return r;let a=e;if(r.push(i),t&&a&&a.width&&a.height){let e=[],t=Rn(a);for(let r of t){let t={id:G(r),width:a.width,height:a.height};if(n.canLoadSync(t)){let r=n.loadServiceSync(t);r&&(r.height||(r.height=a.height),r.width||(r.width=a.width),e.push(...Ln([r])))}}if(e.length)return r.push(...e),r}return a.service&&r.push(...Ln(a.service)),r}function Bn({x:e=0,y:t=0,w:n,h:r,full:i,square:a,percent:o}){if(i)return`full`;if(a)return`square`;if(typeof n>`u`||typeof r>`u`)throw Error(`RegionParameter: invalid region`);let s=`${e},${t},${n},${r}`;return o?`pct:${s}`:s}function Vn({max:e,percentScale:t,upscaled:n,confined:r,width:i,height:a,serialiseAsFull:o,version:s}){let c=[];return n&&c.push(`^`),e?(c.push(o?`full`:`max`),c.join(``)):(r&&c.push(`!`),t&&c.push(`pct:${t}`),i&&c.push(`${i}`),c.push(`,`),a&&s===3&&c.push(`${a}`),c.join(``))}function Hn(e){return`${e.mirror?`!`:``}${(e.angle||0)%360}`}function Un(e,t){let n=e.prefix.startsWith(`/`)?e.prefix.substr(1):e.prefix,r=`${e.scheme}://${e.server}/${n?`${n}/`:``}${e.identifier}`;if(e.type===`base`)return r;if(e.type===`info`)return`${r}/info.json`;let{size:i}=e,{region:a,rotation:o,format:s,quality:c}=e;if(t){let e=t[`@context`]?Array.isArray(t[`@context`])?t[`@context`]:[t[`@context`]]:[],n=e.indexOf(`http://iiif.io/api/image/2/context.json`)!==-1,r=e.indexOf(`http://iiif.io/api/image/3/context.json`)!==-1;if((i.width===t.width&&!i.height||i.height===t.height&&!i.width||i.width===t.width&&i.height===t.height)&&(i={...i,max:!0}),n&&(i.max&&!i.serialiseAsFull&&(i={...i,serialiseAsFull:!0}),!i.max&&i.width&&i.height&&(i={...i,height:void 0}),i={...i,version:2}),r){if(i.max&&i.serialiseAsFull&&(i={...i,serialiseAsFull:!1}),i.width&&!i.height&&t.width&&t.height){let e=t.height/t.width;i={...i,height:Math.ceil(i.width*e)}}i={...i,version:3}}}return[r,Bn(a),Vn(i),Hn(o),`${c}.${s}`].filter(Boolean).join(`/`)}function Wn(e,t,n){let r=En({"@context":e.version===3?`http://iiif.io/api/image/3/context.json`:`http://iiif.io/api/image/2/context.json`,id:W(G(e)),profile:e.level===null||typeof e.level>`u`?`level0`:`level${e.level}`,type:e.version===3?`ImageService3`:`ImageService2`});if(r.type!==`image`)throw Error(`Invalid service`);return r.size.max=!1,r.size.width=t,r.size.height=n,{id:Un(r),type:`fixed`,width:t,height:n||e.height/(e.width||1)*t,unsafe:e.width>t}}function J(e){let t=e.replace(/(https?:\/\/)?(www.)?/i,``);return t.indexOf(`/`)===-1?t:t.split(`/`)[0]}function Gn(e,t,n){let r=e.width?e.width:e.maxWidth;return n.height<=e.maxHeight&&n.width<=e.maxWidth&&n.height>=e.minHeight&&n.width>=e.minWidth&&(!t||Math.abs(n.width-r)<Math.abs(t.width-r))}function Kn(e,t){let n=[],r=Object.assign({unsafeImageService:!1,atAnyCost:!0,fallback:!0,minHeight:64,minWidth:64,maxHeight:1/0,maxWidth:1/0,returnAllOptions:!1,preferFixedSize:!1,allowUnsafe:!1,explain:!1,height:0,width:0},e),i=(e,t=0)=>r.explain?n.push(Array(t).fill(0).map(e=>` `).join(``)+e().trim()):void 0,a=[],o=[],s=null;i(()=>`Using configuration: ${JSON.stringify(r,null,2)}`);let c=(e,t)=>{if(i(()=>`Swapping choice`,3),Gn(r,t,e)){if(r.preferFixedSize&&e.unsafe){i(()=>`We found an image that was marked as unsafe, but it was the best size. (${e.id})`,4),o.push(e);return}r.returnAllOptions&&t&&o.push(t),i(()=>`We found a new image that was the best size. (${e.id})`,4),s=e}else r.returnAllOptions&&o.push(e)};i(()=>`The input shows we have ${t.length} list(s) of candidates to choose from.`);let l=t.length;for(let e=0;e<l;e++){let n=t[e]();i(()=>`Candidate group ${e}: ${JSON.stringify(n,null,2)}`,1);let o=n.length;i(()=>`Checking candidate list number ${e} and found ${o} potential ways of creating image(s)`,1);for(let e=0;e<o;e++){let t=n[e];i(()=>`-> Checking candidate ${e}`,1),t.type===`unknown`&&r.atAnyCost&&(i(()=>`We've found an unknown image type, adding this to the "last resort" list`,2),a.push(t)),t.type===`fixed`&&(t.unsafe?(i(()=>`We've found an unsafe fixed image type, adding this to the "last resort" list`,2),a.push(t)):(i(()=>`We've found a fixed size image, checking if it matches the request`,2),c(t,s))),t.type===`fixed-service`&&(r.unsafeImageService?(i(()=>`Checking for an image from the tile source, without calculating the right height and width (unsafeImageService)`,2),c(Wn(t,r.width,r.height),s)):(i(()=>`Checking for an image from the tile source 3`,2),c(Wn(t,t.width,t.height),s))),t.type===`variable`&&t.maxWidth&&c(Wn({id:t.id,type:`fixed-service`,width:t.maxWidth,height:t.maxWidth,level:t.level,version:t.version},t.maxWidth),s)}if(s&&!r.returnAllOptions){if(s.unsafe||r.allowUnsafe)continue;i(()=>`We found a match in choice list number ${e}, no searching any more`);break}}return r.atAnyCost&&o.length===0?(i(()=>s?`We found an image! ${s.id} of type ${s.type}`:`We found no images, but "atAnyCost" is set, so returning that`),{best:s||a[0]||null,fallback:a.slice(1),log:n}):r.returnAllOptions?(i(()=>`Returning all options that we have found`),{best:(r.atAnyCost?s||o[0]||a[0]:s||o[0])||null,fallback:[...o,...a],log:n}):(i(()=>`Returning the best image that we found, and a fallback`),{best:s||o[0]||null,fallback:s?o:o.slice(1),log:n})}function qn(e,t,n){let r=e>t?e:t,i=n.length,a=[];for(let e=0;e<i;e++){let t=n[e];if(!t||t.scaleFactors.length===0)continue;let i=t.scaleFactors[0];if(!i)continue;let o=r/i,s=[i];for(;o>=t.width;)i*=2,s.push(i),o/=2;a.push({...t,scaleFactors:s})}return a}function Jn(e,t){if(e.length!==t.length)return!1;if(e.length===0&&t.length===0)return!0;let n=e.length,r=!0;for(let i=0;i<n;i++){let n=e[i],a=t[i];if(n.width!==a.width||n.height!==a.height){r=!1;break}}if(r)return!0;let i=0;for(let r=0;r<n;r++)for(let a=0;a<n;a++)if(e[r].width===t[a].width&&e[r].height===t[a].height){i++;break}return i===n}function Yn(e){return q(0,e)}new class{constructor(e={}){U(this,`config`,{verificationsRequired:1,approximateServices:!1,enableFetching:!0,disableThrottling:!1}),U(this,`fetchingCount`,0),U(this,`imageServices`,{}),U(this,`knownImageServers`,{}),this.config=Object.assign(this.config,e)}setConfig(e){Object.assign(this.config,e)}sample(e,t,n=!0){let r=J(G(e)),i=W(G(e)),a=this.knownImageServers[r];return this.imageServices[i]=Object.assign(e,{real:!0}),!a&&e.tiles&&!Yn(e)?(this.knownImageServers[r]={verifications:0,malformed:!1,root:r,preLoaded:n,sampledId:G(e),verified:!1,server:null,result:{context:e[`@context`]||[],sampledProfile:e.profile,resourceServiceRatio:t&&e.height?t.height/e.height:1,sampledSizes:e.sizes||[],sizeRatios:Dn(e.width,e.height,e.sizes||[]),sampledTiles:e.tiles||[]}},!0):this.verify(e)}preLoad(e,t=!0){this.knownImageServers[e.root]=e,t&&(this.knownImageServers[e.root].malformed=!1,this.knownImageServers[e.root].verifications=this.config.verificationsRequired)}predict(e,t=!1,n=!1){let r=e?.source,i=J(G(e)),a=this.knownImageServers[i],o=W(G(e));return this.imageServices[o]?this.imageServices[o]||null:!this.config.approximateServices||!a||!a.result||!(r?.height||e.height)||!(r?.width||e.width)||!n&&(a.malformed||a.verifications<this.config.verificationsRequired)||Yn(e.source)?null:(this.imageServices[o]||(this.imageServices[o]={"@context":a.result.context,"@id":G(e),id:G(e),protocol:`http://iiif.io/api/image`,tiles:r?.tiles||qn(e.width,e.height,a.result.sampledTiles),sizes:r?.sizes||On(Math.round(e.width/a.result.resourceServiceRatio),Math.round(e.height/a.result.resourceServiceRatio),a.result.sizeRatios),profile:r?.profile||a.result.sampledProfile,height:r?.height||e.height,width:r?.width||e.width,real:!1}),this.imageServices[o]||null)}async getThumbnailFromResource(e,t,n=!0,r=[]){let i=e?await this.getImageCandidates(e,n):[];return Kn(t,[()=>r,()=>i])}async getImageCandidates(e,t=!0){let n=e;if(t&&n&&n.height&&n.width){let e=Rn(n);for(let t of e){let e={id:G(t),width:t.width?t.width:n.width,height:t.height?t.height:n.height,source:t};await this.loadService(e)}}return zn(e,t,this)}async verify(e){let t=this.predict(e,!1,!0),n=await this.fetchService(G(e));if(!t)return!1;let r=t.height===n.height&&t.width===n.width&&t[`@context`]===n[`@context`]&&Jn(t.sizes||[],n.sizes||[]);if(r){let t=J(G(e)),n=this.knownImageServers[t];n&&(n.verifications+=1,n.verifications>=this.config.verificationsRequired&&(n.verified=!0))}return r}canLoadSync(e){let t=typeof e==`string`?e:G(e),n=W(t);if(this.imageServices[n])return!0;let r=this.knownImageServers[J(t)];return!!(r&&!r.malformed&&r.verifications>=this.config.verificationsRequired)}async markAsMalformed(e){return this.knownImageServers[J(G(e))].malformed=!0,this.loadService(e,!0)}async fetchService(e,t=!1){let n=W(e),r=this.imageServices[n];if(r&&(!t||r.real))return r;if(!this.config.enableFetching)throw Error(`Fetching is not enabled`);let i=await this.fetch(n).then(e=>e.json());return!i.id&&i[`@id`]&&(i.id=i[`@id`]),i.id!==e&&(i.id=e,i[`@id`]&&(i[`@id`]=e)),this.imageServices[n]=Object.assign(i,{real:!0}),this.imageServices[n]}async fetch(e,t){return fetch(e,t)}async loadService(e,t=!1){if(!this.config.disableThrottling){let e=!0;for(;e;)if(this.fetchingCount>=this.config.verificationsRequired)await new Promise(e=>setTimeout(e,500));else{e=!1;break}}let n=this.knownImageServers[J(G(e))];if(n&&!n.malformed&&!t){await n.result;let t=this.loadServiceSync(e);if(t)return t}this.fetchingCount++;let r=await this.fetchService(G(e),t);return this.fetchingCount--,r.real&&this.sample(r,e),r}loadServiceSync(e){let t=W(G(e));return this.imageServices[t]?this.imageServices[t]:this.config.approximateServices?this.predict(e):null}};const Y={canvasInteraction:!0,spatial:!0,async run(e,{vault:t,options:n}){if(e&&e.type===`Annotation`&&n.targetType===`Annotation`){let n=t.get(e),r=n.target;if(!(r&&r.source?.type===`Canvas`))return;let i=r.source,a=t.get(i);if(!a.items||a.behavior.includes(`multi-image`)||!t.get(a.items[0]))return;let o=Array.isArray(n.body)?n.body[0]:n.body;if(o.type===`SpecificResource`&&o.selector)return;let s=t.get(n.body)[0],c=(s.service||[]).find(e=>K(e));c&&c.width&&c.height&&(c.width!==s.width&&t.modifyEntityField({id:s.id,type:`ContentResource`},`width`,c.width),c.height!==s.height&&t.modifyEntityField({id:s.id,type:`ContentResource`},`height`,c.height))}}};async function Xn(e,t){let r={id:t.generateId(`annotation`),type:`Annotation`},i=t.options.targetType,a=await n(t,`Annotation`,`body`,`@manifest-editor/image-service-creator`)(e,{parent:{resource:r,property:`body`}});if(i===`Annotation`)return{...r,body:[a],motivation:e.motivation||`painting`,target:t.getTarget()};if(i===`Canvas`){let i=t.generateId(`canvas`),o=t.generateId(`annotation-page`,{id:i,type:`Canvas`}),s=t.embed({...r,motivation:`painting`,body:[a],target:{type:`SpecificResource`,source:{id:i,type:`Canvas`}}}),c=t.embed({id:o,type:`AnnotationPage`,items:[s]}),l;return e.service?.sizes&&(l=await n(t,`Canvas`,`thumbnail`,`@manifest-editor/thumbnail-image`)({service:e.service,width:e.thumbnailSize||400})),t.embed({id:i,type:`Canvas`,label:e.label||{en:[`Untitled canvas`]},height:a.resource.height||1e3,width:a.resource.width||1e3,thumbnail:l?[l]:void 0,items:[c]})}}function Zn(e){return k(z,{...e})}const X=r({id:`@manifest-editor/image-service-creator`,configKey:`iiif-image-services`,create:Ct,label:`IIIF image`,labelMessage:{namespace:`creators`,key:`definitions.service.label`},summary:`Add a zoomable image using an IIIF image service or info.json link.`,summaryMessage:{namespace:`creators`,key:`definitions.service.summary`},icon:k(v,{}),tags:[`image`,`image-service`],async supportsResource(e,t){if(!P(e))return!1;let n=R(e);if(!n)return!1;let r=await Je(n,t);return Xe(r)?{initialData:{url:e,service:r}}:!1},render(e){return k(z,{...e})},resourceType:`ContentResource`,resourceFields:[`id`,`type`,`height`,`width`,`format`,`service`],supports:{initialData:!0,parentFields:[`logo`,`body`,`thumbnail`,`items`],custom(e,t){return e.property!==`items`||e.resource.type===`ContentResource`&&t.get(e.resource,{skipSelfReturn:!1})?.type===`Choice`}}}),Qn=r({id:`@manifest-editor/image-service-annotation`,create:Xn,label:`IIIF image`,labelMessage:{namespace:`creators`,key:`definitions.service.label`},dependencies:[`@manifest-editor/image-service-creator`],summary:`Add a zoomable image using an IIIF image service or info.json link.`,summaryMessage:{namespace:`creators`,key:`definitions.service.summary`},tags:[`image`,`image-service`],icon:k(v,{}),render(e){return k(Zn,{...e})},resourceType:`Annotation`,resourceFields:[`id`,`type`,`motivation`,`body`,`target`],additionalTypes:[`Canvas`],supportsResource:X.supportsResource,supports:{initialData:!0,onlyPainting:!0,parentTypes:[`AnnotationPage`,`Manifest`],parentFields:[`items`]},sideEffects:[Y,H,V],staticFields:{type:`Annotation`}});async function $n(e,t){let r={id:t.generateId(`annotation`),type:`Annotation`},i=t.options.targetType,a=await n(t,`Annotation`,`body`,`@manifest-editor/image-url-creator`)(e,{parent:{resource:r,property:`body`}});if(i===`Annotation`)return t.embed({...r,body:[a],motivation:e.motivation||`painting`,target:t.getTarget()});if(i===`Canvas`){let n=t.generateId(`canvas`),i=t.generateId(`annotation-page`,{id:n,type:`Canvas`}),o=t.embed({...r,motivation:`painting`,body:[a],target:{type:`SpecificResource`,source:{id:n,type:`Canvas`}}}),s=t.embed({id:i,type:`AnnotationPage`,items:[o]});return t.embed({id:n,type:`Canvas`,label:e.label||{en:[`Untitled canvas`]},height:a.resource.height||1e3,width:a.resource.width||1e3,items:[s]})}throw Error(`Unsupported target type`)}function er(e){return k(Et,{...e})}const tr=r({id:`@manifest-editor/image-url-annotation`,create:$n,label:`Image`,labelMessage:{namespace:`creators`,key:`definitions.imageUrl.label`},dependencies:[`@manifest-editor/image-url-creator`],summary:`Add an image using a direct image-file link.`,summaryMessage:{namespace:`creators`,key:`definitions.imageUrl.summary`},tags:[`image`],icon:k(u,{}),render(e){return k(er,{...e})},resourceType:`Annotation`,resourceFields:[`id`,`type`,`motivation`,`body`,`target`],additionalTypes:[`Canvas`],supportsResource:B.supportsResource,supports:{initialData:!0,onlyPainting:!0,parentTypes:[`AnnotationPage`,`Manifest`],parentFields:[`items`]},sideEffects:[Y,H,V],staticFields:{type:`Annotation`}});async function nr(e,t){let r=[],i=n(t,`Annotation`,`body`,`@manifest-editor/image-url-creator`);for(let n of e.images)r.push(await i(n,t.options));return r}function rr(e){let t=a(`creators`),n=a(`common`);return k(x,{children:A(m.Form,{onSubmit:t=>{t.preventDefault();let n=new FormData(t.target),r=Object.fromEntries(n.entries());r.urls&&e.runCreate({images:r.urls.split(`
|
|
97
|
+
`).map(e=>({url:e}))})},children:[A(m.InputContainer,{className:`mb-4`,children:[k(m.Label,{children:t(`form.urlList`)}),k(m.TextArea,{"aria-label":t(`form.urlList`),name:`urls`,rows:`10`,defaultValue:e.options.initialData?.images?.map(e=>e.url).join(`
|
|
98
|
+
`)||``})]}),k(l,{primary:!0,large:!0,type:`submit`,children:n(`actions.create`)})]})})}async function ir(e,t){let r=[],i=n(t,`AnnotationPage`,`items`,`@manifest-editor/image-url-annotation`);for(let n of e.images)r.push(await i(n,t.options));return r}const ar=r({id:`@manifest-editor/image-url-list-annotation`,create:ir,label:`Multiple images`,labelMessage:{namespace:`creators`,key:`definitions.imageList.label`},dependencies:[`@manifest-editor/image-url-annotation`],summary:`Add several images using one direct image link per line.`,summaryMessage:{namespace:`creators`,key:`definitions.imageList.summary`},tags:[`image`],icon:k(y,{}),render(e){return k(rr,{...e})},resourceType:`Annotation`,resourceFields:[`id`,`type`,`motivation`,`body`,`target`],additionalTypes:[`Canvas`],supports:{onlyPainting:!0,parentTypes:[`AnnotationPage`,`Manifest`],parentFields:[`items`]},sideEffects:[Y,H,V],staticFields:{type:`Annotation`}}),or=r({id:`@manifest-editor/no-body-annotation`,create:sr,label:`Highlight`,labelMessage:{namespace:`creators`,key:`definitions.highlight.label`},summary:`Mark a region of the canvas without adding any content.`,summaryMessage:{namespace:`creators`,key:`definitions.highlight.summary`},icon:k(f,{}),resourceType:`Annotation`,resourceFields:[`id`,`type`,`motivation`,`target`],supports:{initialData:!0,parentTypes:[`AnnotationPage`],parentFields:[`items`],disallowPainting:!0},actionButton:`Create highlight`,actionButtonMessage:{namespace:`creators`,key:`definitions.highlight.create`},sideEffects:[],staticFields:{type:`Annotation`}});function sr(e,t){return t.embed({id:t.generateId(`annotation`),type:`Annotation`,label:e?.label,motivation:e.motivation||t.options.initialData?.motivation||`highlighting`,target:t.getTarget()})}function cr({media:e,onError:t,duration:n,onDuration:r,onDimensions:i}){let[{element:a,currentTime:o,progress:s},c,l]=Ce({duration:n});return A(he,{element:a,state:c,actions:l,currentTime:o,progress:s,children:[k(`div`,{style:{maxHeight:400,aspectRatio:`${e.width}/${e.height}`,position:`relative`},children:k(me.VideoHTML,{element:a,media:e,playPause:l.playPause})}),k(_t,{onError:t,onDuration:r,onDimensions:i})]})}async function lr(e,t){let n={id:t.generateId(`annotation`),type:`Annotation`},r=t.options.targetType,i=t.embed({id:e.url,type:`Video`,format:`video/mp4`,width:e.width,height:e.height,duration:e.duration||0});if(r===`Annotation`)return t.embed({...n,label:c(e.label)&&e.label,motivation:e.motivation||t.options.initialData?.motivation||`painting`,body:i,target:t.getTarget()});if(r===`Canvas`){let r=t.generateId(`canvas`),a=t.generateId(`annotation-page`,{id:r,type:`Canvas`}),o=t.embed({...n,motivation:`painting`,body:i,target:{type:`SpecificResource`,source:{id:r,type:`Canvas`}}}),s=t.embed({id:a,type:`AnnotationPage`,items:[o]});return t.embed({id:r,type:`Canvas`,label:c(e.label)?e.label:void 0,duration:e.duration||0,width:e.width,height:e.height,items:[s]})}}function ur(e){let t=a(`editor-api`),n=a(`creators`),[r]=O(()=>e.options.initialData),[i,o]=O(r.url||``),[s,c]=O(r.duration||0),[u,d]=O(r.width||0),[f,m]=O(r.height||0),[h,g]=O(``),[_,v]=O(r.label||{en:[``]});return ue(()=>{g(``);let e=i===r.url?r:{};if(c(e.duration||0),d(e.width||0),m(e.height||0),i){let e=i.split(`/`).pop()?.split(`.`).shift();v(i===r.url&&r.label?r.label:{en:[e||``]})}},[i,r]),A(x,{children:[h?A(p,{children:[k(`div`,{role:`alert`,children:n(`errors.media`)}),A(`details`,{children:[k(`summary`,{children:n(`errors.details`)}),h]})]}):null,A(C,{$wide:!0,children:[k(w,{htmlFor:`video-url`,children:n(`form.videoUrl`)}),k(S,{type:`url`,placeholder:`https://example.org/video.mp4`,id:`video-url`,value:i,onChange:e=>o(e.target.value)})]}),i&&!h?k(`div`,{children:k(T,{containerId:`label`,focusId:`label_`,label:t(`fields.label`),fields:_,onSave:e=>v(e.toInternationalString())},`${i}__${s}`)}):null,i&&!h?k(`div`,{className:`mb-4 bg-black`,children:k(cr,{duration:s,onDuration:e=>c(e),onError:e=>g(e),media:{url:i,duration:s,height:f,width:u,type:`Video`},onDimensions:(e,t)=>{d(e||0),m(t||0)}})}):null,!h&&(s||u||f)?k(C,{$wide:!0,children:k(oe,{widthId:`width`,width:u||0,changeWidth:e=>d(e),heightId:`height`,height:f||0,changeHeight:e=>m(e),durationId:`duration`,duration:s||0,changeDuration:e=>c(e)})}):null,k(l,{primary:!0,large:!0,type:`button`,onPress:()=>{e.runCreate({url:i,duration:s,label:_,width:u,height:f})},isDisabled:!i||!!h,children:n(`form.addVideo`)})]})}const dr=r({id:`@manifest-editor/video-annotation`,create:lr,label:`Video`,labelMessage:{namespace:`creators`,key:`definitions.video.label`},summary:`Add video from a direct video-file link. Use YouTube for YouTube videos.`,summaryMessage:{namespace:`creators`,key:`definitions.video.summary`},icon:k(re,{}),render(e){return k(ur,{...e})},resourceType:`Annotation`,resourceFields:[`id`,`type`,`motivation`,`body`,`target`],additionalTypes:[`Canvas`],async supportsResource(e,t){return P(e)&&((await F(e,t)).startsWith(`video/`)||I(e,[`.mp4`,`.m4v`,`.webm`,`.mov`]))?{initialData:{url:e}}:!1},supports:{onlyPainting:!0,initialData:!0,parentTypes:[`AnnotationPage`,`Manifest`],parentFields:[`items`]},staticFields:{type:`Annotation`}}),fr=()=>k(`svg`,{xmlns:`http://www.w3.org/2000/svg`,height:`24px`,viewBox:`0 0 24 24`,width:`24px`,fill:`#000000`,transform:`scale(-1, 1)`,children:A(`g`,{children:[k(`rect`,{fill:`none`,height:`24`,width:`24`}),k(`path`,{d:`M16,20H2V4h14V20z M18,8h4V4h-4V8z M18,20h4v-4h-4V20z M18,14h4v-4h-4V14z`})]})}),pr=r({id:`@manifest-editor/empty-annotation-page`,create:(e,t)=>t.embed({id:t.generateId(`annotations`),label:e.label,type:`AnnotationPage`,items:[]}),label:`Empty annotation page`,labelMessage:{namespace:`creators`,key:`definitions.annotationPage.label`},summary:`Create an empty page to organise annotations.`,summaryMessage:{namespace:`creators`,key:`definitions.annotationPage.summary`},icon:k(fr,{}),resourceType:`AnnotationPage`,resourceFields:[`id`,`type`,`items`],supports:{parentTypes:[`Manifest`,`Canvas`,`Range`],parentFieldMap:{Manifest:[`annotations`],Canvas:[`items`,`annotations`],Range:[`annotations`]}}});function mr(e){if(!(e instanceof Error))return;let t={"Enter an absolute HTTP or HTTPS URL for the WebVTT file.":`vttUrl`,"WebVTT captions must belong to a Canvas.":`vttCanvas`,"Could not load the image service":`service`,"Could not find Manifest":`manifest`,"Could not find Manifest ID":`manifest`,"Manifest not found":`manifest`,"Collection not found":`collection`,"Canvas not found":`canvas`},n=Object.hasOwn(t,e.message)?t[e.message]:void 0;return n?{code:n,message:{namespace:`creators`,key:`errors.${n}`}}:void 0}const hr=e=>A(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,height:`1em`,width:`1em`,...e,children:[k(`path`,{d:`M0 0h24v24H0z`,fill:`none`}),k(`path`,{d:`M5 17v2h14v-2H5zm4.5-4.2h5l.9 2.2h2.1L12.75 4h-1.5L6.5 15h2.1l.9-2.2zM12 5.98 13.87 11h-3.74L12 5.98z`})]});async function gr(e,t){let n=e.url.trim();if(!P(n))throw Error(`Enter an absolute HTTP or HTTPS URL for the WebVTT file.`);let r=t.getParent();if(r?.type!==`Canvas`)throw Error(`WebVTT captions must belong to a Canvas.`);let i=t.embed({id:n,type:`Text`,format:`text/vtt`,...c(e.label)?{label:e.label}:{},...e.language?.trim()?{language:e.language.trim()}:{}}),a=t.embed({id:t.generateId(`annotation`),type:`Annotation`,motivation:`supplementing`,body:i,target:r});return t.embed({id:t.generateId(`annotation-page`),type:`AnnotationPage`,items:[a]})}function _r(e){let t=a(`editor-api`),n=a(`creators`),[r,i]=O(e.options.initialData?.label||{en:[`Captions in WebVTT format`]});return k(x,{children:A(`form`,{onSubmit:t=>{t.preventDefault();let n=new FormData(t.currentTarget),i=String(n.get(`url`)||``).trim(),a=String(n.get(`language`)||``).trim();e.runCreate({url:i,label:c(r)?r:void 0,language:a||void 0})},children:[k(`p`,{id:`vtt-help`,className:`mb-4 text-sm text-gray-600`,children:n(`form.vttHelp`)}),A(C,{$wide:!0,children:[k(w,{htmlFor:`vtt-url`,children:n(`form.vttUrl`)}),k(S,{id:`vtt-url`,name:`url`,type:`url`,required:!0,placeholder:`https://example.org/captions.vtt`,pattern:`https?://.+`,title:n(`form.absoluteUrl`),"aria-describedby":`vtt-help`,defaultValue:e.options.initialData?.url||``})]}),k(T,{focusId:`vtt-label`,label:t(`fields.label`),fields:r,onSave:e=>i(e.toInternationalString())}),A(C,{$wide:!0,children:[k(w,{htmlFor:`vtt-language`,children:n(`form.languageCode`)}),k(S,{id:`vtt-language`,name:`language`,type:`text`,placeholder:`en`,title:n(`form.languageCodeHelp`),defaultValue:e.options.initialData?.language??`en`})]}),k(l,{primary:!0,large:!0,type:`submit`,children:n(`form.addCaptions`)})]})})}const vr=r({validationErrorMessage:mr,id:`@manifest-editor/vtt-annotation-page`,label:`WebVTT captions`,labelMessage:{namespace:`creators`,key:`definitions.vtt.label`},tags:[`captions`],summary:`Add subtitles or captions from a WebVTT file to an audio or video canvas.`,summaryMessage:{namespace:`creators`,key:`definitions.vtt.summary`},icon:k(hr,{}),create:gr,render:e=>k(_r,{...e}),resourceType:`AnnotationPage`,resourceFields:[`id`,`type`,`items`],supports:{parentTypes:[`Canvas`],parentFields:[`annotations`],custom:({resource:e},t)=>Be(t,e)}}),yr=r({id:`@manifest-editor/empty-canvas`,create:(e,t)=>{let n=t.generateId(`canvas`),r=t.embed({id:t.generateId(`annotation-page`,{id:n,type:`Canvas`}),type:`AnnotationPage`,items:[]}),i=t.embed({id:n,type:`Canvas`,label:e.label||{en:[``]},height:e.height||2e3,width:e.width||3e3,items:[r]}),a=Ve.find(t=>t.id===e.layoutId);return a&&(i.meta[Re]={state:He(a)}),i},render:e=>k(ae,{runCreate:e.runCreate}),label:`Empty canvas`,labelMessage:{namespace:`creators`,key:`definitions.emptyCanvas.label`},summary:`Start with an image layout or a blank canvas`,summaryMessage:{namespace:`creators`,key:`definitions.emptyCanvas.summary`},icon:k(f,{}),resourceType:`Canvas`,resourceFields:[`id`,`type`,`label`,`height`,`width`,`items`],supports:{parentTypes:[`Manifest`],parentFields:[`items`]}});var br=`Invariant failed`;function Z(e,t){if(!e)throw Error(br)}const xr=r({id:`@manifest-editor/internal-canvas`,create:Cr,label:`Existing canvas`,labelMessage:{namespace:`creators`,key:`definitions.internalCanvas.label`},summary:`Choose a canvas from this manifest.`,summaryMessage:{namespace:`creators`,key:`definitions.internalCanvas.summary`},icon:k(fr,{}),resourceType:`Canvas`,resourceFields:[`id`,`type`,`label`],supports:{parentTypes:[`Manifest`],parentFields:[`start`]},render:e=>k(Sr,{...e})});function Sr(e){let t=a(`creators`),n=Ie(),{runCreate:r}=e,i=D({t,runCreate:r});i.current={t,runCreate:r};let o=ye(),s=we(),c=E(()=>({canSelectCanvas:!0,canSelectCollection:!1,canSelectManifest:!1,canCropImage:!1,alwaysShowNavigationArrow:!1,multiSelect:!1}),[]),l=E(()=>[{type:`callback`,cb:e=>i.current.runCreate({id:e}),get label(){return i.current.t(`browser.selectCanvas`)},supportedTypes:[`Canvas`],format:{type:`url`}}],[i]),u=E(()=>({saveToLocalStorage:!1,restoreFromLocalStorage:!1,initialHistory:[{url:o?.id,resource:o?.id,route:`/manifest?id=${encodeURIComponent(o?.id||``)}`,metadata:{type:`Manifest`}}]}),[o?.id]);return Z(o,`Manifest is not loaded`),k(ge,{vault:s,children:k(b,{plugins:n,vault:s,navigation:c,output:l,history:u})})}async function Cr(e,t){let n=t.vault.get({id:e.id,type:`Canvas`},{skipSelfReturn:!0});return Z(n,`Selected Canvas is not loaded`),t.embed(n)}async function wr(e,t){return t.embed({id:t.generateId(`html/${e.language}`),language:e.language,type:`TextualBody`,format:`text/html`,value:e.body||``})}function Tr(e){let t=a(`common`),{i18n:n}=Fe(),[r,i]=O(e.options.initialData?.body??`<p></p>`),[o,s]=O(e.options.initialData?.language??n.defaultLanguage);return A(x,{children:[k(h,{value:r,onChange:e=>i(e)}),k(l,{primary:!0,large:!0,type:`button`,onPress:()=>{e.runCreate({language:o,body:r})},children:t(`actions.create`)})]})}const Er=r({id:`@manifest-editor/html-body-creator`,create:wr,label:`Formatted text`,labelMessage:{namespace:`creators`,key:`definitions.htmlBody.label`},summary:`Write formatted text as the content of an annotation.`,summaryMessage:{namespace:`creators`,key:`definitions.htmlBody.summary`},icon:k(ne,{}),render(e){return k(Tr,{...e})},resourceType:`ContentResource`,resourceFields:[`id`,`language`,`type`,`format`,`value`],supports:{parentTypes:[`Annotation`,`ContentResource`],parentFields:[`body`,`items`],custom(e,t){if(e.resource.type===`Annotation`)return e.property===`body`;let n=t.get(e.resource,{skipSelfReturn:!1});return e.property===`items`&&n?.type===`Choice`}},staticFields:{type:`TextualBody`,format:`text/html`}});function Q(e,t,n,r=0){return`${e}/${Math.floor(t.x)},${Math.floor(t.y)},${Math.floor(t.width)},${Math.floor(t.height)}/${n}/${r}/default.jpg`}async function Dr(n,r){let i=r.options.targetType,a=n.output,s=[];for(let{resource:c,selector:l,parent:u,rotation:d}of a){let a=c.type,f=new o;if(N(c)||a===`ImageService`){let a=N(c)?c:await fetch(Ee(c.id)).then(e=>{if(!e.ok)throw Error(`Could not load the image service`);return e.json()}),o=await r.create(`@manifest-editor/image-service-creator`,{url:c.id,service:a},{targetType:`ContentResource`}),u=e(l?.type===`BoxSelector`?{width:Math.floor(l.spatial.width),height:Math.floor(l.spatial.height)}:{width:a.width,height:a.height},d);n.trackSize?.(u);let f=t(l,d);if(f&&(o=r.embed({type:`SpecificResource`,source:o,selector:f})),i===`ContentResource`){s.push(o);continue}let p=i===`Canvas`?r.generateId(`Canvas`):void 0,m=r.embed({id:r.generateId(`Annotation`),type:`Annotation`,motivation:`painting`,body:o,target:p??r.getTarget()});s.push(i===`Canvas`?r.embed({id:p,type:`Canvas`,label:c.label||{en:[`Untitled canvas`]},...u,items:[r.embed({id:r.generateId(`AnnotationPage`),type:`AnnotationPage`,items:[m]})]}):m);continue}if((i===`Canvas`||i===`Annotation`||i===`ContentResource`)&&a===`Canvas`){let a=c.id,o=u?.type===`Manifest`?u.id:void 0;Z(o,`Could not find Manifest`);let p=f.get({id:o,type:`Manifest`})||await f.loadManifest(o);Z(p,`Manifest not found`);let m=r.config.addManifestMetadataToCanvas!==!1;n.trackManifest?.({requiredStatement:p.requiredStatement,rights:p.rights,...m?{metadata:p.metadata||[]}:{},partOf:[{id:o,type:`Manifest`,label:p.label}]});let h=e=>{if(e.type===`SpecificResource`&&e.source)return{...e,source:h(e.source)};let t=e.type===`Canvas`&&!m?{}:{metadata:p.metadata||[]};return{requiredStatement:p.requiredStatement,rights:p.rights,...t,...e,partOf:[{id:o,type:`Manifest`,label:p.label}]}},g=p.items.find(e=>e.id===a);Z(g,`Canvas not found`);let _=f.get(g),v=t(l,d);if(i===`Canvas`&&!v){let e=f.toPresentation3(_);e.label||(e.label={en:[`Untitled canvas`]}),r.vault.loadSync(e.id,h(e)),s.push(r.embed(r.vault.get({id:e.id,type:`Canvas`})));continue}let y=f.get(_.items[0]),b=f.get(y.items[0]);if(i===`Annotation`||i===`Canvas`||i===`ContentResource`){let t=f.toPresentation3(b);t.id=r.generateId(`Annotation`);let a=null,o={width:0,height:0};if(t?.body?.service){let e=t?.body.width,r=t?.body.height;a=Oe(t?.body)[0],a&&(!a.width||!a.height)&&(a.width=e,a.height=r),o.width=e,o.height=r,n.trackSize&&n.trackSize(o)}if(v){let c={...t.body},u=``;if(a&&l?.type===`BoxSelector`){let e=a.id||a[`@id`]||``;e&&(c.id=Q(e,l.spatial,`max`,d),u=Q(e,l.spatial,`512,`,d))}t.body={id:r.generateId(`SpecificResource`,b),type:`SpecificResource`,source:c,selector:v};let f=e(l?.type===`BoxSelector`?{width:~~l.spatial.width,height:~~l.spatial.height}:o,d);if(n.trackSize&&n.trackSize(f),i===`ContentResource`){s.push(h(t.body));continue}if(i===`Canvas`){let e=r.generateId(`Canvas`,b);t.target=e;let n=r.generateId(`Page`,b),i=r.embed({id:n,type:`AnnotationPage`,items:[t]}),{width:a,height:o}=f;s.push(r.embed(h({id:e,type:`Canvas`,label:{en:[`Untitled canvas`]},width:a,height:o,thumbnail:u?[r.embed({id:u,type:`Image`,format:`image/jpeg`,width:512,height:Math.round(o/a*512)})]:void 0,items:[i]})));continue}s.push(r.embed(h({...t,target:r.getTarget()})));continue}s.push(r.embed(h({...t,target:r.getTarget()})))}}}return s}const Or=le(()=>import(`./iiif-browser-form.lazy-B3L53hOy.js`)),kr=r({validationErrorMessage:mr,id:`@manifest-editor/iiif-browser-creator`,create:Dr,label:`Browse IIIF content`,labelMessage:{namespace:`creators`,key:`definitions.browser.label`},hideSummary:!0,summary:`Browse an IIIF manifest, collection, or supported collection webpage and choose content to add.`,summaryMessage:{namespace:`creators`,key:`definitions.browser.summary`},icon:k(_,{}),configuration:{fields:[{id:`addManifestMetadataToCanvas`,type:`checkbox`,label:`Add manifest metadata to imported canvases`,labelMessage:{namespace:`creators`,key:`definitions.browser.copyMetadata`},summary:`Copies metadata from the source Manifest when the IIIF Browser creates a Canvas.`,summaryMessage:{namespace:`creators`,key:`definitions.browser.copyMetadataHelp`},defaultValue:!0}]},render(e){return k(Or,{...e})},hiddenModal:!0,tags:[`image`,`image-service`],async supportsResource(e,t){let n=Ye(await Je(e,t));return n===`Manifest`||n===`Collection`||await Ze(e)?{initialData:{url:e}}:!1},resourceType:`ContentResource`,resourceFields:[`id`,`language`,`type`,`format`,`value`],additionalTypes:[`Annotation`,`Canvas`],supports:{initialData:!0,onlyPainting:!0,parentTypes:[`Annotation`,`Manifest`,`AnnotationPage`],parentFields:[`body`,`items`],parentFieldMap:{Annotation:[`body`],Manifest:[`items`],AnnotationPage:[`items`]}},sideEffects:[{canvasInteraction:!0,spatial:!0,async run(e,{vault:t,options:n}){if(!(e&&e.type===`Annotation`&&n.targetType===`Annotation`))return;let r=t.get(e),i=r.target;if(!(i&&i.source?.type===`Canvas`))return;let a=(Array.isArray(r.body)?r.body[0]:r.body)?.selector;if(!(a&&(a.type===`iiif:ImageApiSelector`||a.type===`ImageApiSelector`)&&a.region))return;let[o,s,c,l]=a.region.split(`,`).map(Number);if(![o,s,c,l].every(Number.isFinite)||c<=0||l<=0)return;let[u]=t.get(r.body),d=(u?.service||[]).find(e=>N(e)),f=d?.id||d?.[`@id`];if(!f)return;let p=Q(f,{x:o,y:s,width:c,height:l},`512,`);t.loadSync(p,{id:p,type:`Image`,format:`image/jpeg`,width:512,height:Math.round(l/c*512),service:[d]}),t.modifyEntityField(i.source,`thumbnail`,[{id:p,type:`ContentResource`}])}},Y,H,V],staticFields:{}}),Ar=r({id:`@manifest-editor/image-url-list`,label:`Multiple images`,labelMessage:{namespace:`creators`,key:`definitions.imageList.label`},summary:`Add several images using one direct image link per line.`,summaryMessage:{namespace:`creators`,key:`definitions.imageList.summary`},create:nr,icon:k(y,{}),render(e){return k(rr,{...e})},resourceType:`ContentResource`,resourceFields:[`format`],supports:{parentFields:[`logo`,`body`,`thumbnail`]},staticFields:{type:`Image`}});async function jr(e,t){return t.embed({id:e.url,type:`Text`,label:e.label,format:`text/plain`})}function Mr(e){let t=a(`editor-api`),n=a(`creators`),r=a(`common`),[i,o]=O(e.options.initialData?.label||{en:[`View as text`]});return k(x,{children:A(`form`,{onSubmit:t=>{t.preventDefault();let n=new FormData(t.target),r=Object.fromEntries(n.entries());r.url&&e.runCreate({url:r.url,label:i})},children:[k(T,{focusId:`label`,label:t(`fields.label`),fields:i,onSave:e=>o(e.toInternationalString())}),A(C,{$wide:!0,children:[k(w,{htmlFor:`url`,children:n(`form.textUrl`)}),k(S,{type:`url`,id:`url`,name:`url`,defaultValue:e.options.initialData?.url||``})]}),k(l,{primary:!0,large:!0,type:`submit`,children:r(`actions.create`)})]})})}const Nr=r({id:`@manifest-editor/plaintext-creator`,create:jr,label:`Plain text link`,labelMessage:{namespace:`creators`,key:`definitions.plaintext.label`},summary:`Link to an external plain-text file.`,summaryMessage:{namespace:`creators`,key:`definitions.plaintext.summary`},icon:k(hr,{}),async supportsResource(e,t){return P(e)&&((await F(e,t)).startsWith(`text/plain`)||I(e,[`.txt`]))?{initialData:{url:e}}:!1},render(e){return k(Mr,{...e})},resourceType:`ContentResource`,resourceFields:[`label`,`format`],supports:{initialData:!0,parentFields:[`seeAlso`,`rendering`]},staticFields:{format:`text/plain`}});function Pr(e,t){let n=De(L(e));return M({identifier:n.identifier,server:n.server,scheme:n.scheme,type:`image`,size:{max:!1,confined:!1,upscaled:!1,width:t.width,height:t.height},format:`jpg`,region:{full:!0},rotation:{angle:0},quality:`default`,prefix:n.prefix,originalPath:n.originalPath})}function Fr(e){return e.endsWith(`default.jpg`)?M({...ke(e),type:`info`}):Ee(e)}async function Ir(e,t){let n=L(e.service),r=n.sizes,i=St(n,t.config,!0);if(e.thumbnailUrl)return t.embed({id:e.thumbnailUrl,type:`Image`,format:`image/jpeg`,width:e.width,height:e.height,service:[i]});if(r){let a=e.width||400,o=null;for(let e of r)(!o||Math.abs(e.width-a)<Math.abs(o.width-a))&&(o={width:e.width,height:e.height});if(o){let e=Pr(n,o);return t.embed({id:e,type:`Image`,format:`image/jpeg`,width:o.width,height:o.height,service:[i]})}}return null}function Lr(e){let t=a(`creators`),n=a(`common`),{locale:r}=i(),[o,s]=O(e.options.initialData?.url||``),[c,u]=O(e.options.initialData?.service||null),[d,f]=O({width:e.options.initialData?.width||0,height:e.options.initialData?.height||0}),p=E(()=>!c||!d.width||!d.height?null:Pr(c,d),[d,c]),{load:m,loading:h,failed:g}=xt();return c?A(x,{children:[A(`div`,{className:`mb-4`,children:[k(`div`,{className:`mb-2`,children:c[`@id`]||c.id}),k(`div`,{className:`flex gap-2 mb-4`,children:c.sizes?.map(e=>{let n=e.width===d.width;return k(l,{primary:n,isDisabled:n,large:!0,onPress:()=>f(e),children:t(`form.dimensions`,{width:new Intl.NumberFormat(r).format(e.width),height:e.height===void 0?``:new Intl.NumberFormat(r).format(e.height)})},e.width)})}),p?k(`img`,{src:p,alt:t(`image.previewAlt`)}):null]}),k(l,{primary:!0,large:!0,isDisabled:!p,onPress:()=>{c&&e.runCreate({service:c,width:d.width,height:d.height,thumbnailUrl:p})},children:t(`form.addThumbnail`)})]}):k(x,{children:A(`form`,{onSubmit:e=>{e.preventDefault();let t=new FormData(e.target),n=Object.fromEntries(t.entries()).url;n&&m(()=>Fr(n),e=>{u(e);let t=e.sizes?.[0];t&&f(t)})},"aria-busy":h,children:[g?k(`div`,{role:`alert`,children:t(`errors.service`)}):null,h?k(`output`,{children:n(`status.loading`)}):null,k(`div`,{className:`flex gap-2 items-center`,children:A(C,{$wide:!0,children:[k(w,{htmlFor:`url`,children:t(`form.serviceUrl`)}),k(S,{id:`url`,name:`url`,defaultValue:e.options.initialData?.url||``,onPaste:e=>{let t=e.clipboardData.getData(`text/plain`);s(t?Fr(t):``)},onBlur:e=>s(e.currentTarget.value?Fr(e.currentTarget.value):``)})]})}),k(`div`,{children:k(l,{primary:!0,large:!0,type:`submit`,isDisabled:!o||h,children:t(`form.selectSize`)})})]})})}const Rr=r({id:`@manifest-editor/thumbnail-image`,configKey:`iiif-image-services`,create:Ir,label:`IIIF thumbnail`,labelMessage:{namespace:`creators`,key:`definitions.thumbnail.label`},summary:`Create a thumbnail from an IIIF image service.`,summaryMessage:{namespace:`creators`,key:`definitions.thumbnail.summary`},icon:k(te,{}),async supportsResource(e,t,n){let r=await X.supportsResource(e,t,n);if(typeof r!=`object`)return!1;let i=r.initialData?.service?.sizes?.[0];return i?{initialData:{...r.initialData,width:i.width,height:i.height}}:!1},render(e){return k(Lr,{...e})},resourceType:`ContentResource`,resourceFields:[`id`,`type`,`format`,`width`,`height`,`service`],supports:{initialData:!0,parentFields:[`thumbnail`]}});function zr(){return A(`svg`,{xmlns:`http://www.w3.org/2000/svg`,height:`24px`,viewBox:`0 0 24 24`,width:`24px`,fill:`#000000`,children:[k(`path`,{d:`M0 0h24v24H0z`,fill:`none`}),k(`path`,{d:`M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z`})]})}async function Br(e,t){return t.embed({id:e.url,type:`Text`,label:e.label,format:`text/html`})}function Vr(e){let t=a(`editor-api`),n=a(`creators`),[r,i]=O(e.options.initialData?.label||{en:[``]});return k(x,{children:A(`form`,{onSubmit:t=>{t.preventDefault();let n=new FormData(t.target),i=Object.fromEntries(n.entries());i.url&&e.runCreate({url:i.url,label:r})},children:[k(T,{focusId:`label`,label:t(`fields.label`),fields:r,onSave:e=>i(e.toInternationalString())}),A(C,{$wide:!0,children:[k(w,{htmlFor:`url`,children:n(`form.link`)}),k(S,{type:`url`,id:`url`,name:`url`,defaultValue:e.options.initialData?.url||``})]}),k(l,{primary:!0,large:!0,type:`submit`,children:n(`form.createLink`)})]})})}const Hr=r({id:`@manifest-editor/web-page-creator`,create:Br,label:`Web page`,labelMessage:{namespace:`creators`,key:`definitions.webpage.label`},summary:`Link to an external webpage.`,summaryMessage:{namespace:`creators`,key:`definitions.webpage.summary`},icon:k(zr,{}),async supportsResource(e,t){if(!P(e))return!1;let n=await F(e,t);return n.startsWith(`text/html`)||n.startsWith(`application/xhtml+xml`)?{initialData:{url:e}}:!1},render(e){return k(Vr,{...e})},resourceType:`ContentResource`,resourceFields:[`label`,`format`],supports:{initialData:!0,parentFields:[`seeAlso`,`rendering`,`homepage`]}}),Ur=/^.*(?:(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/|shorts\/)|(?:(?:watch)?\?vi?=|&vi?=))([^#&?]*).*/;function $(e){let t=(e||``).match(Ur);return t?t[1]:null}function Wr(e){return!!$(e.youtubeUrl)}function Gr(e,t){let n=$(e.youtubeUrl);return t.embed({id:`https://www.youtube.com/watch?v=${n}`,type:`Video`,service:[{type:`Service`,profile:`http://digirati.com/objectifier`,params:{data:`https://www.youtube.com/embed/${n}`}},{id:`https://www.youtube.com/watch?v=${n}`,type:`Service`,profile:`https://www.youtube.com`}]})}async function Kr(e,t){let n=Gr(e,t);if(t.options.targetType===`Canvas`){let r=t.generateId(`canvas`),i=t.generateId(`annotation-page`,{id:r,type:`Canvas`}),a=t.embed({id:t.generateId(`annotation`,{id:i,type:`AnnotationPage`}),type:`Annotation`,motivation:`painting`,body:[n],target:{type:`SpecificResource`,source:{id:r,type:`Canvas`}}}),o=t.embed({id:i,type:`AnnotationPage`,items:[a]});return t.embed({id:r,type:`Canvas`,label:e.label||{en:[`Untitled YouTube canvas`]},height:e.height||1e3,width:e.width||1e3,duration:e.duration||1,items:[o]})}return t.options.targetType===`Annotation`?t.embed({id:t.generateId(`annotation`),type:`Annotation`,motivation:`painting`,body:[n],target:t.getTarget()}):n}function qr(e){let t=a(`creators`),n=a(`common`),r=e.options.initialData;return k(x,{children:A(`form`,{onSubmit:t=>{t.preventDefault();let n=new FormData(t.target),r=Object.fromEntries(n.entries());r.youtubeUrl&&e.runCreate({youtubeUrl:r.youtubeUrl})},children:[A(C,{$wide:!0,children:[k(w,{htmlFor:`youtubeUrl`,children:t(`form.youtubeUrl`)}),k(S,{type:`url`,id:`youtubeUrl`,name:`youtubeUrl`,defaultValue:r.youtubeUrl||``})]}),k(l,{primary:!0,large:!0,type:`submit`,children:n(`actions.create`)})]})})}const Jr=r({id:`@manifest-editor/youtube`,create:Kr,label:`YouTube`,labelMessage:{namespace:`creators`,key:`definitions.youtube.label`},summary:`Embed a video using its YouTube link.`,summaryMessage:{namespace:`creators`,key:`definitions.youtube.summary`},icon:k(ie,{}),resourceType:`ContentResource`,additionalTypes:[`Canvas`,`Annotation`],resourceFields:[`id`,`type`,`service`],supportsResource(e){return $(e)?{initialData:{youtubeUrl:e}}:!1},render:e=>k(qr,{...e}),supports:{initialData:!0,onlyPainting:!0,parentTypes:[`Annotation`,`Manifest`,`AnnotationPage`],parentFieldMap:{Annotation:[`body`],Manifest:[`items`],AnnotationPage:[`items`]}},staticFields:{type:`Video`}});async function Yr(e,t){let n=e.output||[],r=[];for(let e of n){let{resource:n,parent:i,selector:a}=e,o=t.getPreviewVault(),c=s(o);if(n.type===`Manifest`){let e=n.id;Z(e,`Could not find Manifest ID`);let i=await o.loadManifest(e),a=await c.getBestThumbnailAtSize(i,{width:256,height:256},!1);Z(i,`Manifest not found`),r.push(t.embed({id:n.id,type:`Manifest`,label:i.label,summary:i.summary,thumbnail:a?.best?[{id:a.best.id,type:`Image`}]:void 0}));continue}if(n.type===`Collection`){let e=n.id;Z(e,`Could not find Manifest ID`);let i=await o.loadManifest(e);Z(i,`Collection not found`),r.push(t.embed({id:n.id,type:`Collection`,label:i.label}))}}return r}const Xr=le(()=>Promise.resolve().then(()=>Zr));var Zr=We({default:()=>Qr});function Qr(e){let t=a(`creators`),{resolveMessage:n}=i(),r=Ie(),o=Le(),s=E(()=>e.options.initialData||{},[e.options.initialData]),{runCreate:c}=e,l=D({t,resolveMessage:n,reference:s.actionLabelMessage,runCreate:c});l.current={t,resolveMessage:n,reference:s.actionLabelMessage,runCreate:c};let u=E(()=>[{type:`callback`,get label(){let{t:e,resolveMessage:t,reference:n}=l.current;return t(n,e(`browser.select`))},supportedTypes:[`Manifest`,`Collection`,`ManifestList`,`CollectionList`,`CollectionItemList`],cb:e=>l.current.runCreate({output:e}),format:{type:`custom`,format:(e,t,n)=>{let r=Array.isArray(e)?e:[{...e,parent:t}],i=[];for(let e of r)i.push({resource:n.get(e),parent:e.parent,selector:e.selector});return i}}}],[l]),d=E(()=>({canCropImage:!1,canSelectCanvas:!1,canSelectManifest:!0,canSelectCollection:!0,multiSelect:!0,...s.iiifBrowserOptions?.navigation||{}}),[s.iiifBrowserOptions?.navigation]),f=E(()=>({buttonClassName:`bg-me-primary-500 text-white hover:bg-me-primary-600`,homeLink:s.url||(typeof e.config?.defaultCollection==`string`?e.config.defaultCollection:void 0),...s.iiifBrowserOptions?.ui||{}}),[s,e.config]),p=E(()=>{let e=s.iiifBrowserOptions?.history||{};return s.url?{...e,restoreFromLocalStorage:!1,saveToLocalStorage:!1,initialHistory:[{url:s.url,resource:null,route:s.url.startsWith(`iiif://`)?s.url.replace(`iiif://`,`/`):`/loading?id=${encodeURIComponent(s.url)}`}]}:e},[s]);return k(je,{children:k(b,{plugins:[...r,...s.iiifBrowserOptions?.plugins||[]],ui:f,vault:o,className:`iiif-browser border-none border-t rounded-none h-[70vh] min-h-[60vh] max-h-full max-w-full`,output:u,navigation:d,customPages:s.iiifBrowserOptions?.customPages||{},history:p})})}const $r=r({validationErrorMessage:mr,id:`@manifest-editor/manifest-browser-creator`,configKey:`@manifest-editor/iiif-browser-creator`,create:Yr,label:`Browse IIIF content`,labelMessage:{namespace:`creators`,key:`definitions.browser.label`},hideSummary:!0,summary:`Browse IIIF manifests and collections to choose a resource to add.`,summaryMessage:{namespace:`creators`,key:`definitions.manifestBrowser.summary`},icon:k(_,{}),render(e){return k(Qr,{...e})},async supportsResource(e,t){let n=Ye(await Je(e,t));return n===`Manifest`||n===`Collection`||await Ze(e)?{initialData:{url:e}}:!1},resourceType:`Manifest`,resourceFields:[`id`,`label`],additionalTypes:[`Collection`],supports:{initialData:!0,parentTypes:[`Collection`,`Manifest`,`Canvas`],parentFieldMap:{Collection:[`items`],Manifest:[`partOf`],Canvas:[`partOf`]}},sideEffects:[],staticFields:{}});async function ei(e,t,n){let r=t.generateId(`range`,n?{id:n,type:`Range`}:void 0);return t.embed({id:r,type:`Range`,label:e.label||{en:[`Untitled range`]},items:e.items||[]})}function ti(e){let t=a(`editor-api`),n=a(`creators`),[r,i]=O(e.options.initialData?.label||{en:[``]});return k(x,{children:A(`form`,{onSubmit:t=>{t.preventDefault(),r&&e.runCreate({type:`Range`,label:r,items:e.options.initialData?.items||[]})},children:[k(T,{focusId:`label`,label:t(`fields.label`),fields:r,onSave:e=>i(e.toInternationalString())}),k(l,{primary:!0,type:`submit`,children:n(`form.createRange`)})]})})}const ni=r({id:`@manifest-editor/range-with-items`,create:ei,label:`Range`,labelMessage:{namespace:`editor-api`,key:`resources.range`},summary:`Group canvases or other ranges into a section.`,summaryMessage:{namespace:`creators`,key:`definitions.range.summary`},icon:k(ee,{}),render(e){return k(ti,{...e})},resourceType:`Range`,resourceFields:[`id`,`label`,`type`],supports:{parentTypes:[`Range`],parentFields:[`items`]},staticFields:{type:`Range`}});async function ri(e,t,n){let r=t.generateId(`range`,n?{id:n,type:`Range`}:void 0);return t.embed({id:r,type:`Range`,label:e.label||{en:[`Table of Contents`]},items:(e.items||[]).map(e=>t.ref(e))})}function ii(e){let t=a(`editor-api`),n=a(`creators`),[r,i]=O(e.options.initialData?.label||{en:[``]});return k(x,{children:A(`form`,{onSubmit:t=>{t.preventDefault(),r&&e.runCreate({type:`Range`,label:r})},children:[k(T,{focusId:`label`,label:t(`fields.label`),fields:r,onSave:e=>i(e.toInternationalString())}),k(l,{primary:!0,type:`submit`,children:n(`form.createRange`)})]})})}const ai=r({id:`@manifest-editor/range-top-level`,create:ri,label:`Table of contents`,labelMessage:{namespace:`creators`,key:`definitions.contents.label`},summary:`Create a top-level range to organise the manifest’s contents.`,summaryMessage:{namespace:`creators`,key:`definitions.contents.summary`},icon:k(ee,{}),render(e){return k(ii,{...e})},resourceType:`Range`,resourceFields:[`id`,`label`,`type`],supports:{parentTypes:[`Manifest`],parentFields:[`structures`]},staticFields:{type:`Range`}}),oi=[X,Qn,B,tr,dr,bt,Er,Nt,Jr,kr,yr,Nr,Hr,pr,vr,or,xr,At,Ar,ar,Rr,ai,ni,qe];export{yt as CreateAudioAnnotationForm,kt as CreateCaptionedImageAnnotation,Mt as CreateHTMLAnnotation,Tr as CreateHTMLBodyForm,z as CreateImageServerForm,Zn as CreateImageServiceAnnotationForm,er as CreateImageUrlAnnotationForm,Et as CreateImageUrlForm,rr as CreateImageUrlListForm,Mr as CreatePlaintextForm,Ke as CreateProviderForm,Lr as CreateThumbnailForm,ur as CreateVideoAnnotationForm,_r as CreateVttAnnotationPageForm,Vr as CreateWebPageForm,Or as IIIFBrowserCreatorForm,Xr as ManifestBrowserCreatorForm,ti as RangeWithItemsCreatorForm,ii as TopLevelRangeCreatorForm,qr as YouTubeForm,oi as allCreators,bt as audioAnnotation,At as captionedImageAnnotation,vt as createAudioAnnotation,Dt as createCaptionedImageAnnotation,Dr as createFromIIIFBrowserOutput,Yr as createFromManifestBrowserOutput,jt as createHtmlAnnotation,wr as createHtmlBody,Ct as createImageServer,Xn as createImageServiceAnnotation,Tt as createImageUrl,$n as createImageUrlAnnotation,nr as createImageUrlList,ir as createImageUrlListAnnotation,sr as createNoBodyAnnotation,jr as createPlaintext,Ge as createProvider,ri as createRangeTopLevel,ei as createRangeWithItems,Ir as createThumbnail,lr as createVideoAnnotation,gr as createVttAnnotationPage,Br as createWebPage,Kr as createYoutubeBody,Gr as createYoutubeBodyResource,Q as croppedRegion,pr as emptyAnnotationPage,yr as emptyCanvas,R as getCanonicalUrl,$ as getYouTubeId,Nt as htmlAnnotation,Er as htmlBodyCreator,kr as iiifBrowserCreator,Qn as imageServiceAnnotation,X as imageServiceCreator,tr as imageUrlAnnotation,B as imageUrlCreator,ar as imageUrlListAnnotation,Ar as imageUrlListCreator,xr as internalCanvas,$r as manifestBrowserCreator,or as noBodyAnnotation,Nr as plaintextCreator,qe as providerCreator,ai as rangeTopLevel,ni as rangeWithItems,Wr as validateYouTube,dr as videoAnnotation,vr as vttAnnotationPage,Hr as webPageCreator,Jr as youTubeBodyCreator};
|
|
99
99
|
//# sourceMappingURL=index.js.map
|