PageSourceSearch

https://tavernkeeper.com/assets/TemplateDetail-0uOgH6na.js

js tavernkeeper.com collected 2026-10-08 12:09:31 UTC 30,525 bytes, 1 lines download raw bytes

1import{r as e,c as a,o as l,b as t,E as s,j as i,k as n,l as o,m as u,x as c,G as r,F as d,q as v,s as p,u as m,C as h,A as k,w as b,H as y,B as g,y as f,z as C,T as w,e as T}from"./vue-vendor-DJz7ukYg.js";import{_ as S,d as L,a as R,b as F,t as D,c as P,e as A}from"./main-BJf9LMmq.js";import{u as x}from"./useNavigation-C8V5WT3r.js";import{u as _}from"./useClipboard-CQmcG5dG.js";import{u as M}from"./useTemplatePublishing-CfAlak0C.js";import{u as U}from"./useTemplateArchiving-0YiBl-jk.js";import{M as j,_ as I}from"./TypeRibbon-yhdvuPK2.js";import{_ as E,i as O,a as B,b as $,g as V,s as z,c as W,d as Y}from"./TemplateCard-9k9IZigx.js";import{_ as G}from"./CollectionCard-CSvmz28n.js";import{u as N,_ as q}from"./useMoreMenu-C6uqmLm6.js";import{A as H}from"./AuditLog-k-JrZSZD.js";import{g as X}from"./roomNames-CKQ6Vh1u.js";import{c as J}from"./cardSize-C8J7IezI.js";import"./visibility-BLlkNKYE.js";import"./MiniCarousel-DN2e2VM8.js";const K={key:0,class:"enrichment-carousel"},Q={class:"carousel-header"},Z={key:0,class:"section-icon","aria-hidden":"true"},ee={class:"section-title"},ae={key:0},le={class:"carousel-container"},te=["disabled"],se=["disabled"],ie={key:0,class:"cta-wrapper"},ne={class:"cta-text"},oe=S({__name:"EnrichmentCarousel",props:{title:{type:String,required:!0},titleSuffix:{type:String,default:""},icon:{type:String,default:""},items:{type:Array,default:()=>[]},ctaLink:{type:String,default:""},ctaText:{type:String,default:""}},setup(b){const y=b,g=e(null),f=e(!1),C=e(!1),w=e(!1),T=a(()=>y.items&&y.items.length>0),{handleLike:S,handleSubscribe:R}=L(),{openMoreMenu:F,copiedCode:D,copiedLink:P,isLoggedIn:A,toggleMoreMenu:_,copyDesignLinkFromMenu:M,copyShareCodeFromMenu:U,handleReportFromMenu:j,getDropdownStyle:I,setupClickOutsideListener:O,cleanupClickOutsideListener:B}=N(),{navigateToDesign:$,navigateToCollection:V}=x(),z=()=>{if(!g.value)return;const{scrollLeft:e,scrollWidth:a,clientWidth:l}=g.value;f.value=e>0,C.value=e+l<a-1,w.value=a>l},W=()=>{g.value&&g.value.scrollBy({left:-300,behavior:"smooth"})},Y=()=>{g.value&&g.value.scrollBy({left:300,behavior:"smooth"})};let H=null;return l(()=>{z(),g.value&&"undefined"!=typeof ResizeObserver&&(H=new ResizeObserver(z),H.observe(g.value)),O()}),t(()=>{H&&H.disconnect(),B()}),(e,a)=>{const l=s("router-link");return T.value?(i(),n("section",K,[o("div",Q,[b.icon?(i(),n("span",Z,u(b.icon),1)):c("",!0),o("h2",ee,[r(u(b.title),1),b.titleSuffix?(i(),n("span",ae," "+u(b.titleSuffix),1)):c("",!0)])]),o("div",le,[w.value?(i(),n("button",{key:0,class:"scroll-arrow left",disabled:!f.value,onClick:W,"aria-label":"Scroll left"}," ‹ ",8,te)):c("",!0),o("div",{ref_key:"scrollTrack",ref:g,class:"carousel-track",onScroll:z},[(i(!0),n(d,null,v(b.items,e=>(i(),n("div",{key:e.shareCode,class:"carousel-card"},[e.isCollection?(i(),p(G,{key:0,collection:e,onClick:a=>m(V)(e.shareCode,a),onLike:m(S),onSubscribe:m(R),onMore:m(_)},null,8,["collection","onClick","onLike","onSubscribe","onMore"])):(i(),p(E,{key:1,template:e,onClick:a=>m($)(e.shareCode,a),onLike:m(S),onSubscribe:m(R),onMore:m(_)},null,8,["template","onClick","onLike","onSubscribe","onMore"]))]))),128))],544),w.value?(i(),n("button",{key:1,class:"scroll-arrow right",disabled:!C.value,onClick:Y,"aria-label":"Scroll right"}," › ",8,se)):c("",!0)]),b.ctaLink?(i(),n("div",ie,[h(l,{to:b.ctaLink,class:"cta-button"},{default:k(()=>[o("span",ne,u(b.ctaText),1),a[0]||(a[0]=o("span",{class:"cta-arrow"},"→",-1))]),_:1},8,["to"])])):c("",!0),h(q,{"share-code":m(F),"dropdown-style":m(I)(),"copied-link":m(P),"copied-code":m(D),"is-logged-in":m(A),onCopyLink:m(M),onCopyCode:m(U),onReport:m(j)},null,8,["share-code","dropdown-style","copied-link","copied-code","is-logged-in","onCopyLink","onCopyCode","onReport"])])):c("",!0)}}},[["__scopeId","data-v-1f2d16b0"]]),ue={class:"gift-eligibility"},ce={class:"description"},re={key:0,class:"loading"},de={key:1,class:"error"},ve={key:2,class:"empty"},pe={key:3,class:"tag-list"},me={class:"tag-checkbox"},he=["checked","disabled","onChange"],ke={class:"tag-label"},be={class:"label-text"},ye={class:"slug-badge"},ge={key:0,class:"tag-desc"},fe={key:4,class:"footer"},Ce=S({__name:"GiftEligibilityPanel",props:{shareCode:{type:String,required:!0}},setup(t){const p=t,y=e([]),g=e([]),f=e(!1),C=e(null),w=e(new Set),T=a(()=>new Set(g.value.map(e=>e.slug)));async function S(){if(p.shareCode){f.value=!0,C.value=null;try{const[e,a]=await Promise.all([R.adminListTags({limit:200}),R.adminGetTemplateTags(p.shareCode)]);y.value=(e.tags||[]).slice().sort((e,a)=>{const l=(e.label||e.slug).toLowerCase(),t=(a.label||a.slug).toLowerCase();return l.localeCompare(t)}),g.value=a.tags||[]}catch(e){C.value=e.message||F("Failed to load tags")}finally{f.value=!1}}}function L(e,a){const l=T.value.has(e.slug);a&&!l?g.value=[...g.value,{slug:e.slug,label:e.label,appliedAt:(new Date).toISOString()}]:!a&&l&&(g.value=g.value.filter(a=>a.slug!==e.slug))}return l(()=>{S()}),b(()=>p.shareCode,()=>S()),(e,a)=>{const l=s("router-link");return i(),n("section",ue,[o("header",null,[o("h2",null,u(m(F)("Gift eligibility")),1),o("p",ce,u(m(F)("Tags that control this item's eligibility and gating in the patron-gift pool.")),1)]),f.value?(i(),n("div",re,u(m(F)("Loading tags...")),1)):C.value?(i(),n("div",de,u(C.value),1)):0===y.value.length?(i(),n("div",ve,[o("p",null,u(m(F)("No tags have been created yet.")),1),h(l,{to:"/workshop/admin/tags",class:"btn btn-small"},{default:k(()=>[r(u(m(F)("Go to Tag Management")),1)]),_:1})])):(i(),n("ul",pe,[(i(!0),n(d,null,v(y.value,e=>(i(),n("li",{key:e.slug,class:"tag-item"},[o("label",me,[o("input",{type:"checkbox",checked:T.value.has(e.slug),disabled:w.value.has(e.slug),onChange:a=>async function(e){const a=T.value.has(e.slug),l=new Set(w.value);l.add(e.slug),w.value=l,L(e,!a);try{a?(await R.adminRemoveTemplateTag(p.shareCode,e.slug),D.success(F("Removed tag: {0}",e.label||e.slug))):(await R.adminApplyTemplateTag(p.shareCode,e.slug),D.success(F("Applied tag: {0}",e.label||e.slug)))}catch(t){L(e,a),D.error(t.message||F("Failed to update tag"))}finally{const a=new Set(w.value);a.delete(e.slug),w.value=a}}(e)},null,40,he),o("span",ke,[o("span",be,u(e.label||e.slug),1),o("code",ye,u(e.slug),1)]),e.description?(i(),n("span",ge,u(e.description),1)):c("",!0)])]))),128))])),y.value.length>0?(i(),n("footer",fe,[h(l,{to:"/workshop/admin/tags",class:"manage-link"},{default:k(()=>[r(u(m(F)("Manage vocabulary →")),1)]),_:1})])):c("",!0)])}}},[["__scopeId","data-v-242e6510"]]),we={class:"design"},Te={key:0,class:"loading-container",role:"status","aria-live":"polite","aria-busy":"true"},Se={class:"loading-text"},Le={key:1,class:"error"},Re={key:2,class:"design-detail"},Fe={key:0,class:"rejection-notice"},De={class:"design-image-container"},Pe={class:"design-image"},Ae=["src","alt"],xe={key:1,class:"placeholder-image"},_e={class:"design-overlay"},Me={class:"overlay-content"},Ue={class:"overlay-header"},je={key:1,class:"actions-menu-wrapper"},Ie=["aria-label"],Ee={class:"overlay-title"},Oe={class:"overlay-meta"},Be={key:1,class:"author-unknown"},$e={key:0,class:"own-badge"},Ve=["title"],ze={class:"overlay-metadata"},We={key:0,class:"metadata-row"},Ye={class:"metadata-label"},Ge={class:"metadata-pills"},Ne={key:1,class:"metadata-row"},qe={class:"metadata-label"},He={class:"metadata-pills"},Xe={class:"overlay-footer"},Je={class:"overlay-share"},Ke={class:"share-label"},Qe={class:"share-code-text"},Ze={class:"overlay-stats"}
1,ea=["disabled","aria-label","title"],aa={"aria-hidden":"true"},la=["aria-label"],ta={class:"icon","aria-hidden":"true"},sa={"aria-hidden":"true"},ia=["aria-label"],na={class:"actions-status"},oa={class:"status-icon"},ua={class:"status-text"},ca=["disabled"],ra={class:"actions-item-icon"},da=["disabled"],va={class:"actions-item-icon"},pa=["disabled"],ma=["disabled"],ha={key:4,class:"actions-divider"},ka=["disabled"],ba=["disabled"],ya={key:7,class:"actions-hint"},ga=S({__name:"Design",props:{initialData:{type:Object,default:null}},setup(T){const S=T,A=y(),{copiedCode:E,copyShareCode:G}=_(),{goBack:N}=x(),{currentUser:q,handleLike:J,handleSubscribe:K,handleReport:Q}=L(),{handlePublish:Z,handleUnlist:ee}=M(),{handleArchive:ae,handleUnarchive:le}=U(),te=e(null),se=e(!1),ie=e(null),ne=e(!1),ue=e(!1),ce=e(!1),re=e(!1),de=e(!1),ve=e(!1),pe=e(!1),me=e({}),he=a(()=>A.params.shareCode),ke=a(()=>te.value?.author===q.value?.greenbackUserHash),be=a(()=>P.canModerateContent()),ye=a(()=>ke.value||be.value),ge=a(()=>O(te.value)),fe=a(()=>B(te.value)),ga=a(()=>$(te.value)),fa=a(()=>!!te.value&&(te.value.moderationStatus===j.APPROVED&&!fe.value&&!ga.value)),Ca=a(()=>!!te.value&&(te.value.moderationStatus===j.APPROVED&&!ga.value)),wa=a(()=>!!te.value&&(be.value&&te.value.moderationStatus===j.APPROVED&&!te.value.isFeatured)),Ta=a(()=>!!te.value&&(be.value&&te.value.isFeatured)),Sa=a(()=>!!te.value&&(be.value&&!ga.value&&te.value.moderationStatus===j.APPROVED)),La=a(()=>!!te.value&&(be.value&&ga.value)),Ra=a(()=>te.value?.enrichment?.memberOfCollections?.length>0),Fa=a(()=>(te.value?.enrichment?.memberOfCollections||[]).map(e=>({...e,isCollection:!0}
1))),Da=a(()=>te.value?.enrichment?.similar?.length>0),Pa=a(()=>te.value?.enrichment?.byAuthor?.length>0),Aa=async()=>{if(S.initialData)te.value=S.initialData;else{se.value=!0,ie.value=null;try{te.value=await R.getDesignWithInteractions(he.value)}catch(e){ie.value=F("Failed to load template. It may not exist or has been removed.")}finally{se.value=!1}}},xa=()=>{G(he.value)},_a=()=>{te.value&&J(te.value)},Ma=()=>{te.value&&K(te.value)},Ua=()=>{he.value&&Q(he.value)},ja=e=>{if(pe.value)pe.value=!1;else{const a=e.currentTarget.getBoundingClientRect();me.value={top:`${a.bottom+4}px`,left:`${a.right}px`,transform:"translateX(-100%)"},pe.value=!0}},Ia=async()=>{pe.value=!1,ge.value?(ne.value=!0,await Z(te.value),ne.value=!1):(ue.value=!0,await ee(te.value),ue.value=!1)},Ea=async()=>{pe.value=!1,fe.value?(re.value=!0,await le(te.value),re.value=!1):(ce.value=!0,await ae(te.value),ce.value=!1)},Oa=async()=>{pe.value=!1,de.value=!0;try{await R.featureTemplate(te.value.shareCode,!0),te.value.isFeatured=!0,D.success(F('Featured "{0}"',te.value.name))}catch(e){D.error(F("Failed to feature template. Please try again."))}finally{de.value=!1}},Ba=async()=>{pe.value=!1,de.value=!0;try{await R.featureTemplate(te.value.shareCode,!1),te.value.isFeatured=!1,D.success(F('Removed "{0}" from featured',te.value.name))}catch(e){D.error(F("Failed to remove template from featured. Please try again."))}finally{de.value=!1}},$a=async()=>{if(confirm(F("Take down this template? This will hide it from public view and the author cannot reverse it."))){pe.value=!1,ve.value=!0;try{await R.adminTakedownTemplate(te.value.shareCode),te.value.takenDown=!0,te.value.isPublic=!1,D.success(F('Taken down "{0}"',te.value.name))}catch(e){D.error(F("Failed to take down template. Please try again."))}finally{ve.value=!1}}},Va=async()=>{if(confirm(F("Lift takedown? The template will remain unlisted until the author re-publishes it."))){pe.value=!1,ve.value=!0;try{await R.adminLiftTakedown(te.value.shareCode),te.value.takenDown=!1,D.success(F("Takedown lifted — template remains unlisted"))}catch(e){D.error(F("Failed to lift takedown. Please try again."))}finally{ve.value=!1}}},za=e=>{!pe.value||e.target.closest(".actions-menu-btn")||e.target.closest(".design-actions-dropdown")||(pe.value=!1)};return l(()=>{Aa(),document.addEventListener("click",za)}),t(()=>{document.removeEventListener("click",za)}),b(he,()=>{Aa()}),(e,a)=>{const l=s("router-link");return i(),n("div",we,[se.value?(i(),n("div",Te,[a[4]||(a[4]=o("div",{class:"loading-spinner","aria-hidden":"true"},null,-1)),o("p",Se,u(m(F)("Loading template...")),1)])):ie.value?(i(),n("div",Le,[o("p",null,u(ie.value),1),o("button",{onClick:a[0]||(a[0]=(...e)=>m(N)&&m(N)(...e)),class:"btn"},u(m(F)("Back")),1)])):te.value?(i(),n("div",Re,[o("button",{onClick:a[1]||(a[1]=(...e)=>m(N)&&m(N)(...e)),class:"back-btn"},[a[5]||(a[5]=o("span",{class:"back-icon"},"←",-1)),r(" "+u(m(F)("Back")),1)]),ye.value&&te.value.moderationStatus===m(j).REJECTED&&te.value.rejectionReason?(i(),n("div",Fe,[o("strong",null,u(m(F)("Rejection Reason:")),1),r(" "+u(m(V)(te.value.rejectionReason)),1)])):c("",!0),o("div",De,[h(I,{large:"",type:te.value.isDecoration?"decoration":"furniture",label:te.value.isDecoration?m(F)("Design Item"):m(F)("Furniture"),title:te.value.isDecoration?m(F)("Design Item: A standalone decorative element"):m(F)("Furniture: A finished furniture piece ready to place")},null,8,["type","label","title"]),o("div",Pe,[te.value.imageUrl?(i(),n("img",{key:0,src:te.value.imageUrl,alt:te.value.name,loading:"lazy",draggable:"false",onLoad:a[2]||(a[2]=e=>e.target.classList.add("loaded")),class:"lazy-image"},null,40,Ae)):(i(),n("div",xe,u(m(F)("No Image Available")),1)),a[9]||(a[9]=o("div",{class:"image-skeleton"},null,-1)),o("div",_e,[o("div",Me,[o("div",Ue,[ye.value&&m(z)(te.value,!0)?(i(),n("span",{key:0,class:g(["moderation-badge",m(W)(te.value.moderationStatus,te.value)])},u(m(Y)(te.value.moderationStatus,te.value)),3)):c("",!0),ye.value?(i(),n("div",je,[o("button",{class:"actions-menu-btn",onClick:ja,"aria-label":m(F)("More actions"),"aria-haspopup":"menu"},[...a[6]||(a[6]=[o("span",{class:"actions-icon","aria-hidden":"true"},"⋯",-1)])],8,Ie)])):c("",!0)]),o("h1",Ee,u(te.value.name||m(F)("Untitled Template")),1),o("p",Oe,[o("span",null,[r(u(m(F)("by {0}").split("{0}")[0]),1),te.value.authorUsername?(i(),p(l,{key:0,to:`/workshop?author=${encodeURIComponent(te.value.author)}`,class:"author-link"},{default:k(()=>[r(u(te.value.authorUsername),1)]),_:1},8,["to"])):(i(),n("span",Be,u(m(F)("Unnamed")),1)),r(u(m(F)("by {0}").split("{0}
1")[1]),1)]),ke.value?(i(),n("span",$e,u(m(F)("(You)")),1)):c("",!0)]),te.value.description?(i(),n("div",{key:0,class:"overlay-description",title:te.value.description},[o("p",null,u(te.value.description),1)],8,Ve)):c("",!0),o("div",ze,[te.value.categories&&te.value.categories.length>0?(i(),n("div",We,[o("span",Ye,u(m(F)("Categories:")),1),o("span",Ge,[(i(!0),n(d,null,v(te.value.categories,e=>(i(),p(l,{key:e,to:`/workshop?categories=${encodeURIComponent(e)}`,class:"metadata-pill metadata-pill--clickable"},{default:k(()=>[r(u(e),1)]),_:2},1032,["to"]))),128))])])):c("",!0),te.value.rooms&&te.value.rooms.length>0?(i(),n("div",Ne,[o("span",qe,u(m(F)("Rooms:")),1),o("span",He,[(i(!0),n(d,null,v(te.value.rooms,e=>(i(),n("span",{key:e,class:"metadata-pill room-pill"},u(m(X)(e)),1))),128))])])):c("",!0)]),o("div",Xe,[o("div",Je,[o("span",Ke,u(m(F)("Share Code:")),1),o("code",Qe,u(he.value),1),o("button",{onClick:xa,class:"copy-btn"},u(m(E)===he.value?m(F)("Copied!"):m(F)("Copy")),1)]),o("div",Ze,[o("button",{onClick:_a,class:g(["stat-btn",{active:te.value.isLiked}]),disabled:ke.value,"aria-label":ke.value?m(F)("You can't like your own template"):te.value.isLiked?m(F)("Unlike {0}, {1} likes",te.value.name,te.value.likes):m(F)("Like {0}, {1} likes",te.value.name,te.value.likes),title:ke.value?m(F)("You can't like your own template"):void 0},[a[7]||(a[7]=o("span",{class:"icon","aria-hidden":"true"},"💚",-1)),o("span",aa,u(te.value.likes),1)],10,ea),o("button",{onClick:Ma,class:g(["stat-btn",{active:te.value.isSubscribed}]),"aria-label":te.value.isSubscribed?m(F)("Remove {0}",te.value.name):m(F)("Add {0}",te.value.name)},[o("span",ta,u(te.value.isSubscribed?"➖":"➕"),1),o("span",sa,u(te.value.subscriptions),1)],10,la),o("button",{onClick:Ua,class:"stat-btn report-btn","aria-label":m(F)("Report content")},[...a[8]||(a[8]=[o("span",{class:"icon","aria-hidden":"true"},"⚠️",-1)])],8,ia)])])])])])]),Ra.value?(i(),p(oe,{key:1,title:m(F)("Featured In Collections"),icon:"📚",items:Fa.value},null,8,["title","items"])):c("",!0),Da.value?(i(),p(oe,{key:2,title:m(F)("Similar Templates"),icon:"🔗",items:te.value.enrichment?.similar||[]},null,8,["title","items"])):c("",!0),Pa.value?(i(),p(oe,{key:3,title:m(F)("More From"),"title-suffix":te.value.authorUsername,items:te.value.enrichment.byAuthor,"cta-link":`/workshop?author=${encodeURIComponent(te.value.author)}`,"cta-text":m(F)("View All by {0}",te.value.authorUsername)},null,8,["title","title-suffix","items","cta-link","cta-text"])):c("",!0),be.value&&te.value.isFeatured?(i(),p(Ce,{key:4,"share-code":he.value},null,8,["share-code"])):c("",!0),be.value?(i(),p(H,{key:5,"share-code":he.value},null,8,["share-code"])):c("",!0)])):c("",!0),(i(),p(w,{to:"body"},[pe.value?(i(),n("div",{key:0,class:"design-actions-dropdown",style:C(me.value),onClick:a[3]||(a[3]=f(()=>{},["stop"]))},[o("div",na,[o("span",oa,u(te.value?ga.value?"⛔":fe.value?"📁":0===te.value.moderationStatus?"⏳":2===te.value.moderationStatus?"❌":ge.value?"👁️‍🗨️":"👁️":"❓"),1),o("span",ua,u(te.value?ga.value?F("Taken Down"):fe.value?F("Archived"):0===te.value.moderationStatus?F("Pending Review"):2===te.value.moderationStatus?F("Rejected"):ge.value?F("Unlisted"):F("Listed Publicly"):F("Unknown")),1)]),a[14]||(a[14]=o("div",{class:"actions-divider"},null,-1)),fa.value?(i(),n("button",{key:0,class:g(["actions-item",ge.value?"list-action":"unlist-action"]),onClick:Ia,disabled:ne.value||ue.value},[o("span",ra,u(ge.value?"👁️":"👁️‍🗨️"),1),o("span",null,u(ge.value?m(F)("List Publicly"):m(F)("Unlist")),1)],10,ca)):c("",!0),Ca.value?(i(),n("button",{key:1,class:g(["actions-item",fe.value?"unarchive-action":"archive-action"]),onClick:Ea,disabled:ce.value||re.value},[o("span",va,u(fe.value?"📂":"📁"),1),o("span",null,u(fe.value?m(F)("Restore from Archive"):m(F)("Archive")),1)],10,da)):c("",!0),wa.value?(i(),n("button",{key:2,class:"actions-item feature-action",onClick:Oa,disabled:de.value},[a[10]||(a[10]=o("span",{class:"actions-item-icon"},"⭐",-1)),o("span",null,u(m(F)("Feature")),1)],8,pa)):c("",!0),Ta.value?(i(),n("button",{key:3,class:"actions-item unfeature-action",onClick:Ba,disabled:de.value},[a[11]||(a[11]=o("span",{class:"actions-item-icon"},"✖️",-1)),o("span",null,u(m(F)("Remove from Featured")),1)],8,ma)):c("",!0),Sa.value||La.value?(i(),n("div",ha)):c("",!0),Sa.value?(i(),n("button",{key:5,class:"actions-item takedown-action",onClick:$a,disabled:ve.value},[a[12]||(a[12]=o("span",{class:"actions-item-icon"},"⛔",-1)),o("span",null,u(m(F)("Takedown")),1)],8,ka)):c("",!0),La.value?(i(),n("button",{key:6,class:"actions-item lift-takedown-action",onClick:Va,disabled:ve.value},[a[13]||(a[13]=o("span",{class:"actions-item-icon"},"✅",-1)),o("span",null,u(m(F)("Lift Takedown")),1)],8,ba)):c("",!0),fa.value||Ca.value||Sa.value||La.value?c("",!0):(i(),n("div",ya,u(te.value?ga.value?F("This template was taken down by a moderator"):0===te.value.moderationStatus?F("Awaiting moderator review"):2===te.value.moderationStatus?te.value.rejectionReason?V(te.value.rejectionReason):F("This template was rejected"):"":""),1))],4)):c("",!0)]))])}}},[["__scopeId","data-v-471a9bce"]]),fa={class:"collection"},Ca={key:0,class:"loading-container"},wa={class:"loading-text"},Ta={key:1,class:"error"},Sa={key:2,class:"collection-detail"},La={class:"compact-header"},Ra={class:"header-title-row"},Fa={class:"header-title"},Da={class:"header-actions"},Pa=["aria-label"],Aa={class:"header-meta"},xa={key:1,class:"author-unknown"},_a={key:0,class:"own-badge"},Ma={key:0,class:"header-description"},Ua={class:"header-footer"},ja={class:"share-section"},Ia={class:"share-code-text"},Ea={class:"social-buttons"},Oa=["disabled","title"],Ba=["title"],$a={class:"icon"},Va=["title"],za={class:"members-section"},Wa={class:"members-title"},Ya={key:0,class:"empty-members"},Ga=["disabled"],Na={class:"actions-item-icon"},qa=["disabled"],Ha=["disabled"],Xa={key:3,class:"actions-divider"},Ja=["disabled"],Ka=["disabled"],Qa=S({__name:"Collection",props:{initialData:{type:Object,default:null}},setup(S){const M=S,I=y(),O=T(),{copiedCode:V,copyShareCode:z}=_(),{goBack:W,navigateToDesign:Y}=x(),{currentUser:G,handleLike:X,handleSubscribe:K,handleReport:Q}=L(),{isOpen:Z,addTemplate:ee,removeTemplate:ae,isInCollection:le}=A(),{openMoreMenu:te,copiedLink:se,isLoggedIn:ie,toggleMoreMenu:ne,copyDesignLinkFromMenu:oe,copyShareCodeFromMenu:ue,handleReportFromMenu:ce,getDropdownStyle:re,setupClickOutsideListener:de,cleanupClickOutsideListener:ve}=N(),{handleArchive:pe,handleUnarchive:me}=U(),he=e=>{const a=e.template;return!a||(a.moderationStatus!==j.APPROVED||B(a)||$(a))},ke=e=>e.template?e.template:{shareCode:e.shareCode,name:F("Unknown Template"),authorUsername:null,author:null,thumbnailUrl:null,description:"",likes:0,subscriptions:0,isLiked:!1,isSubscribed:!1},be=e(null),ye=e([]),ge=e(!1),fe=e(null),we=e(!1),Te=e(!1),Se=e(!1),Le=e(!1),Re=e(!1),Fe=e({}),De=a(()=>I.params.shareCode),Pe=a(()=>be.value?.author===G.value?.greenbackUserHash),Ae=a(()=>P.canModerateContent()),xe=a(()=>!!be.value&&(Ae.value&&be.value.moderationStatus===j.APPROVED&&!be.value.isFeatured)),_e=a(()=>!!be.value&&(Ae.value&&be.value.isFeatured)),Me=a(()=>B(be.value)),Ue=a(()=>$(be.value)),je=a(()=>!!be.value&&(Pe.value&&be.value.moderationStatus===j.APPROVED&&!Ue.value)),Ie=a(()=>!!be.value&&(Ae.value&&!Ue.value&&be.value.moderationStatus===j.APPROVED)),Ee=a(()=>!!be.value&&(Ae.value&&Ue.value)),Oe=a(()=>xe.value||_e.value||je.value||Ie.value||Ee.value),Be=a(()=>({"--card-min-width":`${J.state.cardWidth}px`})),$e=async()=>
1{if(M.initialData)return be.value=M.initialData,void(ye.value=M.initialData.members||[]);ge.value=!0,fe.value=null;try{const e=await R.getDesignWithInteractions(De.value);if(!e)throw new Error("No data returned from API");if(!e.isCollection)return void O.replace(`/workshop/${De.value}`);be.value=e,ye.value=e.members||[]}catch(e){fe.value=F("Failed to load collection. It may not exist or has been removed.")}finally{ge.value=!1}},Ve=()=>{z(De.value)},ze=()=>{X(be.value)},We=()=>{K(be.value)},Ye=()=>{Q(De.value)},Ge=()=>{O.push(`/workshop/${De.value}/edit`)},Ne=e=>{if(Re.value)Re.value=!1;else{const a=e.currentTarget.getBoundingClientRect();Fe.value={top:`${a.bottom+4}px`,left:`${a.right}px`,transform:"translateX(-100%)"},Re.value=!0}},qe=async()=>{Re.value=!1,we.value=!0;try{await R.featureTemplate(be.value.shareCode,!0),be.value.isFeatured=!0,D.success(F('Featured "{0}"',be.value.name))}catch(e){D.error(F("Failed to feature collection. Please try again."))}finally{we.value=!1}},He=async()=>{Re.value=!1,we.value=!0;try{await R.featureTemplate(be.value.shareCode,!1),be.value.isFeatured=!1,D.success(F('Removed "{0}" from featured',be.value.name))}catch(e){D.error(F("Failed to remove collection from featured. Please try again."))}finally{we.value=!1}},Xe=async()=>{Re.value=!1,Me.value?(Se.value=!0,await me(be.value),Se.value=!1):(Te.value=!0,await pe(be.value),Te.value=!1)},Je=async()=>{if(confirm(F("Take down this collection? This will hide it from public view and the author cannot reverse it."))){Re.value=!1,Le.value=!0;try{await R.adminTakedownTemplate(be.value.shareCode),be.value.takenDown=!0,be.value.isPublic=!1,D.success(F('Taken down "{0}"',be.value.name))}catch(e){D.error(F("Failed to take down collection. Please try again."))}finally{Le.value=!1}}},Ke=async()=>{if(confirm(F("Lift takedown? The collection will remain unlisted until the author re-publishes it."))){Re.value=!1,Le.value=!0;try{await R.adminLiftTakedown(be.value.shareCode),be.value.takenDown=!1,D.success(F("Takedown lifted — collection remains unlisted"))}catch(e){D.error(F("Failed to lift takedown. Please try again."))}finally{Le.value=!1}}},Qe=e=>{!Re.value||e.target.closest(".actions-menu-btn")||e.target.closest(".collection-actions-dropdown")||(Re.value=!1)};return l(()=>{$e(),de(),document.addEventListener("click",Qe)}),t(()=>{ve(),document.removeEventListener("click",Qe)}),b(De,()=>{$e()}),(e,a)=>{const l=s("router-link");return i(),n("div",fa,[ge.value?(i(),n("div",Ca,[a[3]||(a[3]=o("div",{class:"loading-spinner"},null,-1)),o("p",wa,u(m(F)("Loading collection...")),1)])):fe.value?(i(),n("div",Ta,[o("p",null,u(fe.value),1),o("button",{onClick:a[0]||(a[0]=(...e)=>m(W)&&m(W)(...e)),class:"btn"},u(m(F)("Back")),1)])):be.value?(i(),n("div",Sa,[o("button",{onClick:a[1]||(a[1]=(...e)=>m(W)&&m(W)(...e)),class:"back-btn"},[a[4]||(a[4]=o("span",{class:"back-icon"},"←",-1)),r(" "+u(m(F)("Back")),1)]),o("div",La,[o("div",Ra,[o("h1",Fa,[a[5]||(a[5]=o("span",{class:"title-icon"},"📁",-1)),r(" "+u(be.value.name||m(F)("Untitled Collection")),1)]),o("div",Da,[Pe.value?(i(),n("button",{key:0,onClick:Ge,class:"edit-btn"},[a[6]||(a[6]=o("span",{class:"icon"},"✏️",-1)),o("span",null,u(m(F)("Edit")),1)])):c("",!0),Oe.value?(i(),n("button",{key:1,class:"actions-menu-btn",onClick:Ne,"aria-label":m(F)("More actions"),"aria-haspopup":"menu"},[...a[7]||(a[7]=[o("span",{class:"actions-icon","aria-hidden":"true"},"⋯",-1)])],8,Pa)):c("",!0)])]),o("p",Aa,[o("span",null,[r(u(m(F)("by {0}").split("{0}")[0]),1),be.value.authorUsername?(i(),p(l,{key:0,to:`/workshop?author=${encodeURIComponent(be.value.author)}`,class:"author-link"},{default:k(()=>[r(u(be.value.authorUsername),1)]),_:1},8,["to"])):(i(),n("span",xa,u(m(F)("Unnamed")),1)),r(u(m(F)("by {0}").split("{0}")[1]),1)]),Pe.value?(i(),n("span",_a,u(m(F)("(You)")),1)):c("",!0),a[8]||(a[8]=o("span",{class:"meta-separator"},"·",-1)),o("span",null,u(m(F)("[number:{0};1=1 template;x={0} templates:]",be.value.memberCount)),1)]),be.value.description?(i(),n("p",Ma,u(be.value.description),1)):c("",!0),o("div",Ua,[o("div",ja,[o("code",Ia,u(De.value),1),o("button",{onClick:Ve,class:"copy-btn"},u(m(V)===De.value?m(F)("Copied!"):m(F)("Copy")),1)]),o("div",Ea,[o("button",{onClick:ze,class:g(["stat-btn",{active:be.value.isLiked}]),disabled:Pe.value,title:Pe.value?m(F)("You can't like your own collection"):be.value.isLiked?m(F)("Unlike"):m(F)("Like")},[a[9]||(a[9]=o("span",{class:"icon"},"💚",-1)),o("span",null,u(be.value.likes),1)],10,Oa),o("button",{onClick:We,class:g(["stat-btn",{active:be.value.isSubscribed}]),title:be.value.isSubscribed?m(F)("Remove"):m(F)("Add")},[o("span",$a,u(be.value.isSubscribed?"➖":"➕"),1),o("span",null,u(be.value.subscriptions),1)],10,Ba),o("button",{onClick:Ye,class:"stat-btn report-btn",t
1itle:m(F)("Report collection")},[...a[10]||(a[10]=[o("span",{class:"icon"},"⚠️",-1)])],8,Va)])])]),o("div",za,[o("h2",Wa,u(m(F)("Templates in this Collection")),1),0===ye.value.length?(i(),n("div",Ya,[o("p",null,u(m(F)("This collection is empty.")),1)])):(i(),n("div",{key:1,class:"template-grid",style:C(Be.value)},[(i(!0),n(d,null,v(ye.value,e=>(i(),p(E,{key:e.shareCode,template:ke(e),unavailable:he(e),"show-collection-button":m(Z),"in-collection":m(le)(e.template?.shareCode||e.shareCode),onClick:a=>m(Y)(e.template?.shareCode||e.shareCode,a),onLike:a=>m(X)(e.template),onSubscribe:a=>m(K)(e.template),onToggleCollection:a=>m(le)(e.template?.shareCode||e.shareCode)?m(ae)(e.template?.shareCode||e.shareCode):m(ee)(ke(e)),onMore:m(ne)},null,8,["template","unavailable","show-collection-button","in-collection","onClick","onLike","onSubscribe","onToggleCollection","onMore"]))),128))],4))]),Ae.value&&be.value.isFeatured?(i(),p(Ce,{key:0,"share-code":De.value},null,8,["share-code"])):c("",!0),Ae.value?(i(),p(H,{key:1,"share-code":De.value},null,8,["share-code"])):c("",!0),h(q,{"share-code":m(te),"dropdown-style":m(re)(),"copied-link":m(se),"copied-code":m(V),"is-logged-in":m(ie),onCopyLink:m(oe),onCopyCode:m(ue),onReport:m(ce)},null,8,["share-code","dropdown-style","copied-link","copied-code","is-logged-in","onCopyLink","onCopyCode","onReport"]),(i(),p(w,{to:"body"},[Re.value?(i(),n("div",{key:0,class:"collection-actions-dropdown",style:C(Fe.value),onClick:a[2]||(a[2]=f(()=>{},["stop"]))},[je.value?(i(),n("button",{key:0,class:g(["actions-item",Me.value?"unarchive-action":"archive-action"]),onClick:Xe,disabled:Te.value||Se.value},[o("span",Na,u(Me.value?"📂":"📁"),1),o("span",null,u(Me.value?m(F)("Restore from Archive"):m(F)("Archive")),1)],10,Ga)):c("",!0),xe.value?(i(),n("button",{key:1,class:"actions-item feature-action",onClick:qe,disabled:we.value},[a[11]||(a[11]=o("span",{class:"actions-item-icon"},"⭐",-1)),o("span",null,u(m(F)("Feature")),1)],8,qa)):c("",!0),_e.value?(i(),n("button",{key:2,class:"actions-item unfeature-action",onClick:He,disabled:we.value},[a[12]||(a[12]=o("span",{class:"actions-item-icon"},"✖️",-1)),o("span",null,u(m(F)("Remove from Featured")),1)],8,Ha)):c("",!0),Ie.value||Ee.value?(i(),n("div",Xa)):c("",!0),Ie.value?(i(),n("button",{key:4,class:"actions-item takedown-action",onClick:Je,disabled:Le.value},[a[13]||(a[13]=o("span",{class:"actions-item-icon"},"⛔",-1)),o("span",null,u(m(F)("Takedown")),1)],8,Ja)):c("",!0),Ee.value?(i(),n("button",{key:5,class:"actions-item lift-takedown-action",onClick:Ke,disabled:Le.value},[a[14]||(a[14]=o("span",{class:"actions-item-icon"},"✅",-1)),o("span",null,u(m(F)("Lift Takedown")),1)],8,Ka)):c("",!0)],4)):c("",!0)]))])):c("",!0)])}}},[["__scopeId","data-v-daf0b6c2"]]),Za={class:"template-detail"},el={key:0,class:"loading-container",role:"status","aria-live":"polite","aria-busy":"true"},al={class:"loading-text"},ll={key:1,class:"loading-container",role:"status","aria-live":"polite","aria-busy":"true"},tl={class:"loading-text"},sl={key:2,class:"error"},il=S({__name:"TemplateDetail",setup(l){const t=y(),{goBack:s}=x(),r=e(null),d=e(!1),v=e(null),h=a(()=>t.params.shareCode),k=e(!1),g=e(0),f=async()=>{if(h.value){d.value=!0,v.value=null,r.value=null;try{r.value=await R.getDesignWithInteractions(h.value),k.value=!1}catch(e){if(404===e.status&&k.value){if(g.value<15)return g.value++,void setTimeout(()=>f(),2e3);k.value=!1}v.value=F("Failed to load content. It may not exist or has been removed.")}finally{k.value&&!r.value||(d.value=!1)}}};return b(h,()=>{g.value=0,f()},{immediate:!0}),(e,a)=>(i(),n("div",Za,[!k.value||r.value||v.value?d.value?(i(),n("div",ll,[a[2]||(a[2]=o("div",{class:"loading-spinner","aria-hidden":"true"},null,-1)),o("p",tl,u(m(F)("Loading...")),1)])):v.value?(i(),n("div",sl,[o("p",null,u(v.value),1),o("button",{onClick:a[0]||(a[0]=(...e)=>m(s)&&m(s)(...e)),class:"btn"},u(m(F)("Back")),1)])):r.value&&!r.value.isCollection?(i(),p(ga,{key:3,"initial-data":r.value},null,8,["initial-data"])):r.value&&r.value.isCollection?(i(),p(Qa,{key:4,"initial-data":r.value},null,8,["initial-data"])):c("",!0):(i(),n("div",el,[a[1]||(a[1]=o("div",{class:"loading-spinner","aria-hidden":"true"},null,-1)),o("p",al,u(m(F)("Your design is being prepared for the workshop...")),1)]))]))}},[["__scopeId","data-v-16aa78d1"]]);export{il 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.