1import{$ as e,C as t,Ct as n,Et as r,H as i,J as a,K as o,L as s,Mt as c,N as l,O as u,Rt as d,T as f,U as p,V as m,Vt as h,Y as g,_t as _,a as v,at as y,b,c as x,d as S,f as C,ft as ee,g as w,gt as T,h as E,ht as D,jt as O,lt as k,mt as A,n as j,pt as M,q as N,r as P,t as F,u as I,ut as te,vt as ne,xt as L,zt as R}from"../chunks/CnPnrLZl.js";import{t as z}from"../chunks/DSjdEP0O.js";import{s as B}from"../chunks/t241UnUZ.js";import"../chunks/CP6EPvh-.js";import{t as V}from"../chunks/D5ykq-5p.js";import{t as H}from"../chunks/Cx27lnk7.js";import{t as re}from"../chunks/DWXlTpXY.js";import{t as ie}from"../chunks/DTxs3DB7.js";import{t as ae}from"../chunks/hJWdETsx.js";import{t as U}from"../chunks/GnbdsmuF.js";import{t as W}from"../chunks/OXpqpxxq.js";import{t as G}from"../chunks/CQjCixiM.js";import{t as K}from"../chunks/D7DOH9lb.js";import{t as q}from"../chunks/DC5a5LwM.js";import{t as oe}from"../chunks/Bd7jxpV4.js";import{t as se}from"../chunks/DwZT__Sv.js";import{t as ce}from"../chunks/BjfzFILV.js";import{t as le}from"../chunks/CR_Mtpb5.js";import{t as ue}from"../chunks/DEgG6jKf.js";import{t as de}from"../chunks/XVZSq9OP.js";import{t as fe}from"../chunks/D7D3rP6h.js";import{t as pe}from"../chunks/Dug05Yvc.js";import{t as me}from"../chunks/CVXvVF4z.js";import{t as he}from"../chunks/tdR2_aYI.js";import{r as ge}from"../chunks/cBbp9Uxo.js";import"../chunks/CQWDwTFt.js";import{t as _e}from"../chunks/UVoiHJlR.js";import{t as ve}from"../chunks/BIcw9N1f.js";import{t as J}from"../chunks/DAkVpsLG.js";import{n as ye}from"../chunks/CpyyG4mw.js";import{a as be,d as xe,f as Se,h as Y,i as Ce,l as we,m as Te,n as Ee,o as De,p as Oe,r as ke,s as Ae,t as X,u as Z}from"../chunks/DUfTRuvD.js";import{n as je,t as Me}from"../chunks/C7cPkslH.js";import{t as Ne}from"../chunks/DTluhT47.js";var Pe=new Set([`$$slots`,`$$events`,`$$legacy`]);function Fe(e,t){let n=j(t,Pe),r={name:`at-sign`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`4`}],[`path`,{d:`M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8`}]]};V(e,P(()=>n,{get icon(){return r}}))}var Ie=new Set([`$$slots`,`$$events`,`$$legacy`]);function Le(e,t){let n=j(t,Ie),r={name:`corner-down-left`,size:24,node:[[`path`,{d:`M20 4v7a4 4 0 0 1-4 4H4`}],[`path`,{d:`m9 10-5 5 5 5`}]]};V(e,P(()=>n,{get icon(){return r}}))}var Re=new Set([`$$slots`,`$$events`,`$$legacy`]);function ze(e,t){let n=j(t,Re),r={name:`hash`,size:24,node:[[`line`,{x1:`4`,x2:`20`,y1:`9`,y2:`9`}],[`line`,{x1:`4`,x2:`20`,y1:`15`,y2:`15`}],[`line`,{x1:`10`,x2:`8`,y1:`3`,y2:`21`}],[`line`,{x1:`16`,x2:`14`,y1:`3`,y2:`21`}]]};V(e,P(()=>n,{get icon(){return r}}))}var Be=new Set([`$$slots`,`$$events`,`$$legacy`]);function Ve(e,t){let n=j(t,Be),r={name:`ruler`,size:24,node:[[`path`,{d:`M21.3 15.3a2.4 2.4 0 0 1 0 3.4l-2.6 2.6a2.4 2.4 0 0 1-3.4 0L2.7 8.7a2.41 2.41 0 0 1 0-3.4l2.6-2.6a2.41 2.41 0 0 1 3.4 0Z`}],[`path`,{d:`m14.5 12.5 2-2`}],[`path`,{d:`m11.5 9.5 2-2`}],[`path`,{d:`m8.5 6.5 2-2`}],[`path`,{d:`m17.5 15.5 2-2`}]]};V(e,P(()=>n,{get icon(){return r}}))}var He=new Set([`$$slots`,`$$events`,`$$legacy`]);function Ue(e,t){let n=j(t,He),r={name:`shuffle`,size:24,node:[[`path`,{d:`m18 14 4 4-4 4`}],[`path`,{d:`m18 2 4 4-4 4`}],[`path`,{d:`M2 18h1.973a4 4 0 0 0 3.3-1.7l5.454-8.6a4 4 0 0 1 3.3-1.7H22`}],[`path`,{d:`M2 6h1.972a4 4 0 0 1 3.6 2.2`}],[`path`,{d:`M22 18h-6.041a4 4 0 0 1-3.3-1.8l-.359-.45`}]]};V(e,P(()=>n,{get icon(){return r}}))}var We=new Set([`$$slots`,`$$events`,`$$legacy`]);function Ge(e,t){let n=j(t,We),r={name:`toggle-left`,size:24,node:[[`circle`,{cx:`9`,cy:`12`,r:`3`}],[`rect`,{width:`20`,height:`14`,x:`2`,y:`5`,rx:`7`}]]};V(e,P(()=>n,{get icon(){return r}}))}function Ke(e,t){let n=new URLSearchParams(e.toString());return t===1?n.delete(`page`):n.set(`page`,String(t)),n.size?`/search/cards?${n}`:`/search/cards`}var qe=p(`<a data-sveltekit-replacestate="" aria-label="Previous page"><!></a>`),Je=p(`<span role="link" aria-disabled="true" aria-label="Previous page"><!></span>`),Ye=p(`<span class="w-6 text-center">â¦</span>`),Xe=p(`<span aria-current="page"> </span>`),Ze=p(`<a data-sveltekit-replacestate=""> </a>`),Qe=p(`<a data-sveltekit-replacestate="" aria-label="Next page"><!></a>`),$e=p(`<span role="link" aria-disabled="true" aria-label="Next page"><!></span>`),et=p(`<nav aria-label="Pages" class="flex flex-wrap items-center justify-between gap-3 border-t border-foreground
1/10 pt-4 text-xs text-muted-foreground"><span class="tabular-nums"><span class="font-medium text-foreground"> </span> </span> <div class="flex items-center gap-1"><!> <span class="px-2 tabular-nums sm:hidden"> </span> <span class="hidden items-center gap-1 sm:flex"></span> <!></div> <form class="ml-auto flex items-center gap-1.5"><label for="pager-jump">Go to</label> <input id="pager-jump" type="number" min="1" placeholder="page" class="h-8 w-16 rounded-full border border-foreground/10 bg-muted/30 px-3 text-center text-xs tabular-nums outline-hidden [appearance:textfield] focus:border-foreground/25 [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none"/></form></nav>`);function tt(t,a){c(a,!0);let o=n(``),l=r(()=>Math.max(1,Math.ceil(a.totalHits/a.perPage))),d=r(()=>(a.currentPage-1)*a.perPage+1),p=r(()=>Math.min(a.currentPage*a.perPage,a.totalHits)),h=r(()=>{let t=[...new Set([1,e(l),a.currentPage-1,a.currentPage,a.currentPage+1].filter(t=>t>=1&&t<=e(l)))].sort((e,t)=>e-t),n=[];return t.forEach((e,r)=>{r>0&&e-t[r-1]>1&&n.push(`dots`),n.push(e)}),n});function v(t){let n=Math.min(Math.max(1,Math.floor(t)),e(l));Number.isFinite(n)&&n!==a.currentPage&&B(z(Ke(ge.url.searchParams,n)),{replace:!0})}let y=`inline-flex h-8 w-8 items-center justify-center rounded-full border border-foreground
1/10 bg-muted/30 text-muted-foreground transition-colors hover:bg-muted/60 hover:text-foreground aria-disabled:opacity-40 aria-disabled:hover:bg-muted/30`;var b=i(),ee=D(b),j=t=>{var n=et(),r=A(n),c=A(r),b=T(c),ee=_(c);R(r);var O=_(r,2),j=A(O),M=e=>{var t=qe();E(t,1,w(y));var n=A(t);q(n,{class:`h-4 w-4`}),R(t),k(e=>C(t,`href`,e),[()=>z(Ke(ge.url.searchParams,a.currentPage-1))]),m(e,t)},N=e=>{var t=Je();E(t,1,w(y));var n=A(t);q(n,{class:`h-4 w-4`}),R(t),m(e,t)};u(j,e=>{a.currentPage>1?e(M):e(N,-1)});var P=_(j,2),F=T(P),I=_(P,2);f(I,23,()=>e(h),(e,t)=>`${e}-${t}`,(t,n)=>{var r=i(),o=D(r),c=e=>{var t=Ye();m(e,t)},l=t=>{var r=Xe(),i=T(r,!0);k(e=>{E(r,1,`inline-flex items-center gap-1 rounded-full px-3 py-1 text-xs transition-colors border border-transparent bg-foreground text-background shadow-xs h-8 min-w-8 justify-center px-2.5 tabular-nums`),s(i,e)},[()=>e(n).toLocaleString()]),m(t,r)},d=t=>{var r=Ze(),i=T(r,!0);k((e,t)=>{C(r,`href`,e),E(r,1,`inline-flex items-center gap-1 rounded-full px-3 py-1 text-xs transition-colors border border-foreground
1/10 bg-muted/30 text-muted-foreground hover:text-foreground hover:bg-muted/60 h-8 min-w-8 justify-center px-2.5 tabular-nums`),s(i,t)},[()=>z(Ke(ge.url.searchParams,e(n))),()=>e(n).toLocaleString()]),m(t,r)};u(o,t=>{e(n)===`dots`?t(c):e(n)===a.currentPage?t(l,1):t(d,-1)}),m(t,r)}),R(I);var te=_(I,2),ne=e=>{var t=Qe();E(t,1,w(y));var n=A(t);oe(n,{class:`h-4 w-4`}),R(t),k(e=>C(t,`href`,e),[()=>z(Ke(ge.url.searchParams,a.currentPage+1))]),m(e,t)},B=e=>{var t=$e();E(t,1,w(y));var n=A(t);oe(n,{class:`h-4 w-4`}),R(t),m(e,t)};u(te,t=>{a.currentPage<e(l)?t(ne):t(B,-1)}),R(O);var V=_(O,2),H=_(A(V),2);S(H),R(V),R(n),k((t,n,r,i)=>{s(b,`${t??``} to ${n??``}`),s(ee,` of ${r??``}`),s(F,`${a.currentPage??``} of ${i??``}`),C(H,`max`,e(l))},[()=>e(d).toLocaleString(),()=>e(p).toLocaleString(),()=>a.totalHits.toLocaleString(),()=>e(l).toLocaleString()]),g(`submit`,V,t=>{t.preventDefault(),v(Number(e(o))),L(o,``)}),x(H,()=>e(o),e=>L(o,e)),m(t,n)};u(ee,t=>{e(l)>1&&t(j)}),m(t,b),O()}function nt(){return{characters:[],creators:[],unavailable:[]}}function rt(e,t,n=fetch){let r=new AbortController;t({status:`loading`,data:nt()});let i=async()=>{try{let i=await n(`/api/search/suggestions?${new URLSearchParams(e)}`,{signal:r.signal});if(!i.ok)throw Error(`Suggestions returned ${i.status}`);let a=await i.json();r.signal.aborted||t({status:a.unavailable.length?`unavailable`:`ready`,data:a})}catch{r.signal.aborted||t({status:`unavailable`,data:nt()})}},a=setTimeout(()=>void i(),250);return()=>{clearTimeout(a),r.abort()}}var it=null;function Q(e,t={}){let n=new URL(it??location.href);e(n.searchParams),t.resetPage!==!1&&n.searchParams.delete(`page`),it=n;let r=n.searchParams.toString();B(z(r?`search/cards?${r}`:`search/cards`),{replace:!0,reset:!1}).finally(()=>{it===n&&(it=null)}).catch(e=>{console.error(`Catalog navigation failed:`,e)})}function at(e){let t=e.toLowerCase();Q(n=>{let r=n.get(`exclude_tags`);if(r){let e=r.split(`,`).filter(e=>e.toLowerCase()!==t);e.length===0?n.delete(`exclude_tags`):n.set(`exclude_tags`,e.join(`,`))}let i=n.get(`tags`);i?i.split(`,`).some(e=>e.toLowerCase()===t)||n.set(`tags`,i+`,`+e):n.set(`tags`,e)})}function ot(e){let t=e.toLowerCase(),n=new URLSearchParams(location.search).get(`tags`);n&&Q(e=>{let r=n.split(`,`).filter(e=>e.toLowerCase()!==t);r.length===0?e.delete(`tags`):e.set(`tags`,r.join(`,`))})}function st(e){let t=e.toLowerCase();Q(n=>{let r=n.get(`tags`);if(r){let e=r.split(`,`).filter(e=>e.toLowerCase()!==t);e.length===0?n.delete(`tags`):n.set(`tags`,e.join(`,`))}let i=n.get(`exclude_tags`);i?i.split(`,`).some(e=>e.toLowerCase()===t)||n.set(`exclude_tags`,i+`,`+e):n.set(`exclude_tags`,e)})}function ct(e){let t=e.toLowerCase(),n=new URLSearchParams(location.search).get(`exclude_tags`);n&&Q(e=>{let r=n.split(`,`).filter(e=>e.toLowerCase()!==t);r.length===0?e.delete(`exclude_tags`):e.set(`exclude_tags`,r.join(`,`))})}function lt(e){Q(t=>{if(!e||e<1)t.delete(`minimum_tokens`);else{let n=Math.floor(e);t.set(`minimum_tokens`,n.toString())}})}function ut(e){Q(t=>{if(!e||e<1)t.delete(`maximum_tokens`);else{let n=Math.floor(e);t.set(`maximum_tokens`,n.toString())}})}function dt(e){Q(t=>{e?t.set(`hasLorebook`,`true`):t.delete(`hasLorebook`)})}function ft(e){Q(t=>{e?t.set(`isOC`,`true`):t.delete(`isOC`)})}function pt(e){let t={tiny:[`0`,`500`],small:[`500`,`1000`],medium:[`1000`,`2000`],large:[`2000`,`4000`],huge:[`4000`,null]}[e.toLowerCase()];if(!t){console.warn(`Unknown token preset:`,e);return}Q(e=>{e.set(`minimum_tokens`,t[0]),t[1]===null?e.delete(`maximum_tokens`):e.set(`maximum_tokens`,t[1])})}function mt(){Q(e=>{e.delete(`minimum_tokens`),e.delete(`maximum_tokens`)})}function ht(e,t,n=e.length){let r=t.trim().toLowerCase();if(!r)return e.slice(0,n);let i=[],a=[],o=[];for(let t of e){let e=t.value.toLowerCase();e===r?i.push(t):e.startsWith(r)?a.push(t):e.includes(r)&&o.push(t)}return[...i,...a,...o].slice(0,n)}function gt(e,t,n){let r=new Set([...t,...n].map(e=>e.toLowerCase())),i=new Map(e.map(e=>[e.value.toLowerCase(),e]));return[...[...r].map(e=>i.get(e)??{value:e}),...e.filter(e=>!r.has(e.value.toLowerCase()))]}function _t(e){let t=[],n=e.get(`query`);
1n&&t.push({key:`q`,label:n,cls:X.query,icon:fe,remove:Ot});for(let n of e.get(`tags`)?.split(`,`).filter(Boolean)??[])t.push({key:`in:${n}`,label:n,cls:X.include,icon:ze,remove:()=>ot(n),flip:()=>st(n)});for(let n of e.get(`exclude_tags`)?.split(`,`).filter(Boolean)??[])t.push({key:`out:${n}`,label:n,cls:X.exclude,icon:U,remove:()=>ct(n),flip:()=>at(n)});let r=Number(e.get(`minimum_tokens`)??0),i=Number(e.get(`maximum_tokens`)??0);return(r>0||i>0)&&t.push({key:`len`,label:Oe(r,i),cls:X.length,icon:Ve,remove:mt}),e.get(`hasLorebook`)===`true`&&t.push({key:`lore`,label:`Lorebook`,cls:X.feature,icon:W,remove:()=>dt(!1)}),e.get(`isOC`)===`true`&&t.push({key:`oc`,label:`Original content`,cls:X.feature,icon:le,remove:()=>ft(!1)}),t}function vt(){Q(e=>{for(let t of[`query`,`tags`,`exclude_tags`,`minimum_tokens`,`maximum_tokens`,`hasLorebook`,`isOC`])e.delete(t)})}var yt=`ct-catalog-recent-searches`,$=ne([]);function bt(){try{let e=JSON.parse(localStorage.getItem(yt)??`[]`);Array.isArray(e)&&$.splice(0,$.length,...e.filter(e=>typeof e==`string`).slice(0,6))}catch{}}function xt(e){let t=$.indexOf(e);t>=0&&$.splice(t,1),$.unshift(e),$.length>6&&($.length=6);try{localStorage.setItem(yt,JSON.stringify($))}catch{}}var St=[`a grumpy dragon who runs a bakery`,`slow burn rivals at a magic academy`,`a detective in a rain-soaked cyberpunk city`];function Ct(e){let t=e.trim();if(!t)return{mode:`empty`};if(t.startsWith(`-#`))return{mode:`tag`,term:t.slice(2).trim(),exclude:!0};if(t.startsWith(`#`))return{mode:`tag`,term:t.slice(1).trim(),exclude:!1};if(t.startsWith(`@`))return{mode:`creator`,term:t.slice(1).trim()};let n=t.match(/^>\s*(\d+)$/);if(n){let e=Number(n[1]);return{mode:`tokens`,min:e,label:`${e.toLocaleString()}+ tokens`}}let r=t.match(/^<\s*(\d+)$/);if(r){let e=Number(r[1]);return{mode:`tokens`,max:e,label:`up to ${e.toLocaleString()} tokens`}}let i=t.match(/^(\d+)\s*-\s*(\d+)$/);if(i){let e=Number(i[1]),t=Number(i[2]);return{mode:`tokens`,min:e,max:t,label:`${e.toLocaleString()} to ${t.toLocaleString()} tokens`}}return{mode:`text`,term:t}}function wt(e){let t=Ct(e);return t.mode!==`text`&&t.mode!==`creator`||t.term.length<2||t.term.length>100?null:{query:t.term,mode:t.mode}}function Tt(e){switch(e.kind){case`character`:return`character:${e.card.id}`;case`creator`:return`creator:${e.username.toLowerCase()}`;case`tag`:return`tag:${e.exclude}:${e.tag}`;case`tokens`:return`tokens:${e.min}:${e.max}`;default:return`${e.kind}:${e.text}`}}function Et(e,t){let n=Ct(e),r=[];if(n.mode===`empty`)return t.recents.length&&r.push({id:`recent`,label:`Recent`,items:t.recents.map(e=>({kind:`recent`,text:e}))}),r.push({id:`describe`,label:`Try describing who you want to meet`,items:St.map(e=>({kind:`keyword`,text:e}))}),t.tags.length&&r.push({id:`tags`,label:`Popular tags`,items:t.tags.slice(0,8).map(e=>({kind:`tag`,tag:e.value,count:e.count,exclude:!1}))}),r;if(n.mode===`tag`){let e=n.term?ht(t.tags,n.term,8):t.tags.slice(0,8),i=e.map(e=>({kind:`tag`,tag:e.value,count:e.count,exclude:n.exclude}));return n.term&&!e.some(e=>e.value.toLowerCase()===n.term.toLowerCase())&&i.unshift({kind:`tag`,tag:n.term.toLowerCase(),exclude:n.exclude}),r.push({id:`tags`,label:n.exclude?`Exclude tag`:`Include tag`,items:i}),r}if(n.mode===`creator`){let e=n.term.toLowerCase(),i=t.creators.slice(0,6),a=i.map(e=>({kind:`creator`,...e})),o=i.findIndex(t=>t.username.toLowerCase()===e);return o>=0?a.unshift(...a.splice(o,1)):/^[a-zA-Z0-9_-]{1,256}$/.test(n.term)&&a.unshift({kind:`creator`,username:n.term,unverified:!0}),r.push({id:`creators`,label:`Creators`,items:a}),r}if(n.mode===`tokens`)return r.push({id:`tokens`,label:`Length`,items:[{kind:`tokens`,min:n.min,max:n.max,label:n.label}]}),r;let i=n.term;r.push({id:`search`,label:`Search`,items:[{kind:`keyword`,text:i}]});let a=ht(t.tags,i,4);a.length&&r.push({id:`tags`,label:`Tags`,items:a.map(e=>({kind:`tag`,tag:e.value,count:e.count,exclude:!1}))});let o=t.characters.slice(0,4);o.length&&r.push({id:`characters`,label:`Characters`,items:o.map(e=>({kind:`character`,card:e}))});let s=t.creators.slice(0,3);return s.length&&r.push({id:`creators`,label:`Creators`,items:s.map(e=>({kind:`creator`,...e}))}),r}function Dt(e){switch(e.kind){case`keyword`:xt(e.text),Q(t=>t.set(`query`,e.text));return;case`tag`:xt(`${e.exclude?`-`:``}#${e.tag}`),e.exclude?st(e.tag):at(e.tag);return;case`tokens`:Q(t=>{e.min?t.set(`minimum_tokens`,String(e.min)):t.delete(`minimum_tokens`),e.max?t.set(`maximum_tokens`,String(e.max)):t.delete(`maximum_tokens`)});return;case`character`:B(z(`/character/[author]/[char_name]`,ye(e.card.path)));return;case`creator`:B(z(`/author/[username]`,{username:e.username}));return;case`recent`:{let t=Ct(e.text);t.mode===`tag`?Dt({kind:`tag`,tag:t.term,exclude:t.exclude}):t.mode===`tokens`?Dt({kind:`tokens`,min:t.min,max:t.max,label:t.label}):Dt({kind:`keyword`,text:e.text});return}}}function Ot(){Q(e=>e.delete(`query`))}function kt(e){if(e<=1)return;let t=1+Math.floor(Math.random()*e);Q(e=>e.set(`page`,String(t)),{resetPage:!1})}var At=p(`<span><!> <span class="truncate"> </span> <button type="button" class="rounded-full opacity-70 hover:opacity-100"><!></button></span>`),jt=p(`<button type="button" class="text-muted-foreground hover:text-foreground" aria-label="Clear"><!></button>
1`),Mt=p(`<kbd class="hidden rounded border border-foreground/10 bg-background/60 px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground sm:inline">/</kbd>`),Nt=p(`<p role="status" class="px-4 py-2 text-xs text-muted-foreground">Loading tagsâ¦</p>`),Pt=p(`<p role="status" class="px-4 py-2 text-xs text-muted-foreground">Tag suggestions are unavailable. You can still enter #tag.</p>`),Ft=p(`<p role="status" class="px-4 py-2 text-xs text-muted-foreground">Loading suggestionsâ¦</p>`),It=p(`<p role="status" class="px-4 py-2 text-xs text-muted-foreground">Some suggestions are unavailable. You can still search or enter a username.</p>`),Lt=p(`<p role="status" class="px-4 py-2 text-xs text-muted-foreground">No matching characters or creators.</p>`),Rt=p(`<span><!></span> <span class="min-w-0 flex-1 truncate">Search for <span class="font-semibold"> </span></span>`,1),zt=p(`<span class="ml-1.5 text-xs text-muted-foreground tabular-nums"> </span>`),Bt=p(`<span role="button" tabindex="-1" title="Exclude instead" class="shrink-0 rounded-full border border-foreground
1/10 p-1.5 text-muted-foreground hover:border-rose-500/40 hover:bg-rose-500/10 hover:text-rose-300"><!></span>`),Vt=p(`<span><!></span> <span class="min-w-0 flex-1 truncate"> <!></span> <!>`,1),Ht=p(`<span><!></span> <span class="min-w-0 flex-1"><span class="block truncate font-medium"> </span> <span class="block truncate text-xs text-muted-foreground"> </span></span>`,1),Ut=p(`<img alt="" class="h-10 w-7 shrink-0 rounded-md object-cover"/> <span class="min-w-0 flex-1"><span class="block truncate font-medium"> </span> <span class="block truncate text-xs text-muted-foreground"> </span></span>`,1),Wt=p(`<span><!></span> <span class="min-w-0 flex-1 truncate"> </span>`,1),Gt=p(`<button type="button" role="option"><!> <span class="hidden shrink-0 items-center gap-1 text-[11px] text-muted-foreground sm:flex"> <!></span></button>`),Kt=p(`<div class="px-2 pt-2"><p> </p> <!></div>`),qt=p(`<div role="listbox" tabindex="-1"><!> <!> <!> <div class="mt-1 hidden flex-wrap items-center gap-x-3 gap-y-1 border-t border-foreground/10 px-4 py-2 text-[11px] text-muted-foreground sm:flex"><span><kbd class="font-mono">#</kbd> tag</span> <span><kbd class="font-mono">-#</kbd> exclude</span> <span><kbd class="font-mono">@</kbd> creator</span> <span><kbd class="font-mono">>2000</kbd> tokens</span></div></div>`),Jt=p(`<div class="relative w-full"><div><!> <!> <input class="min-w-[8rem] flex-1 bg-transparent px-1 outline-hidden placeholder:text-muted-foreground" aria-label="Search the catalog" autocomplete="off" spellcheck="false"/> <!></div> <!></div>`);function Yt(o,p){c(p,!0);let h=F(p,`tagsLoading`,3,!1),y=F(p,`tagsUnavailable`,3,!1),b=F(p,`size`,3,`bar`),ee=F(p,`placeholder`,3,`Search, describe someone, #tag, @creator`),w=F(p,`autofocus`,3,!1),j=F(p,`showChips`,3,!0),N=F(p,`hotkey`,3,!0),P=F(p,`inline`,3,!1),I=n(null),z=n(``),B=n(ne(P())),V=n(null),H=n(null),ie=r(()=>wt(e(z)));te(()=>{let t=e(z);if(!e(B)||!e(ie)){L(H,null);return}return rt(e(ie),e=>{L(H,{...e,input:t},!0)})});let ae=r(()=>e(B)&&e(H)?.input===e(z)?e(H):null),W=r(()=>e(ae)?.data??nt());l(()=>{bt(),w()&&e(I)?.focus()});let G=r(()=>Et(e(z),{tags:p.tags,...e(W),recents:$})),K=r(()=>e(G).flatMap(e=>e.items)),q=r(()=>e(V)===null?0:e(K).findIndex(t=>Tt(t)===e(V))),oe=r(()=>_t(ge.url.searchParams)),se=r(()=>{let t=e(z).trimStart();return t.startsWith(`-#`)?{icon:U,cls:`text-rose-400`}:t.startsWith(`#`)?{icon:ze,cls:`text-emerald-400`}:t.startsWith(`@`)?{icon:Fe,cls:`text-sky-400`}:/^[<>]|^\d+\s*-/.test(t)?{icon:Ve,cls:`text-amber-400`}:{icon:fe,cls:`text-muted-foreground`}}),ce=r(()=>({hero:`min-h-14 rounded-2xl px-4 text-base gap-2`,bar:`min-h-11 rounded-xl px-3 text-sm gap-1.5`,compact:`min-h-9 rounded-full px-3 text-sm gap-1.5`})[b()]);function le(e){Dt(e),L(z,``),L(B,!1),L(V,null),p.onSelect?.()}function de(t){if(t.key===`ArrowDown`){t.preventDefault(),L(B,!0);let n=e(K)[Math.min(e(q)+1,Math.max(e(K).length-1,0))];n&&L(V,Tt(n),!0)}else if(t.key===`ArrowUp`){t.preventDefault();let n=e(K)[Math.max(e(q)-1,0)];n&&L(V,Tt(n),!0)}else if(t.key===`Enter`){t.preventDefault();let n=e(K)[e(q)];n&&le(n)}else if(t.key===`Escape`){if(P())return;L(B,!1),e(I)?.blur()}}function pe(t){if(!N()||t.key!==`/`||t.metaKey||t.ctrlKey||t.altKey)return;let n=t.target;(!n||n.tagName!==`INPUT`&&n.tagName!==`TEXTAREA`&&!n.isContentEditable)&&(t.preventDefault(),e(I)?.focus(),L(B,!0))}let he={keyword:`search`,tag:`filter`,creator:`jump to`,character:`open`,tokens:`filter`,recent:``};var ve=Jt();g(`keydown`,M,pe);var J=A(ve),ye=A(J);{let n=r(()=>e(se).cls),i=r(()=>b()===`hero`?`h-5 w-5`:`h-4 w-4`);t(ye,()=>e(se).icon,(t,r)=>{r(t,{get class(){return`shrink-0 ${e(n)??``} ${e(i)??``}`}})})}var be=_(ye,2),xe=n=>{var r=i(),o=D(r);f(o,17,()=>e(oe),e=>e.key,(n,r)=>{var i=At(),o=A(i);t(o,()=>e(r).icon,(e,t)=>{t(e,{class:`h-3 w-3 shrink-0`})});var c=_(o,2),l=T(c,!0),u=_(c,2),d=A(u);me(d,{class:`h-3 w-3`}),R(u),R(i),k(()=>{E(i,1,`inline-flex max-w-48 items-center gap-1 rounded-full border px-2 py-0.5 text-xs font-medium ${e(r).cls??``}`),s(l,e(r).label),C(u,`aria-label`,`Remove ${e(r).label}`)}),a(`click`,u,function(...t){e(r).remove?.apply(this,t)}),m(n,i)}),m(n,r)};u(be,e=>{j()&&e(xe)}
1);var Y=_(be,2);S(Y),v(Y,e=>L(I,e),()=>e(I));var Ce=_(Y,2),we=t=>{var n=jt(),r=A(n);me(r,{class:`h-4 w-4`}),R(n),a(`click`,n,()=>{L(z,``),L(V,null),e(I)?.focus()}),m(t,n)},Te=e=>{var t=Mt();m(e,t)};u(Ce,t=>{e(z)?t(we):N()&&t(Te,1)}),R(J);var Ee=_(J,2),De=t=>{var n=qt(),i=A(n),o=e=>{var t=Nt();m(e,t)},c=e=>{var t=Pt();m(e,t)};u(i,e=>{h()?e(o):y()&&e(c,1)});var l=_(i,2),p=e=>{var t=Ft();m(e,t)},v=e=>{var t=It();m(e,t)},b=e=>{var t=Lt();m(e,t)};u(l,t=>{e(ae)?.status===`loading`?t(p):e(ae)?.status===`unavailable`?t(v,1):e(ae)?.status===`ready`&&!e(W).characters.length&&!e(W).creators.length&&t(b,2)});var x=_(l,2);f(x,17,()=>e(G),e=>e.id,(t,n)=>{let i=r(()=>e(G).slice(0,e(G).indexOf(e(n))).reduce((e,t)=>e+t.items.length,0));var o=Kt(),c=A(o),l=T(c,!0),d=_(c,2);f(d,19,()=>e(n).items,e=>Tt(e),(t,n,o)=>{let c=r(()=>e(i)+e(o));var l=Gt(),d=A(l),f=t=>{var r=Rt(),i=D(r),a=A(i);fe(a,{class:`h-3.5 w-3.5`}),R(i);var o=_(i,2),c=_(A(o)),l=T(c,!0);R(o),k(()=>{E(i,1,`rounded-full p-2 ${Z.neutral??``}`),s(l,e(n).text)}),m(t,r)},p=t=>{var r=Vt(),i=D(r),o=A(i),c=e=>{U(e,{class:`h-3.5 w-3.5`})},l=e=>{ze(e,{class:`h-3.5 w-3.5`})};u(o,t=>{e(n).exclude?t(c):t(l,-1)}),R(i);var d=_(i,2),f=A(d),p=_(f),h=t=>{var r=zt(),i=T(r,!0);k(e=>s(i,e),[()=>_e(e(n).count)]),m(t,r)};u(p,t=>{e(n).count!==void 0&&t(h)}),R(d);var g=_(d,2),v=t=>{var r=Bt(),i=A(r);U(i,{class:`h-3 w-3`}),R(r),k(()=>C(r,`aria-label`,`Exclude ${e(n).tag}`)),a(`click`,r,t=>{t.stopPropagation(),le({kind:`tag`,tag:e(n).tag,exclude:!0})}),a(`keydown`,r,e=>e.stopPropagation()),m(t,r)};u(g,t=>{e(n).exclude||t(v)}),k(t=>{E(i,1,`rounded-full p-2 ${(e(n).exclude?Z.exclude:Z.include)??``}`),s(f,`${e(n).exclude?`Exclude`:``} 2 ${t??``}`)},[()=>Se(e(n).tag)]),m(t,r)},h=t=>{var r=Ht(),i=D(r);Fe(A(i),{class:`h-3.5 w-3.5`}),R(i);var a=_(i,2),o=A(a),c=T(o,!0),l=_(o,2),u=T(l,!0);R(a),k(()=>{E(i,1,`rounded-full p-2 ${Z.creator??``}`),s(c,e(n).unverified?`Go to @${e(n).username}`:e(n).displayName||e(n).username),s(u,e(n).unverified?`Unverified username`:`@${e(n).username}`)}),m(t,r)},v=t=>{var r=Ut(),i=D(r),a=_(i,2),o=A(a),c=T(o,!0),l=_(o,2),u=T(l);R(a),k(t=>{C(i,`src`,t),s(c,e(n).card.name),s(u,`by ${e(n).card.author??``}`)},[()=>je(e(n).card.path,Me.thumbnail)]),m(t,r)},y=t=>{var r=Wt(),i=D(r);Ve(A(i),{class:`h-3.5 w-3.5`}),R(i);var a=_(i,2),o=T(a);k(()=>{E(i,1,`rounded-full p-2 ${Z.length??``}`),s(o,`Cards with ${e(n).label??``}`)}),m(t,r)},b=t=>{var r=Wt(),i=D(r),a=A(i);ue(a,{class:`h-3.5 w-3.5`}),R(i);var o=_(i,2),c=T(o,!0);k(()=>{E(i,1,`rounded-full p-2 ${Z.neutral??``}`),s(c,e(n).text)}),m(t,r)};u(d,t=>{e(n).kind===`keyword`?t(f):e(n).kind===`tag`?t(p,1):e(n).kind===`creator`?t(h,2):e(n).kind===`character`?t(v,3):e(n).kind===`tokens`?t(y,4):t(b,-1)});var x=_(d,2),S=A(x),ee=_(S),w=e=>{Le(e,{class:`h-3 w-3`})},O=e=>{re(e,{class:`h-3 w-3`})};u(ee,t=>{e(c)===e(q)?t(w):(e(n).kind===`creator`||e(n).kind===`character`)&&t(O,1)}),R(x),R(l),k(()=>{C(l,`aria-selected`,e(c)===e(q)),E(l,1,`flex w-full items-center gap-3 rounded-xl px-2 py-2 text-left text-sm transition-colors ${e(c)===e(q)?`bg-muted/60`:`hover:bg-muted/40`}`),s(S,`${he[e(n).kind]??``} `)}),g(`mouseenter`,l,()=>L(V,Tt(e(n)),!0)),a(`click`,l,()=>le(e(n))),m(t,l)}),R(o),k(()=>{E(c,1,`text-[11px] font-medium uppercase tracking-wide text-muted-foreground px-2 pb-1`),s(l,e(n).label)}),m(t,o)}),d(2),R(n),k(()=>E(n,1,`max-h-[70vh] overflow-y-auto rounded-2xl border border-foreground
2/10 bg-popover ${P()?`mt-3 shadow-none`:`absolute left-0 right-0 top-full z-40 mt-2 shadow-2xl`}`)),a(`mousedown`,n,e=>e.preventDefault()),m(t,n)};u(Ee,t=>{e(B)&&(e(K).length||e(ie))&&t(De)}),R(ve),k(()=>{E(J,1,`flex flex-wrap items-center border border-foreground/10 bg-muted/30 shadow-xs transition-colors focus-within:border-foreground/30 focus-within:bg-muted/50 ${e(ce)??``} py-1.5`),C(Y,`placeholder`,ee()),C(Y,`aria-expanded`,e(B))}),a(`click`,Y,()=>L(B,!0)),g(`focus`,Y,()=>L(B,!0)),a(`input`,Y,()=>{L(B,!0),L(V,null)}),g(`blur`,Y,()=>{P()||L(B,!1)}),a(`keydown`,Y,de),x(Y,()=>e(z),e=>L(z,e)),m(o,ve),O()}N([`click`,`input`,`keydown`,`mousedown`]);var Xt=p(`<div class="relative"><!> <input placeholder="Filter tags" class="h-8 w-full rounded-lg border border-foreground/10 bg-background/40 pl-8 pr-2 text-xs outline-hidden focus:border-foreground/25"/></div>`),Zt=p(`<div class="flex flex-wrap gap-1.5"></div>`),Qt=p(`<p role="status" class="text-xs text-muted-foreground">Tags are unavailable. You can still enter #tag in search.</p>`),$t=p(`<span class="tabular-nums opacity-60"> </span>`),en=p(`<button type="button"><!> <!></button>`),tn=p(`<button type="button" class="text-xs text-muted-foreground hover:text-foreground"> </button>`),nn=p(`<div class="space-y-2"><!> <!> <div class="flex flex-wrap gap-1.5"></div> <!> <p class="text-[10px] text-muted-foreground">Click to include, again to exclude, again to clear.</p> <p class="text-[10px] text-muted-foreground">Counts cover your available catalog, before search filters.</p></div>`);function rn(t,i){c(i,!0);let o=F(i,`tagsLoading`,3,!1),l=F(i,`tagsUnavailable`,3,!1),p=F(i,`initial`,3,24),h=F(i,`showSearch`,3,!0),g=n(``),v=n(ne(p())),y=e=>{let t=e.toLowerCase();return i.included.some(e=>e.toLowerCase()===t)?`in`:i.excluded.some(e=>e.toLowerCase()===t)?`out`:null};function b(e){let t=y(e);t===null?at(e):t===`in`?st(e):ct(e)}let ee=r(()=>gt(i.tags,i.included,i.excluded)),D=r(()=>ht(e(ee),e(g))),j=r(()=>e(D).slice(0,e(v))),M=r(()=>Math.max(e(D).length-e(v),0));var N=nn(),P=A(N),I=t=>{var n=Xt(),r=A(n);fe(r,{class:`absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground`});var i=_(r,2);S(i),R(n),x(i,()=>e(g),e=>L(g,e)),m(t,n)};u(P,e=>{h()&&e(I)});var te=_(P,2),z=e=>{var t=Zt();f(t,20,()=>Array(12).keys(),e=>e,(e,t)=>{Ne(e,{class:`h-6 w-16 rounded-full`})}),R(t),m(e,t)},B=e=>{var t=Qt();m(e,t)};u(te,e=>{o()?e(z):l()&&e(B,1)});var V=_(te,2);f(V,21,()=>e(j),e=>e.value,(t,n)=>{let i=r(()=>y(e(n).value));var o=en(),c=A(o),l=e=>{G(e,{class:`h-3 w-3`})},d=e=>{U(e,{class:`h-3 w-3`})};u(c,t=>{e(i)===`in`?t(l):e(i)===`out`&&t(d,1)});var f=_(c),p=_(f),h=t=>{var r=$t(),i=T(r,!0);k(e=>s(i,e),[()=>_e(e(n).count)]),m(t,r)};u(p,t=>{e(n).count!==void 0&&t(h)}),R(o),k(t=>{E(o,1,w(e(i)===`in`?be:e(i)===`out`?Ce:ke)),C(o,`aria-pressed`,e(i)!==null),s(f,` ${t??``} `)},[()=>Se(e(n).value)]),a(`click`,o,()=>b(e(n).value)),m(t,o)}),R(V);var H=_(V,2),re=t=>{var n=tn(),r=T(n);k(e=>s(r,`+${e??``} more`),[()=>Math.min(e(M),24)]),a(`click`,n,()=>L(v,e(v)+24)),m(t,n)};u(H,t=>{e(M)>0&&t(re)}),d(4),R(N),m(t,N),O()}N([`click`]);var an=p(`<button type="button"> <span class="opacity-60"> </span></button>`),on=p(`<button type="button" class="shrink-0 hover:text-foreground">Clear</button>`),sn=p(`<div class="flex items-center gap-2 text-xs text-muted-foreground"><input type="number" min="0" placeholder="Min" aria-label="Minimum tokens"/> <span>to</span> <input type="number" min="0" placeholder="Max" aria-label="Maximum tokens"/> <!></div>`),cn=p(`<div class="space-y-2"><div class="flex flex-wrap gap-1.5"></div> <!></div>`);function ln(t,i){c(i,!0);let o=F(i,`showInputs`,3,!0),l=n(0),d=n(0);te(()=>{L(l,i.min,!0),L(d,i.max,!0)});let p=r(()=>xe(i.min,i.max)),h=`h-8 w-full rounded-lg border border-foreground
2/10 bg-background/40 px-2 text-xs tabular-nums outline-hidden focus:border-foreground/25`;var g=cn(),v=A(g);f(v,21,()=>we,e=>e.key,(t,n)=>{var r=an(),i=A(r),o=_(i),c=T(o,!0);R(r),k(()=>{E(r,1,w(e(p)===e(n).key?be:ke)),C(r,`title`,`${e(n).hint} tokens`),s(i,`${e(n).label??``} `),s(c,e(n).hint)}),a(`click`,r,()=>e(p)===e(n).key?mt():pt(e(n).key)),m(t,r)}),R(v);var y=_(v,2),b=t=>{var n=sn(),r=A(n);S(r),E(r,1,w(h));var o=_(r,4);S(o),E(o,1,w(h));var s=_(o,2),c=e=>{var t=on();a(`click`,t,function(...e){mt?.apply(this,e)}),m(e,t)};u(s,e=>{(i.min>0||i.max>0)&&e(c)}),R(n),a(`change`,r,()=>lt(e(l))),x(r,()=>e(l),e=>L(l,e)),a(`change`,o,()=>ut(e(d))),x(o,()=>e(d),e=>L(d,e)),m(t,n)};u(y,e=>{o()&&e(b)}),R(g),m(t,g),O()}N([`click`,`change`]);var un=p(`<span class="block text-xs text-muted-foreground">World entries that trigger in chat.</span>`),dn=p(`<span class="block text-xs text-muted-foreground">Created by the uploader or AI, not copied or adapted from another card maker.</span>`),fn=p(`<div class="space-y-2"><label><span class="flex items-center gap-2.5 text-sm"><span><!></span> <span><span class="block font-medium">Lorebook</span> <!></span></span> <!></label> <label><span class="flex items-center gap-2.5 text-sm"><span><!></span> <span><span class="block font-medium">Original content</span> <!></span></span> <!></label></div>`);function pn(t,n){c(n,!0);let i=F(n,`dense`,3,!1),a=r(()=>i()?`flex items-center justify-between gap-3 rounded-xl px-2 py-1.5 hover:bg-muted/40 cursor-pointer`:`flex items-center justify-between gap-4 rounded-2xl border border-foreground
2/10 bg-muted/30 px-4 py-3 hover:bg-muted/60 cursor-pointer transition-colors`);var o=fn(),s=A(o),l=A(s),d=A(l),f=A(d);W(f,{class:`h-3.5 w-3.5`}),R(d);var p=_(d,2),h=_(A(p),2),g=e=>{var t=un();m(e,t)};u(h,e=>{i()||e(g)}),R(p),R(l);var v=_(l,2);J(v,{get checked(){return n.hasLorebook},onCheckedChange:e=>dt(e===!0)}),R(s);var y=_(s,2),b=A(y),x=A(b),S=A(x);le(S,{class:`h-3.5 w-3.5`}),R(x);var C=_(x,2),ee=_(A(C),2),T=e=>{var t=dn();m(e,t)};u(ee,e=>{i()||e(T)}),R(C),R(b);var D=_(b,2);J(D,{get checked(){return n.isOC},onCheckedChange:e=>ft(e===!0)}),R(y),R(o),k(()=>{E(s,1,w(e(a))),E(d,1,`rounded-full p-1.5 ${Z.feature??``}`),E(y,1,w(e(a))),E(x,1,`rounded-full p-1.5 ${Z.feature??``}`)}),m(t,o),O()}var mn=p(`<button type="button"> <!></button>`),hn=p(`<div class="space-y-0.5"></div>`),gn=p(`<!> <span> </span>`,1);function _n(t,n){c(n,!0);let o=F(n,`layout`,3,`select`),l=r(()=>Y[n.current]??Y.best),d=Te.map(e=>({value:e,label:Ae[e]}));function p(e){Q(t=>{e===Y.best?t.delete(`sort`):t.set(`sort`,e)})}var h=i(),g=D(h),v=t=>{var n=hn();f(n,20,()=>Te,e=>e,(t,n)=>{var r=mn(),i=A(r),o=_(i),c=e=>{G(e,{class:`h-3.5 w-3.5`})};u(o,t=>{e(l)===n&&t(c)}),R(r),k(()=>{E(r,1,`flex w-full items-center justify-between rounded-xl px-3 py-1.5 text-left text-sm transition-colors ${e(l)===n?`bg-foreground text-background`:`text-muted-foreground hover:bg-muted/60 hover:text-foreground`}`),s(i,`${Ae[n]??``} `)}),a(`click`,r,()=>p(n)),m(t,r)}),R(n),m(t,n)},y=t=>{se(t,{get value(){return e(l)},get items(){return d},onValueChange:p,class:`h-8 w-auto text-xs`,"aria-label":`Sort`,children:(t,n)=>{var r=gn(),i=D(r);ie(i,{class:`mr-1.5 h-3.5 w-3.5 shrink-0 text-muted-foreground`});var a=_(i,2),o=T(a,!0);k(()=>s(o,Ae[e(l)])),m(t,r)},$$slots:{default:!0}})};u(g,e=>{o()===`list`?e(v):e(y,-1)}),m(t,h),O()}N([`click`]);var vn=p(`<meta name="description" content="Explore thousands of AI character cards for roleplay. Search, filter, and discover unique characters for your AI chatbot experiences. Free to browse and download."/> <meta name="keywords" content="AI characters, character cards, AI roleplay, character catalog, chatbot characters, AI character search"/> <meta name="author" content="Sal"/> <link rel="canonical"/> <meta property="og:title" content="Character Catalog - Browse AI Character Cards | Character Tavern"/> <meta property="og:description" content="Explore thousands of AI character cards for roleplay. Search, filter, and discover unique characters for your AI chatbot experiences. Free to browse and download."/> <meta property="og:type" content="website"/> <meta property="og:url"/> <meta property="og:site_name" content="Character Tavern"/> <meta property="og:image" content="https://character-tavern.com/og-image.png"/> <meta property="og:image:alt" content="Character Tavern Logo"/> <meta name="twitter:card" content="summary_large_image"/> <meta name="twitter:title" content="Character Catalog - Browse AI Character Cards | Character Tavern"/> <meta name="twitter:description" content="Explore thousands of AI character cards for roleplay. Search, filter, and discover unique characters for your AI chatbot experiences. Free to browse and download."/> <meta name="twitter:image" content="https://character-tavern.com/og-image.png"/> <meta name="twitter:image:alt" content="Character Tavern Logo"/> <meta name="robots"/> <meta name="language" content="English"/>`,1),yn=p(`<div class="hidden lg:block"><!></div> <button type="button" class="flex w-full items-center gap-2 border border-foreground
2/10 bg-muted/30 px-4 text-left text-muted-foreground shadow-xs lg:hidden min-h-12 rounded-2xl text-base"><!> <span class="truncate"> </span></button>`,1),bn=p(`<button type="button" class="inline-flex items-center gap-1 hover:opacity-80" title="Flip include / exclude"><!><span class="max-w-40 truncate"> </span></button>`),xn=p(`<!><span class="max-w-40 truncate"> </span>`,1),Sn=p(`<span><!> <button type="button" class="rounded-full p-1 hover:bg-black/20"><!></button></span>`),Cn=p(`<button type="button" class="shrink-0 px-2 text-xs text-muted-foreground hover:text-foreground">Clear all</button>`),wn=p(`<div class="-mx-1 -mb-3 flex items-center gap-1.5 overflow-x-auto px-1 pb-1 [scrollbar-width:none]"><!> <!></div>`),Tn=p(`<button><!> Tags <!></button>`),En=p(`<button><!> <!></button>`),Dn=p(`<span class="rounded-full bg-background/30 px-1.5 text-[10px]"> </span>`),On=p(`<button type="button"> </button>`),kn=p(`<div><!> <p class="font-medium">Nothing matches</p> <!></div>`),An=p(`<div role="grid" tabindex="-1" class="grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-5 lg:gap-4"></div> <!>`,1),jn=p(`<p class="flex items-center gap-1.5 pt-2 text-xs text-muted-foreground"><!> <span>Some cards are hidden by your content preferences. <a class="underline underline-offset-2 hover:text-foreground">Change them in account settings</a>.</span></p>`),Mn=p(`<div class="[&_[role=option]]:py-3"><!></div> <p class="pt-2 text-[11px] text-muted-foreground">Tap a row. The circle on a tag row excludes it.</p>`,1),Nn=p(`<div class="space-y-6"><div class="space-y-2"><p>Sort</p> <!></div> <div class="space-y-2"><p>Tags</p> <!></div> <div class="space-y-2"><p>Length</p> <!></div> <div class="space-y-2"><p>Features</p> <!></div></div>`),Pn=p(`<div class="relative"><div class="pointer-events-none absolute inset-x-0 top-0 -z-10 h-[360px] studio-dots-top" aria-hidden="true"></div> <div class="container max-w-6xl space-y-5 py-6 lg:py-10"><div class="space-y-3"><!> <!></div> <div class="flex flex-wrap items-center gap-2"><div class="hidden items-center gap-2 lg:flex"><!> <!> <!></div> <button type="button"><!> Filters<!></button> <div class="ml-auto flex items-center gap-2"><div class="hidden lg:block"><!></div> <button type="button" title="Jump to a random page"><!> <span class="hidden sm:inline">Surprise me</span></button></div></div> <p class="flex items-center gap-1.5 text-xs text-muted-foreground"><!> <span><span class="text-foreground/80"> </span> </span></p> <!> <!></div></div> <!> <!>`,1);function Fn(i,l){c(l,!0);let p=t=>{var n=yn(),r=D(n);Yt(A(r),{get tags(){return e(j)},get tagsLoading(){return e(M)},get tagsUnavailable(){return e(N)},size:`hero`,showChips:!1,placeholder:`Search, describe someone, #tag, @creator`}),R(r);var i=_(r,2),o=A(i);fe(o,{class:`h-5 w-5 shrink-0`});var c=_(o,2),u=T(c,!0);R(i),k(()=>s(u,l.data.query||`Search, #tag, or @creator`)),a(`click`,i,()=>L(g,!0)),m(t,n)},g=n(!1),v=n(!1),x=r(()=>l.data.tagCatalogue),S=n(null);te(()=>{let t=!1;return L(S,null),e(x).then(e=>{t||L(S,e)},()=>{t||L(S,{tags:[],unavailable:!0})}),()=>{t=!0}});let j=r(()=>e(S)?.tags??[]),M=r(()=>e(S)===null),N=r(()=>e(S)?.unavailable??!1),P=r(()=>_t(ge.url.searchParams)),F=r(()=>l.data.tags.length+l.data.exclude_tags.length>0),ne=r(()=>Oe(l.data.minimum_tokens,l.data.maximum_tokens)||null),B=r(()=>[l.data.hasLorebook?`Lorebook`:null,l.data.isOC?`Original`:null].filter(Boolean).join(`, `)||null);function V(e){if(![`ArrowLeft`,`ArrowRight`,`ArrowUp`,`ArrowDown`].includes(e.key))return;let t=e.currentTarget,n=[...t.querySelectorAll(`:scope > a`)],r=n.indexOf(document.activeElement);if(r<0)return;e.preventDefault();let i=Math.max(1,Math.round(t.clientWidth/n[0].offsetWidth)),a=e.key===`ArrowLeft`?r-1:e.key===`ArrowRight`?r+1:e.key===`ArrowUp`?r-i:r+i;n[Math.max(0,Math.min(n.length-1,a))]?.focus()}
2let re=`border-foreground/10 bg-muted/30 text-muted-foreground hover:bg-muted/60 hover:text-foreground`,U=`border-foreground/20 bg-foreground/90 text-background`;var W=Pn();b(`zb86et`,e=>{var t=vn(),n=_(D(t),6),r=_(n,8),i=_(r,18);d(2),k(()=>{C(n,`href`,l.data.seo.canonicalUrl),C(r,`content`,l.data.seo.canonicalUrl),C(i,`content`,l.data.seo.robots)}),y(()=>{ee.title=`Character Catalog - Browse AI Character Cards | Character Tavern`}),m(e,t)});var G=D(W),q=_(A(G),2),oe=A(q),se=A(oe);p(se);var le=_(se,2),ue=n=>{var r=wn(),i=A(r);f(i,17,()=>e(P),e=>e.key,(n,r)=>{var i=Sn(),o=A(i),c=n=>{var i=bn(),o=A(i);t(o,()=>e(r).icon,(e,t)=>{t(e,{class:`h-3 w-3`})});var c=_(o),l=T(c,!0);R(i),k(()=>s(l,e(r).label)),a(`click`,i,function(...t){e(r).flip?.apply(this,t)}),m(n,i)},l=n=>{var i=xn(),a=D(i);t(a,()=>e(r).icon,(e,t)=>{t(e,{class:`h-3 w-3`})});var o=_(a),c=T(o,!0);k(()=>s(c,e(r).label)),m(n,i)};u(o,t=>{e(r).flip?t(c):t(l,-1)});var d=_(o,2),f=A(d);me(f,{class:`h-3 w-3`}),R(d),R(i),k(()=>{E(i,1,`inline-flex h-8 shrink-0 items-center gap-1 rounded-full border pl-2.5 pr-1 text-xs font-medium ${e(r).cls??``}`),C(d,`aria-label`,`Remove ${e(r).label}`)}),a(`click`,d,function(...t){e(r).remove?.apply(this,t)}),m(n,i)});var o=_(i,2),c=e=>{var t=Cn();a(`click`,t,function(...e){vt?.apply(this,e)}),m(e,t)};u(o,t=>{e(P).length>1&&t(c)}),R(r),m(n,r)};u(le,t=>{e(P).length&&t(ue)}),R(oe);var _e=_(oe,2),J=A(_e),ye=A(J);ve(ye,{align:`start`,class:`w-[22rem]`,trigger:(t,n=h)=>{var r=Tn();I(r,()=>({...n(),class:`inline-flex h-8 shrink-0 items-center gap-1.5 rounded-full border px-3 text-xs transition-colors ${e(F)?U:re}`}));var i=A(r);ze(i,{class:`h-3.5 w-3.5`});var a=_(i,2);K(a,{class:`h-3 w-3 opacity-60`}),R(r),m(t,r)},children:(t,n)=>{rn(t,{get tags(){return e(j)},get tagsLoading(){return e(M)},get tagsUnavailable(){return e(N)},get included(){return l.data.tags},get excluded(){return l.data.exclude_tags},initial:20})},$$slots:{trigger:!0,default:!0}});var xe=_(ye,2);ve(xe,{align:`start`,class:`w-[22rem]`,trigger:(t,n=h)=>{var r=En();I(r,()=>({...n(),class:`inline-flex h-8 shrink-0 items-center gap-1.5 rounded-full border px-3 text-xs transition-colors ${e(ne)?U:re}`}));var i=A(r);Ve(i,{class:`h-3.5 w-3.5`});var a=_(i),o=_(a);K(o,{class:`h-3 w-3 opacity-60`}),R(r),k(()=>s(a,` ${e(ne)??`Length`??``} `)),m(t,r)},children:(e,t)=>{ln(e,{get min(){return l.data.minimum_tokens},get max(){return l.data.maximum_tokens}})},$$slots:{trigger:!0,default:!0}});var Se=_(xe,2);ve(Se,{align:`start`,class:`w-72`,trigger:(t,n=h)=>{var r=En();I(r,()=>({...n(),class:`inline-flex h-8 shrink-0 items-center gap-1.5 rounded-full border px-3 text-xs transition-colors ${e(B)?U:re}`}));var i=A(r);Ge(i,{class:`h-3.5 w-3.5`});var a=_(i),o=_(a);K(o,{class:`h-3 w-3 opacity-60`}),R(r),k(()=>s(a,` ${e(B)??`Features`??``} `)),m(t,r)},children:(e,t)=>{pn(e,{get hasLorebook(){return l.data.hasLorebook},get isOC(){return l.data.isOC},dense:!0})},$$slots:{trigger:!0,default:!0}}),R(J);var Y=_(J,2),Ce=A(Y);pe(Ce,{class:`h-3.5 w-3.5`});var we=_(Ce,2),Te=t=>{var n=Dn(),r=T(n,!0);k(()=>s(r,e(P).length)),m(t,n)};u(we,t=>{e(P).length&&t(Te)}),R(Y);var ke=_(Y,2),X=A(ke);_n(A(X),{get current(){return l.data.sort}}),R(X);var Z=_(X,2);E(Z,1,`inline-flex h-8 shrink-0 items-center gap-1.5 rounded-full border px-3 text-xs transition-colors border-foreground
2/10 bg-muted/30 text-muted-foreground hover:bg-muted/60 hover:text-foreground`),Ue(A(Z),{class:`h-3.5 w-3.5`}),d(2),R(Z),R(ke),R(_e);var je=_(_e,2),Me=A(je);ie(Me,{class:`h-3.5 w-3.5 shrink-0`,"aria-hidden":`true`});var Ne=_(Me,2),Pe=A(Ne),Fe=T(Pe),Ie=_(Pe);R(Ne),R(je);var Le=_(je,2),Re=t=>{var n=kn(),i=A(n);de(i,{class:`h-5 w-5 text-muted-foreground`});var o=_(i,4),c=t=>{let n=r(()=>e(P)[e(P).length-1]);var i=On(),o=T(i);k(()=>{E(i,1,w(be)),s(o,`Drop "${e(n).label??``}" and retry`)}),a(`click`,i,function(...t){e(n).remove?.apply(this,t)}),m(t,i)};u(o,t=>{e(P).length&&t(c)}),R(n),k(()=>E(n,1,`rounded-2xl border border-foreground/10 bg-muted/30 flex flex-col items-center gap-3 px-6 py-14 text-center`)),m(t,n)},Be=t=>{var n=An(),i=D(n);f(i,23,()=>l.data.searchResults.hits,e=>e.id,(t,n,i)=>{{let a=r(()=>e(i)<5?`eager`:`lazy`);ae(t,{get name(){return e(n).name},get tagline(){return e(n).tagline},get path(){return e(n).path},target:`character`,get contentWarnings(){return e(n).contentWarnings},get author(){return e(n).author},get permanentTokens(){return e(n).permanentTokens},get loading(){return e(a)}})}}),R(i),tt(_(i,2),{get totalHits(){return l.data.searchResults.totalHits},get perPage(){return l.data.searchResults.hitsPerPage},get currentPage(){return l.data.page}}),a(`keydown`,i,V),m(t,n)};u(Le,e=>{l.data.searchResults.hits.length===0?e(Re):e(Be,-1)});var He=_(Le,2),We=e=>{var t=jn(),n=A(t);ce(n,{class:`h-3.5 w-3.5 shrink-0`,"aria-hidden":`true`});var r=_(n,2),i=_(A(r));d(),R(r),R(t),k(e=>C(i,`href`,`${e??``}#content-preferences`),[()=>z(`account/settings`)]),m(e,t)};u(He,e=>{l.data.searchResults.hiddenByPrefs&&e(We)}),R(q),R(G);var Ke=_(G,2);H(Ke,{title:`Search`,class:`sm:max-w-none`,get open(){return e(g)},set open(e){L(g,e,!0)},children:(t,n)=>{var r=Mn(),i=D(r);Yt(A(i),{get tags(){return e(j)},get tagsLoading(){return e(M)},get tagsUnavailable(){return e(N)},size:`bar`,autofocus:!0,hotkey:!1,inline:!0,onSelect:()=>L(g,!1)}),R(i),d(2),m(t,r)},$$slots:{default:!0}});var qe=_(Ke,2);H(qe,{title:`Filters`,get open(){return e(v)},set open(e){L(v,e,!0)},footer:e=>{he(e,{onclick:()=>L(v,!1),children:(e,t)=>{d();var n=o(`Show results`);m(e,n)},$$slots:{default:!0}})},children:(t,n)=>{var r=Nn(),i=A(r),a=A(i);_n(_(a,2),{get current(){return l.data.sort},layout:`list`}),R(i);var o=_(i,2),s=A(o);rn(_(s,2),{get tags(){return e(j)},get tagsLoading(){return e(M)},get tagsUnavailable(){return e(N)},get included(){return l.data.tags},get excluded(){return l.data.exclude_tags},initial:24}),R(o);var c=_(o,2),u=A(c);ln(_(u,2),{get min(){return l.data.minimum_tokens},get max(){return l.data.maximum_tokens}}),R(c);var d=_(c,2),f=A(d);pn(_(f,2),{get hasLorebook(){return l.data.hasLorebook},get isOC(){return l.data.isOC}}),R(d),R(r),k(()=>{E(a,1,w(Ee)),E(s,1,w(Ee)),E(u,1,w(Ee)),E(f,1,w(Ee))}),m(t,r)},$$slots:{footer:!0,default:!0}}),k(()=>{E(Y,1,`inline-flex h-8 shrink-0 items-center gap-1.5 rounded-full border px-3 text-xs transition-colors ${e(F)||e(ne)||e(B)?U:re} lg:hidden`),s(Fe,`${Ae[l.data.sort]??``}.`),s(Ie,` ${De[l.data.sort]??``}`)}),a(`click`,Y,()=>L(v,!0)),a(`click`,Z,()=>kt(l.data.searchResults.totalPages)),m(i,W),O()}N([`click`,`keydown`]);export{Fn as component};
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.