PageSourceSearch

https://faptap.net/assets/CreatePlaylistDialog.vue_vue_type_script_setup_true_lang.88885215.js

js faptap.net collected 2026-09-25 22:12:16 UTC 5,798 bytes, 1 lines download raw bytes

1import{d as N,c as k,b as d,w as h,f as C,j as i,n,D as P,F as T,v as w,i as a,z as B,t as v,ac as M,ad as A,x as D,l as S,g as j,m as u,_ as c,k as E,a as I}from"./index.16ba4ea0.js";import{u as L}from"./playlists.da3a5c16.js";import{_ as R}from"./ExtraInput.vue_vue_type_style_index_0_lang.6d02d9ec.js";import{_ as q}from"./SelectInput.vue_vue_type_script_setup_true_lang.493d8564.js";const G={class:"text-xs text-zinc-400 mt-1"},H={class:"text-xs text-zinc-400 mt-1"},J={class:"relative"},K={class:"absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none text-zinc-400"},Q={key:0,class:"text-center bg-red-500/10 border border-red-500/20 rounded p-3"},W={class:"text-sm font-medium text-red-500"},X={class:"flex justify-between gap-3 mt-2"},Y={class:"flex gap-3 ml-auto"},Z={class:"space-y-4"},ee={class:"text-zinc-300"},te={class:"font-semibold text-white"},le={class:"flex gap-3 justify-end mt-6"},ue=N({__name:"CreatePlaylistDialog",props:{isOpen:{type:Boolean},playlist:{}},emits:["close","success","delete"],setup($,{emit:z}){const o=$,f=z,x=L(),g=k(()=>!!o.playlist),l=d({name:"",description:"",privacy:0,tags:[]}),O=k(()=>{if(!l.value.description)return 0;const e=new DOMParser().parseFromString(l.value.description,"text/html").body.textContent||"";return e.trim()===""?0:e.length}),m=d([]),b=d(!1),y=d(!1),p=d(!1),r=d(null);h(()=>o.playlist,t=>{var e;t?(l.value.name=t.name,l.value.description=t.description||"",l.value.privacy=t.privacy,l.value.tags=((e=t.tags)==null?void 0:e.map(s=>s.name))||[]):V()},{immediate:!0}),h(()=>o.isOpen,t=>{t?o.playlist||V():r.value=null});function V(){l.value={name:"",description:"",privacy:0,tags:[]},m.value=[]}async function F(t){if(t.length<2){m.value=[];return}try{const e=await I.tags.getTagSlug({slug:t,page:1,limit:5});m.value=e.tags.map(s=>s.name)}catch(e){console.error("Failed to fetch tags:",e),m.value=[]}}async function U(){b.value=!0,r.value=null;try{let t;g.value&&o.playlist?t=await x.updatePlaylist(o.playlist.id,{name:l.value.name,description:l.value.description,privacy:l.value.privacy,tags:l.value.tags}):t=await x.createPlaylist(l.value.name,l.value.description,l.value.privacy,l.value.tags),f("success",t),f("close")}catch(t){r.value=String((t==null?void 0:t.message)||t||"")}finally{b.value=!1}}async function _(){if(!!o.playlist){y.value=!0;try{await x.deletePlaylist(o.playlist.id),p.value=!1,f("delete"),f("close")}catch(t){r.value=t instanceof Error?t.message:"Failed to delete playlist"}finally{y.value=!1}}}return(t,e)=>(w(),C(T,null,[i(P,{"model-value":o.isOpen,"onUpdate:modelValue":e[6]||(e[6]=s=>!s&&t.$emit("close")),title:g.value?"Edit Playlist":"Create New Playlist"},{default:n(()=>[a("form",{onSubmit:E(U,["prevent"]),class:"flex flex-col gap-5"},[a("div",null,[e[9]||(e[9]=a("label",{class:"block mb-2 text-sm font-medium text-white"},"Playlist Name",-1)),i(B,{modelValue:l.value.name,"onUpdate:modelValue":e[0]||(e[0]=s=>l.value.name=s),required:"",maxlength:"35",placeholder:"e.g. My Favorite Collection"},null,8,["modelValue"]),a("p",G,v(l.value.name.length)+"/35 ",1)]),a("div",null,[e[10]||(e[10]=a("label",{class:"block mb-2 text-sm font-medium text-white"},"Description",-1)),i(R,{modelValue:l.value.description,"onUpdate:modelValue":e[1]||(e[1]=s=>l.value.description=s),placeholder:"Tell others what makes this playlist special..."},null,8,["modelValue"]),a("p",H,v(O.value)+"/500 ",1)]),a("div",null,[e[11]||(e[11]=a("label",{class:"block mb-2 text-sm font-medium text-white"},"Tags (Optional)",-1)),i(q,{ref:"tagsInputRef",onSearch:F,modelValue:l.value.tags,"onUpdate:modelValue":e[2]||(e[2]=s=>l.value.tags=s),options:m.value,placeholder:"Add tags (e.g. favorites, compilation)",create:!0},null,8,["modelValue","options"])]),a("div",null,[e[13]||(e[13]=a("label",{class:"block mb-2 text-sm font-medium text-white"},"Privacy",-1)),a("div",J,[M(a("select",{"onUpdate:modelValue":e[3]||(e[3]=s=>l.value.privacy=s),class:"w-full bg-zinc-800 text-white rounded-md px-4 py-2.5 appearance-none focus:outline-none focus:ring-2 focus:ring-blue-500/50 border border-zinc-700 cursor-pointer hover:border-zinc-600 transition-colors"},[...e[12]||(e[12]=[a("option",{value:0},"Public - Anyone can view",-1),a("option",{value:2},"Unlisted - Only with link",-1),a("option",{value:1},"Private - Only you",-1)])],512),[[A,l.value.privacy]]),a("div",K,[i(D,{name:"chevron-down",class:"w-5 h-5"})])])]),r.value?(w(),C("div",Q,[a("p",W,v(r.value),1)])):S("",!0),a("div",X,[g.value?(w(),j(c,{key:0,theme:"red",type:"button",loading:y.value,onClick:e[4]||(e[4]=s=>p.value=!0),class:"flex items-center gap-1.5"},{default:n(()=>[i(D,{name:"delete",class:"w-4 h-4"}),e[14]||(e[14]=u(" Delete ",-1))]),_:1},8,["loading"])):S("",!0),a("div",Y,[i(c,{theme:"light",onClick:e[5]||(e[5]=s=>t.$emit("close")),type:"button"},{default:n(()=>[...e[15]||(e[15]=[u("Cancel",-1)])]),_:1}),i(c,{type:"submit",theme:"blue",class:"px-6",loading:b.value,disabled:!l.value.name.trim()},{default:n(()=>[u(v(g.value?"Save":"Create"),1)]),_:1},8,["loading","disabled"])])])],32)]),_:1},8,["model-value","title"]),i(P,{modelValue:p.value,"onUpdate:modelValue":e[8]||(e[8]=s=>p.value=s),title:"Delete Playlist"},{default:n(()=>{var s;return[a("div",Z,[a("p",ee,[e[16]||(e[16]=u("Are you sure you want to delete ",-1)),a("span",te,v((s=o.playlist)==null?void 0:s.name),1),e[17]||(e[17]=u("?",-1))]),e[20]||(e[20]=a("p",{class:"text-sm text-zinc-400"},"This action cannot be undone. All videos will be removed from this playlist.",-1)),a("div",le,[i(c,{theme:"light",onClick:e[7]||(e[7]=ae=>p.value=!1)},{default:n(()=>[...e[18]||(e[18]=[u("Cancel",-1)])]),_:1}),i(c,{theme:"red",loading:y.value,onClick:_},{default:n(()=>[...e[19]||(e[19]=[u("Delete Playlist",-1)])]),_:1},8,["loading"])])])]}),_:1},8,["modelValue"])],64))}});
1export{ue as _};

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.