PageSourceSearch

https://baselgovernance.org/_nuxt/ftiprFTG.js

js baselgovernance.org collected 2026-10-02 02:24:07 UTC 14,891 bytes, 6 lines download raw bytes

1import{_ as ce}from"./mB4aOhNQ.js";import{y as W,j as me,w as pe,o as i,c as r,b as l,a as N,l as ye,d as o,t as h,p as fe,F as V,r as J,g as f,n as q,h as Q,aN as he,e as R,i as H,f as Z,_ as _e,v as be,k as T,q as ke,m as ge,s as U,x as w,z as xe,A as ve,u as $e,I as qe,C as Te}from"./Wb91U3dY.js";import{_ as Le}from"./Ba8LlYQP.js";import{u as Ce,_ as Me}from"./DN-7kf52.js";import{u as ee}from"./B2qGby-e.js";import{_ as Ve}from"./0pXWRKzj.js";import{u as Ue}from"./DjVHZ40E.js";import{a as Ne}from"./C46Uvp31.js";import"./DrqDAL7u.js";import"./Dop-DfbR.js";import"./DWbQ2rpz.js";import"./BqZcP81Y.js";import"./BlJ7QmEB.js";import"./BdyL01m5.js";import"./DqUT9jOQ.js";const ze={key:0,role:"status","aria-live":"polite",class:"mx-auto max-w-2xl rounded-3xl border border-green-200 bg-green-50 px-8 py-12 text-center"},Be=["innerHTML"],Fe={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},Ee={key:0,class:"pt-4 sm:col-span-2"},Ae={class:"border-t border-gray-200 pt-8 text-2xl font-thin"},He=["innerHTML"],Ie=["id","onUpdate:modelValue","aria-required","aria-invalid"],je={key:0,class:"size-3 rounded-sm bg-primary-500"},Pe={class:"block text-sm font-medium text-gray-800"},Se={key:0,class:"text-red-500","aria-hidden":"true"},Re={key:1,class:"sr-only"},De=["innerHTML"],Oe=["for"],Ye={key:0,class:"text-red-500","aria-hidden":"true"},Ke={key:1,class:"sr-only"},Ge=["id","innerHTML"],Xe={key:1,class:"space-y-3"},Je=["type","name","value","checked","aria-describedby","onChange"],Qe={class:"text-sm font-medium text-gray-800"},We={key:0,class:"flex items-center gap-3 rounded-full border border-slate-300 px-5 py-2"},Ze={class:"flex-1 truncate text-sm"},we=["id","aria-required","aria-describedby","onChange"],et={key:2,class:"mt-1 text-xs text-red-600"},tt={"aria-hidden":"true",style:{position:"absolute",left:"-9999px",overflow:"hidden"}},at={key:0,role:"alert","aria-live":"assertive",class:"text-sm text-red-600"},st=".jpg,.jpeg,.png,.pdf,.doc,.docx",D=10,lt={__name:"FormBuilder",props:{form:{type:Object,required:!0}},setup(L){const c=L,z=W(),{md:g,mdInline:C}=ee(),{submitItem:I,uploadFile:j}=Ce(),P=w(),B=`Allowed types: jpg, png, pdf, doc, docx. ${D} MB limit.`,M=T(null),F=T(null),d=T(!1),_=T(!1),x=T(null),y=T({}),S=U(()=>[...c.form.fields||[]].sort((e,t)=>(e.sort??0)-(t.sort??0))),v=U(()=>S.value.filter(e=>e.type!=="heading")),$=(e,t)=>c.form[`label_${e}`]||t,b=(e,t=!1)=>e==null?t:e!==!1&&e!==0&&e!=="0",O=U(()=>[{key:"first_name",label:$("first_name","First name"),required:b(c.form.require_first_name,!0),autocomplete:"given-name",placeholder:"Enter your first name",width:"half"},{key:"last_name",label:$("last_name","Last name"),required:b(c.form.require_last_name,!0),autocomplete:"family-name",placeholder:"Enter your last name",width:"half"},{key:"email",label:$("email","Your email address"),required:!0,type:"email",autocomplete:"email",placeholder:"Enter your email address",width:b(c.form.confirm_email)?"half":"full"},...b(c.form.confirm_email)?[{key:"email_confirm",label:"Please repeat your email address",required:!0,type:"email",autocomplete:"email",placeholder:"Repeat your email address",width:"half"}]:[],{key:"organisation",label:$("organisation","Your organisation"),required:b(c.form.require_organisation,!0),autocomplete:"organization",placeholder:"Enter your organisation",width:"full"}]),te=U(()=>[...O.value.map(e=>({key:e.key,label:e.label,required:e.required,type:e.type||"text",width:e.width,autocomplete:e.autocomplete,placeholder:e.placeholder,help:null,options:[],maxLength:null})),...S.value.map(e=>({key:e.key,label:e.label,required:!!e.required,type:e.type,width:e.width==="half"?"half":"full",autocomplete:void 0,placeholder:e.placeholder||void 0,help:e.help||null,options:le(e),maxLength:e.max_length||null}))]),ae=e=>({email:"email",number:"number",date:"date",url:"url"})[e]||"text",E=(e,t)=>e.type==="radio"?s[e.key]===t:(s[e.key]||[]).includes(t),se=(e,t,m)=>{if(e.type==="radio"){s[e.key]=t;return}const k=Array.isArray(s[e.key])?[...s[e.key]]:[],u=k.indexOf(t);m&&u===-1&&k.push(t),!m&&u>-1&&k.splice(u,1),s[e.key]=k},s=me((()=>{const e={first_name:"",last_name:"",email:"",email_confirm:"",organisation:"",company:""};for(const t of v.value)t.type==="checkbox_group"?e[t.key]=[]:t.type==="consent"?e[t.key]=!1:t.type==="file"?e[t.key]=null:e[t.key]="";return e})()),le=e=>(Array.isArray(e.options)?e.options:[]).map(t=>({label:t.label??t.value??"",value:t.value??t.label??""})),Y=e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e),K=e=>{const t=s[e.key];return e.type==="checkbox_group"?!t?.length:e.type==="consent"?t!==!0:e.type==="file"?!t:t===""||t==null},G=()=>{const e={};for(const t of O.value)t.required&&!s[t.key]&&(e[t.key]="Required");s.email&&!Y(s.email)&&(e.email="Please enter a valid email address"),b(c.form.confirm_email)&&s.email&&s.email_confirm&&s.email.trim().toLowerCase()!==s.email_confirm.trim().toLowerCase()&&(e.email_confirm="The two email addresses do not match");
1for(const t of v.value){if(t.required&&K(t)){e[t.key]=t.type==="consent"?"Please tick this box to continue":t.type==="file"?"Please choose a file":"Required";continue}K(t)||(t.type==="email"&&!Y(s[t.key])&&(e[t.key]="Please enter a valid email address"),t.type==="url"&&!/^https?:\/\/\S+$/i.test(s[t.key])&&(e[t.key]="Please enter a full web address, starting with https://"),t.type==="number"&&Number.isNaN(Number(s[t.key]))&&(e[t.key]="Please enter a number"),t.max_length&&String(s[t.key]).length>t.max_length&&(e[t.key]=`Please keep this under ${t.max_length} characters`),t.type==="file"&&s[t.key]?.size>D*1024*1024&&(e[t.key]=`That file is too large. The limit is ${D} MB.`))}return y.value=e,Object.keys(e).length===0};pe(s,()=>{if(!Object.keys(y.value).length)return;const e=Object.keys(y.value);G();const t={};for(const m of e)y.value[m]&&(t[m]=y.value[m]);y.value=t});const ie=(e,t)=>{s[e.key]=t.target.files?.[0]||null},re=e=>{if(!e)return"";const t=e.size/1024,m=t>1024?`${(t/1024).toFixed(1)} MB`:`${Math.round(t)} KB`;return`${e.name} (${m})`},ne=e=>{const t=s[e.key];return e.type==="checkbox_group"?(t||[]).join(", "):e.type==="consent"?t?"Yes":"No":e.type==="file"?t?.name||"":t==null?"":String(t)},oe=async e=>{if(s.email)try{await $fetch("/api/newsletter",{method:"POST",body:{form:c.form.id,email:s.email,firstName:s.first_name,lastName:s.last_name,org:s.organisation,answers:e,lists:[0]}})}catch(t){console.error("Newsletter signup failed for a form submission",t)}},X=()=>M.value?.scrollIntoView({behavior:"smooth",block:"start"}),de=async()=>{if(!G()){X();return}if(!s.company){d.value=!0,x.value=null;try{const e=[];for(const u of v.value){if(u.type!=="file"||!s[u.key])continue;const p=await j(s[u.key],P.public.DIRECTUS_FORMS_UPLOAD_FOLDER);p&&e.push(p)}const t={},m=[];for(const[u,p]of v.value.entries()){const A=s[p.key];t[p.key]=p.type==="file"?A?.name||null:A,m.push({field:p.id,key:p.key,label:p.label,value:ne(p),sort:p.sort??u})}const k=m.filter(u=>u.value!=="").map(u=>`${u.label}: ${u.value}`).join(`
2`);await I("submissions_forms",{form:c.form.id,first_name:s.first_name,last_name:s.last_name,email:s.email,organisation:s.organisation,data:t,answers:m,answers_text:k,...e.length&&{files:e.map(u=>({directus_files_id:u}))},source_page:z.path}),await oe(t),_.value=!0,await ke(),X(),F.value?.focus()}catch{x.value="Something went wrong and your submission was not sent. Please try again, or email [email protected]."}finally{d.value=!1}}};return(e,t)=>{const m=ye,k=Le,u=Me,p=_e,A=ge;return i(),r("div",{ref_key:"top",ref:M},[l(_)?(i(),r("div",ze,[N(m,{name:"lucide:check-circle-2",class:"mx-auto mb-4 size-14 text-green-600"}),o("h2",{ref_key:"successHeading",ref:F,tabindex:"-1",class:"mb-3 text-3xl font-thin text-green-900 outline-none md:text-4xl"},h(L.form.success_title||"Thank you"),513),o("div",{class:"prose mx-auto text-green-800",innerHTML:l(g)(L.form.success_message||"Your submission has been received.")},null,8,Be)])):(i(),r("form",{key:1,class:"space-y-5",onSubmit:fe(de,["prevent"])},[t[2]||(t[2]=o("p",{class:"text-xs text-gray-500"},"Fields with * are required.",-1)),o("div",Fe,[(i(!0),r(V,null,J(l(te),a=>(i(),r(V,{key:a.key},[a.type==="heading"?(i(),r("div",Ee,[o("h2",Ae,h(a.label),1),a.help?(i(),r("div",{key:0,class:"mt-3 text-sm leading-relaxed text-gray-600 [&_a]:text-primary-600 [&_a]:underline",innerHTML:l(g)(a.help)},null,8,He)):f("",!0)])):(i(),r("div",{key:1,class:q(a.width==="half"?"":"sm:col-span-2")},[a.type==="consent"?(i(),r("label",{key:0,class:q([`flex cursor-pointer items-start gap-3 rounded-2xl border-2 p-5
3                transition-colors`,l(y)[a.key]?"border-red-400":l(s)[a.key]?"border-primary-500 bg-primary-50":"border-slate-200 hover:border-slate-400"])},[Q(o("input",{id:`f-${a.key}`,"onUpdate:modelValue":n=>l(s)[a.key]=n,type:"checkbox","aria-required":a.required?"true":"false","aria-invalid":l(y)[a.key]?"true":void 0,class:"sr-only"},null,8,Ie),[[he,l(s)[a.key]]]),o("span",{class:q([`mt-0.5 flex size-5 shrink-0 items-center justify-center
4                  rounded-md border-2`,l(s)[a.key]?"border-primary-500":"border-slate-300"]),"aria-hidden":"true"},[l(s)[a.key]?(i(),r("span",je)):f("",!0)],2),o("div",null,[o("span",Pe,[R(h(a.label)+" ",1),a.required?(i(),r("span",Se," * ")):f("",!0),a.required?(i(),r("span",Re,"(required)")):f("",!0)]),a.help?(i(),r("div",{key:0,class:"mt-1 block text-xs text-gray-500 [&_a]:underline",innerHTML:l(C)(a.help)},null,8,De)):f("",!0)])],2)):(i(),r(V,{key:1},[o("label",{for:`f-${a.key}`,class:"mb-1 block text-xs font-medium text-gray-700"},[R(h(a.label)+" ",1),a.required?(i(),r("span",Ye," * ")):f("",!0),a.required?(i(),r("span",Ke,"(required)")):f("",!0)],8,Oe),a.help?(i(),r("div",{key:0,id:`help-${a.key}`,class:"mb-2 text-xs leading-relaxed text-gray-500 [&_a]:underline",innerHTML:l(C)(a.help)},null,8,Ge)):f("",!0),a.type==="radio"||a.type==="checkbox_group"?(i(),r("div",Xe,[(i(!0),r(V,null,J(a.options,n=>(i(),r("label",{key:n.value,class:q([`flex cursor-pointer items-start gap-3 rounded-2xl border-2
5                    p-5 transition-colors`,E(a,n.value)?"border-primary-500 bg-primary-50":"border-slate-200 hover:border-slate-400"])},[o("input",{type:a.type==="radio"?"radio":"checkbox",name:`f-${a.key}`,value:n.value,checked:E(a,n.value),"aria-describedby":a.help?`help-${a.key}`:void 0,class:"sr-only",onChange:ue=>se(a,n.value,ue.target.checked)}
5,null,40,Je),o("span",{class:q([`mt-0.5 flex size-5 shrink-0 items-center justify-center
6                      border-2`,a.type==="radio"?"rounded-full":"rounded-md",E(a,n.value)?"border-primary-500":"border-slate-300"]),"aria-hidden":"true"},[E(a,n.value)?(i(),r("span",{key:0,class:q(["bg-primary-500",a.type==="radio"?"size-2.5 rounded-full":"size-3 rounded-sm"])},null,2)):f("",!0)],2),o("span",Qe,h(n.label),1)],2))),128))])):a.type==="select"?(i(),H(k,{key:2,id:`f-${a.key}`,modelValue:l(s)[a.key],"onUpdate:modelValue":n=>l(s)[a.key]=n,items:a.options,placeholder:a.placeholder||"Choose one","aria-required":a.required?"true":"false","aria-describedby":a.help?`help-${a.key}`:void 0,size:"lg",class:"w-full"},null,8,["id","modelValue","onUpdate:modelValue","items","placeholder","aria-required","aria-describedby"])):a.type==="textarea"?(i(),H(u,{key:3,id:`f-${a.key}`,modelValue:l(s)[a.key],"onUpdate:modelValue":n=>l(s)[a.key]=n,placeholder:a.placeholder,maxlength:a.maxLength||void 0,"aria-required":a.required?"true":"false","aria-invalid":l(y)[a.key]?"true":void 0,"aria-describedby":a.help?`help-${a.key}`:void 0,size:"lg",class:"w-full",rows:5},null,8,["id","modelValue","onUpdate:modelValue","placeholder","maxlength","aria-required","aria-invalid","aria-describedby"])):a.type==="file"?(i(),r(V,{key:4},[l(s)[a.key]?(i(),r("div",We,[o("span",Ze,h(re(l(s)[a.key])),1),N(p,{color:"neutral",variant:"ghost",icon:"lucide:x",size:"sm",onClick:n=>l(s)[a.key]=null},{default:Z(()=>[...t[1]||(t[1]=[R(" Remove ",-1)])]),_:1},8,["onClick"])])):(i(),r("input",{key:1,id:`f-${a.key}`,type:"file",accept:st,"aria-required":a.required?"true":"false","aria-describedby":a.help?`help-${a.key}`:void 0,class:"block w-full rounded-full border border-slate-300 px-5 py-3 text-sm file:mr-4 file:rounded-full file:border-0 file:bg-primary-500 file:px-4 file:py-2 file:text-sm file:font-medium file:text-white hover:file:bg-primary-600",onChange:n=>ie(a,n)},null,40,we)),o("p",{class:"mt-2 text-xs text-gray-500"},h(B))],64)):(i(),H(A,{key:5,id:`f-${a.key}`,modelValue:l(s)[a.key],"onUpdate:modelValue":n=>l(s)[a.key]=n,type:ae(a.type),placeholder:a.placeholder,maxlength:a.maxLength||void 0,autocomplete:a.autocomplete,"aria-required":a.required?"true":"false","aria-invalid":l(y)[a.key]?"true":void 0,"aria-describedby":a.help?`help-${a.key}`:void 0,size:"lg",class:"w-full"},null,8,["id","modelValue","onUpdate:modelValue","type","placeholder","maxlength","autocomplete","aria-required","aria-invalid","aria-describedby"]))],64)),l(y)[a.key]?(i(),r("p",et,h(l(y)[a.key]),1)):f("",!0)],2))],64))),128))]),o("div",tt,[Q(o("input",{"onUpdate:modelValue":t[0]||(t[0]=a=>l(s).company=a),type:"text",name:"company",tabindex:"-1",autocomplete:"off"},null,512),[[be,l(s).company]])]),l(x)?(i(),r("p",at,h(l(x)),1)):f("",!0),N(p,{type:"submit",label:L.form.submit_label||"Submit",color:"primary",size:"lg",block:"",loading:l(d)},null,8,["label","loading"])],32))],512)}}},it={class:"mb-10"},rt=["src","alt"],nt={class:"text-3xl leading-tight font-thin md:text-5xl"},ot=["innerHTML"],Tt={__name:"[slug]",async setup(L){let c,z;const g=W(),C=Array.isArray(g.params.slug)?g.params.slug.join("/"):g.params.slug,{getItems:I,publishedFilter:j}=Ue(),{md:P}=ee(),B=w(),{data:M,error:F}=([c,z]=xe(()=>Te(`form-${C}`,()=>I({collection:"forms",params:{fields:["*","fields.*"],filter:{slug:{_eq:C},...j},limit:1}}))),c=await c,z(),c);if(Ne(F),!M.value?.length)throw ve({statusCode:404,statusMessage:"Page not found"});const d=M.value[0],_=U(()=>d.title||d.name),x=[{label:"Home",to:"/"},{label:_.value}];return $e({title:_.value}),qe({title:`${_.value} — Basel Institute on Governance`,description:d.description||void 0,ogTitle:_.value,ogDescription:d.description||void 0,ogSiteName:"baselgovernance.org",...d.noindex&&{robots:"noindex"},...d.image&&{twitterCard:"summary_large_image",ogImage:`${B.public.BACKEND_URL}/assets/${d.image?.id||d.image}?width=1200&height=630&fit=cover&format=jpg`}}),(y,S)=>{const v=ce,$=lt,b=Ve;return i(),H(b,{class:"max-w-2xl py-8"},{default:Z(()=>[N(v,{items:x,class:"mb-8 hidden sm:block"}),o("header",it,[l(d).image?(i(),r("img",{key:0,src:`${l(B).public.BACKEND_URL}
6/assets/${l(d).image?.id||l(d).image}?width=1600&format=webp&quality=90`,alt:l(_),class:"mb-10 h-auto w-full rounded-3xl"},null,8,rt)):f("",!0),o("h1",nt,h(l(_)),1),l(d).intro?(i(),r("div",{key:1,class:"mt-4 text-slate-600 [&_a]:underline",innerHTML:l(P)(l(d).intro)},null,8,ot)):f("",!0)]),N($,{form:l(d)},null,8,["form"])]),_:1})}}};export{Tt as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.