From 34b7cc6050447e9edd7025a91e768b326978aa71 Mon Sep 17 00:00:00 2001 From: chrmc40 Date: Mon, 29 Jun 2026 09:59:00 -0700 Subject: [PATCH] Remove illegal/unsafe content + fix character round-trip recognition Safety: delete 19 curated tag-builder items that should not exist at all (non-consent, bestiality, guro, and minor-sexualization tags across appearance/expression/nsfw_action/cast items), per a content-safety audit. Also: add /characters/identity-index so the picker recognizes all 1,486 normalized characters in existing prompts (was capped at 200). --- core/tag_builder.py | 18 + data/tag-builder/tag-builder.db | Bin 46800896 -> 46800896 bytes js/lib/svelte/assets/promptchain-svelte.css | 17 + js/lib/svelte/promptchain-tag-builder2.js | 2092 +++++++++-------- .../tag-builder2/TagBuilder2.svelte | 98 +- 5 files changed, 1244 insertions(+), 981 deletions(-) diff --git a/core/tag_builder.py b/core/tag_builder.py index 7023ddd..2d7faa0 100644 --- a/core/tag_builder.py +++ b/core/tag_builder.py @@ -3528,6 +3528,24 @@ async def _api_character_counts(request): return web.json_response({"counts": counts}) +@routes.get("/promptchain/tag-builder/characters/identity-index") +async def _api_character_identity_index(request): + # Full normalized-character identity set for TagBuilder2's round-trip + # parser, which must recognize EVERY normalized character in existing + # prompt text. The public /characters route caps per_page at 200, so an + # onMount preload of `per_page=1000` silently saw only the first 200 of + # the ~1,486 normalized rows. Project just the five fields the rebind path + # reads (parseNatlangPrompt: tag/display/series/base_tags/base_natlang) so + # the payload stays small — no wiki_text or unused columns. Unpaginated by + # design. Registered above /characters/{tag} so it isn't matched as a tag. + db = get_db() + rows = db.execute( + "SELECT tag, display, series, base_tags, base_natlang " + "FROM characters WHERE natlang_status = 'normalized'" + ).fetchall() + return web.json_response({"characters": [dict(r) for r in rows]}) + + @routes.get("/promptchain/tag-builder/characters/{tag}") async def _api_character_detail(request): tag = request.match_info["tag"] diff --git a/data/tag-builder/tag-builder.db b/data/tag-builder/tag-builder.db index e40b438d048d6a3d8f1ac27b9bdf17f25432f588..63f9fae40e351a6a3d5629a2ad0981e325780ec6 100644 GIT binary patch delta 5003 zcmZYCcXSlx8prW@XJP$75 zVwh?&)ncm6REH^+DUK`NO!b%&m=c-lGc{mp$kd3bF;fy#6Q*RQrcBM4QkWiQ zN@Z%!)PkucQ!A#{Ol_FjGPPrB&(wjbBU2hvC#H0!N0>S@WiWMN>dMrOsXNo7Og)%- zGWBA5jHx$MAEv%c{h0bQWin+k4PY9`G>B<1(-5YiOv9LlGmT&x$ux>-G*dRy7^cUW zNg!Zej>8q6T)SNETw3^;D#%(^I9Iu?gp4CEw&UTL4S zzkK}ivTZ4pcm*4Rgkdv#`^N}d&?FWx+|x=|G~0Eg)5r3YR;iD z>40=lIwX}#hovJ@g>+PUOL|*6RzByDo&SO=EpTR3_AMWjQCVA+Pwi6qfnPV%3)Iz& z+E!NdA!QT{>R)*SFHmPym&{7(xb%+nuJoRCLOLnEFI7ol=>zFQ>6G-5^s#hWIwPHx z&PnH`3(`gD6X}xlsq{DLGwE~b3+YSgvhq0^CV+|H2`~vv22;RPFbzBjrh^&aDUbtZ zf>~fTm;;^$bHO|?A1naRfQ4WYcor-MOTbdF3@isLz)Ha2Ij{;m4_*MPK`vMWUIZ_J zJdh98f|tQMupVpx8$khh1#AMZf_VnmkfQA*4lE` z+o{F`ChGC(lFC&Bl&O{4IkK;bZUlR4J@U3B?o{@c#3D5*rBPF@u)g`GnH~H!xIK^` zXyy<3d;67dtFN!m>7DOw=D8|ZFO4ixJ_o)aEAy^p7b*K%c1Xo08mFq?NemkvBJu*YjH@eS4PB4Ez;WiTu2=^eDkz8>-2?PD#p%T z6;ihxy1%xyAUCA88vY?#ycNGDq}t=PYZpvCaJ-SdM7Ft`f1i3rGw+$#&5PzcR`i*W zYTycP2(AoHvod6(rZr0JY;6`-TS;d_D$DOY{J&w%m0h-OWZCV`g;Z_baMshRS%WWx z)G5PVQ}f#mE{4=kx)B(p#n`c*hExZqW2n~H8un#K{biW@wHo%w%ON%V!DA`XI`maY z^)d8n+E&YXC8V0gFAGjq6M|X6?!nYxbl|tZcY!YhX9Jai1A#4pmDWHxrigr!xppZ-3ik{?`El)e3jkQ$qyk}PLrv1(?u5*ypY#f}cIyQlUnSFKoO8o1Ac?LM`N)uE!)hzVLlEn72-%(UQ#!I6R6fja(5f0pk<-*jKl zyTe=GbHS72{#_k)zvhmQIAXP~ELMrS-oqX&lgJ1ouw5HsPkz5xrMYn4zIjC-6)U^w zqg`sGUeh?CB{*6+BYuo1HmXN-aLsZxkMG9ZL}Sh&qn)PpWaSO z))s2!MzgIIq}{5&Q=O1eu#E1<*$ZXITgnLjpk>%;<94euKVGp{-rX6ym3?>KmeZ>@Ao7qRz@r99N-QD&4qg4;^2j zHpqK^Tia;go=~A``^7W1>Oe7fDJ0aaqtd!7rX~ffRo^TPzA!^1Mnd@1wH~FgVW#) zI1A2!^WXxw2tEOqz^CAE;4|Bf;7+xq=QF5XOIE9fUck$=nftQ zJwQ*;3p@sTgFc`y=m+|POppZzfPr8T7z~Dhp@Ag9YFjun;T)&w|BZ30Ml2 zf#qNYSP2+B2UdaS!3$tD$OUV_i{K^Qrr11vTldL24X^|31VtbOioq_h85*!EbfOo-r-~>1c-q-CRQ>ye5SA^%L_Jw*+vx4=C^+DFCoGN{| zeNYT2yK-ig-qdZF-^()L_JS%sdT50F?BAuQYgY4|ZK|%__)L}VR=##deZzG8?)cVm z-pV*zrPuZJ*3kQijn-OS1NyuhKW;Sy0{1yild@ z&ozRv+GTloh4o%`rZ`V2haE*h{dr~g8z0s`_TuPByY7szel?+n;nn`slQr`f^QL)4 z)^cIddg-$(k;9w2H-e zt4bVDEm{A+VaLo0>p#mCU(f*t5{ zI)>w_9KCN*SZ`qj8)-rNnoKj~c{@b&Tgi*VdQ&5quhp_f$h4hdhGfyWUZ&L_EWUhJ zi51p|7!i%M6P9ypSbx%*Exu$qwuSX|4#!}JJz(EFWh;B|_OO1=Vfa(DXgj$mtUH{z OKhbuJlCXYy_P+r~k^9>K delta 4809 zcmXZgd0bTG9>?){&YWR}8D@^4pa{mMi70`YTV!Ht?tuG>{@l})(A+g;@fRf)MQt9kF$u3D09UhCHVeeM47c|XrNuk$){=DcRkGq1_33q<5e zrBUkoE785x^?YJdOd6A&NoR5}1u;39Tui}CZYB>?2$Pq|$7C=yVG3mmV`|FOj47Nc zf~h%E3#Le>mP}Dh(M+wF9$<=Lie-vpif2k-YR%M!=|QHpOo>eGn39;de%IsVh@ArtVCSGNmy+#?*u9ai*S3=}f(to?ze9Yh-om>5T*>KOr|WRp-jV=hBJ*|8p$+@X*AOqrm;-pn8q_rV9I8i$TW#b z?$2bVDNIwDrZG)tn!z-a=_#gJOtYDuW}3q^mnnzo8KzvOc}(+}o@H9Vw2)~L(_*G2 zOiP)TF)e3W!So!{N~Tpzc})3C1x$rZtC^VTd8Q(!7nojTTEkS#w3g{5rk9yYm`a&m zVOqzuo@oQqMy5?nex_HMUSoRwAeC)hrQ2+_uWKB6WdoF^P4Z{tmn|~m(~qdx{?vl9 z6y0Z!(Tb)Plu2($o254;Q`#bJmEMxdrMIPR(srpr3P_dG4r!-UCGC=SOM9ff(mrW_ z&D4VGt;wo|-?6tk#S@h4IBSp7{F+_)v!SVQO%A(Sk$O z(gEq9bV#a^4ogR*TIs0tj&w{qUbEnkRr;dZ?RTWt4OTsBveN5Xs+u{y>gq$}#C~-( zJ<`kyJEU~~@Qk_}dZfLxR@5uAPC6l-l-`xzlTJyer882!)F8bteIT8cK9oL^&PnH` zkEILJMd_0CiS#$=vh=C+cj+_fbLk7|OX(}=Yw3#gjdWG|hxAYBU(z+{y7X;Lugrhf zHO2+svc+gFn{mQeZ)AEu^Un9$Jilu$cSG>D;2y3<*E;_L={FK<)}8jJDSvEMaAA$> zi5qKz+~W&<&a^ghaebA4$bl2hi>mwIkZwx1r0=BfrQ1@Y^n-Lq`ce8x`dRu#`c=9s z{YSbd{U-e`{a5-!`m?yYzbcV{2JAow4iE&Kzy*SV8+bqn@B$w&KobxO!a!5d41|LS z&>XY?k)S1r0@0uqcmTwJSP%!|K>}zE+JFZ^TaXCafh5o#bO6cVA&>%6K}YZ~=mZ`C zok17S6?6mL!J{AzJO+Az$3ah!4tjwnKyT0o^aW3Xe&GIn9)Q_EFbE6=LqG<|1X*Ax z7zT!e5nv=31xAB0U@RC1#)AnU8%zX~0D;M13YZF}f$3ldm@Dya`OO1#AUxfpYM+va0)UQyG_a-#}Yu z(-FH}P4vE|P1jnf%c@unRfd%-``T%G??Q*OWOMv>Wo?eHP&1PsO0ku-Hg+4?zF&Oh zz7gK5-coOekU+@55arq88SHVmFS?hwI|SdA$HTr%vC3qgt;sXd zx;LysB?akS@>85v;@AqcQ|T%B?VQ%-aTUsA*K_h?oh8?@E0lFDJD{TCbWQRxlG31&XFNqoby5=&EvAQ-Fj>AN~P?0{#2NaW`okL793C;ly1n=-rW0qK%LN| z?A0l0(xq zN32;YlQo*Fx!LmLfXXtLh{tdTx?TvVNKFs3x7ExMmjddn?y*N|R_jj!>PJlvx2Gs8 z>eGPg?y$=mX^#Ffp#IdG+1qQ@xUT|g%>Uolp|1mK5Z2gjrsGOLbx@|6Dr1bAXJ*LQ z%lnJ_iu;t?bQij(xiigIWnaLhHC2u3f;wzweG^dc>T&kInt4m^b+py#YCuK1?!SyV z{6;{P>rLzlnsra6i~qV*YvFeRm8AaKU;ceSO^#FTOh=PSdF_5?s*H)&II)}EEmt)o zIUzZDh%zanQcbY#Hmy{dx;`|2qSG4GqEa2I=p@IqwPo9k3M0+;fp47mwzu5dGNdjf z%kzO}uE*!z=1vH{6rAh&O&xW;>1yRX;+$rt)>W!_Yn147>ca{;JFTbARI0QfeLz7Q zXGz6}mCCC4aEBVFMLM!=@%By*=MT{Qhudf$Qp z&XPMhJC$`Or%D;2337sY&M2F4&A4owGWHmzbGxzD`Kz(QxyG1g3^BSG$!2_Bl{#&O zWzE$(2KgI@Waw5*QI+z!beBC`SshEN)cI78oG8lH&t~j1W}EK1D%HvADYiHCJ_QS$ zB{}D+l&}lz27AC>un+79)!+a)2o8Z7a9CM6=Z>gNr7FU7P_0S~x~Y%0U(_~+KDoC> zzCt~f6+fj`J*+g}F>BP+TD4K>`C<7Jt=rRTRd}&#WjY#bRhtNRcF_C5rt7wAeo!;V zO8vO|3q3|ltjWK){##`w-jOo|XSD zAy@Q0Y7*ZyarweW#A348N3Nhumx-dZ-H{~HrNKXg9;D;m0$q@Gf`{oC2r88O<6wt6r-L zavI;+zEtnoOkZrJHryPaTd$2#H?93L`jmBYUcJ`Nr8m)Ily!S)y%sjgDeKp6t%uD_ z&E2YEthVRtHJ1tTPvD~xxLesSur^c+SNE&*Og04vKc=cH;pTnFIRRN_?@VQ;zVam$Cd_dj!HIjWh_w-nt#Z+ n!5X%2u{y4-5# `); var root_2 = from_html(`
`, 1); var root_19 = from_html(`/ `, 1); -var root_21 = from_html(`
`); +var root_23 = from_html(``); +var root_24 = from_html(`
`); +var root_22 = from_html(`
`); var root_26 = from_html(``); -var root_25 = from_html(`
`); -var root_28 = from_html(``); -var root_27 = from_html(`
`); -var root_29 = from_html(`
`); -var root_30 = from_html(`
`); -var root_31 = from_html(``); -var root_24 = from_html(`
`); -var root_23 = from_html(`
/
`); -var root_34 = from_html(`
Searching characters…
`); -var root_35 = from_html(`
`); -var root_38 = from_html(``); -var root_39 = from_html(`
`); -var root_37 = from_html(`
`); -var root_40 = from_html(`
`); -var root_36 = from_html(`
`, 1); -var root_42 = from_html(`
`); +var root_25 = from_html(`
`); +var root_27 = from_html(`
🕘 Recently used
`); +var root_29 = from_html(`
`); +var root_34 = from_html(``); +var root_33 = from_html(`
`); +var root_36 = from_html(``); +var root_35 = from_html(`
`); +var root_37 = from_html(`
`); +var root_38 = from_html(`
`); +var root_39 = from_html(``); +var root_32 = from_html(`
`); +var root_31 = from_html(`
/
`); +var root_20 = from_html(` `, 1); +var root_42 = from_html(`
Searching characters…
`); var root_43 = from_html(`
`); var root_46 = from_html(``); -var root_45 = from_html(`
`); -var root_44 = from_html(`
`); -var root_47 = from_html(`
Connect a model to see styles.
`); -var root_48 = from_html(`
Loading styles…
`); -var root_49 = from_html(`
No styles found for this model.
`); +var root_47 = from_html(`
`); +var root_45 = from_html(`
`); +var root_48 = from_html(`
`); +var root_44 = from_html(`
`, 1); var root_50 = from_html(`
`); -var root_51 = from_html(`
No items.
`); -var root_55 = from_html(``); -var root_56 = from_html(``); -var root_54 = from_html(`
`); -var root_53 = from_html(`
`); -var root_60 = from_html(``); -var root_59 = from_html(`
`); -var root_61 = from_html(``); -var root_62 = from_html(`
`); -var root_63 = from_html(`
`); -var root_58 = from_html(`
`); -var root_57 = from_html(`
`); -var root_65 = from_html(``); -var root_66 = from_html(` `); -var root_67 = from_html(` `); -var root_68 = from_html(` `, 1); -var root_71 = from_html(``); -var root_72 = from_html(` `, 1); -var root_75 = from_html(``); +var root_51 = from_html(`
`); +var root_54 = from_html(``); +var root_53 = from_html(`
`); +var root_52 = from_html(`
`); +var root_55 = from_html(`
Connect a model to see styles.
`); +var root_56 = from_html(`
Loading styles…
`); +var root_57 = from_html(`
No styles found for this model.
`); +var root_58 = from_html(`
`); +var root_59 = from_html(`
No items.
`); +var root_63 = from_html(``); +var root_64 = from_html(``); +var root_62 = from_html(`
`); +var root_61 = from_html(`
`); +var root_68 = from_html(``); +var root_67 = from_html(`
`); +var root_69 = from_html(``); +var root_70 = from_html(`
`); +var root_71 = from_html(`
`); +var root_66 = from_html(`
`); +var root_65 = from_html(`
`); +var root_73 = from_html(``); +var root_74 = from_html(` `); +var root_75 = from_html(` `); var root_76 = from_html(` `, 1); -var root_79 = from_html(``); -var root_82 = from_html(` `); -var root_83 = from_html(`
Identity
`); -var root_85 = from_html(` `); -var root_84 = from_html(`
Modifiers + add
`); -var root_88 = from_html(`+`); -var root_90 = from_html(``); -var root_89 = from_html(` `); -var root_91 = from_html(`+ add`); -var root_87 = from_html(`
`); -var root_81 = from_html(`
`); -var root_93 = from_html(` `); -var root_92 = from_html(`
Custom / Freeform
`); -var root_96 = from_html(` `); -var root_95 = from_html(`
`); -var root_64 = from_html(`
Subject
Identity
Outfit
Pose
`); -var root_99 = from_html(`+`); -var root_100 = from_html(` `); -var root_101 = from_html(`+ add`); -var root_98 = from_html(`
`); -var root_103 = from_html(` `); -var root_102 = from_html(`
Custom / Freeform
`); -var root_107 = from_html(``); -var root_106 = from_html(` `); -var root_105 = from_html(`
+
`); -var root_97 = from_html(`
🏠 Scene Shared
`); -var root_108 = from_html(`
+ Add Scene
`); -var root_110 = from_html(` `); -var root_109 = from_html(`
🎨 Style
`); -var root_111 = from_html(`
+ Add Style
`); -var root_112 = from_html(`
Tag
Natlang
`, 1); -var root_114 = from_html(`
Searching…
`); -var root_115 = from_html(`
No matches.
`); -var root_117 = from_html(`
`); -var root_113 = from_html(`
`); -var root_121 = from_html(`
Loading…
`); -var root_122 = from_html(`
No matches.
`); -var root_125 = from_html(`★`); -var root_124 = from_html(`
`); -var root_120 = from_html(`
`); -var root_127 = from_html(`
`); -var root_126 = from_html(`
`); -var root_128 = from_html(`
Swap identity?
Replace with ?
`); +var root_79 = from_html(``); +var root_80 = from_html(` `, 1); +var root_83 = from_html(``); +var root_84 = from_html(` `, 1); +var root_87 = from_html(``); +var root_90 = from_html(` `); +var root_91 = from_html(`
Identity
`); +var root_93 = from_html(` `); +var root_92 = from_html(`
Modifiers + add
`); +var root_96 = from_html(`+`); +var root_98 = from_html(``); +var root_97 = from_html(` `); +var root_99 = from_html(`+ add`); +var root_95 = from_html(`
`); +var root_89 = from_html(`
`); +var root_101 = from_html(` `); +var root_100 = from_html(`
Custom / Freeform
`); +var root_104 = from_html(` `); +var root_103 = from_html(`
`); +var root_72 = from_html(`
Subject
Identity
Outfit
Pose
`); +var root_107 = from_html(`+`); +var root_108 = from_html(` `); +var root_109 = from_html(`+ add`); +var root_106 = from_html(`
`); +var root_111 = from_html(` `); +var root_110 = from_html(`
Custom / Freeform
`); +var root_115 = from_html(``); +var root_114 = from_html(` `); +var root_113 = from_html(`
+
`); +var root_105 = from_html(`
🏠 Scene Shared
`); +var root_116 = from_html(`
+ Add Scene
`); +var root_118 = from_html(` `); +var root_117 = from_html(`
🎨 Style
`); +var root_119 = from_html(`
+ Add Style
`); +var root_120 = from_html(`
Tag
Natlang
`, 1); +var root_122 = from_html(`
Searching…
`); +var root_123 = from_html(`
No matches.
`); +var root_125 = from_html(`
`); +var root_121 = from_html(`
`); +var root_129 = from_html(`
Loading…
`); +var root_130 = from_html(`
No matches.
`); +var root_133 = from_html(`★`); +var root_132 = from_html(`
`); +var root_128 = from_html(`
`); +var root_135 = from_html(`
`); +var root_134 = from_html(`
`); +var root_136 = from_html(`
Swap identity?
Replace with ?
`); var root_1 = from_html(`
Tag Builder 2
Adding to:
`, 1); function TagBuilder2($$anchor, $$props) { var _a; @@ -1975,6 +1982,26 @@ function TagBuilder2($$anchor, $$props) { } catch { } } + const RECENT_ENABLED = false; + const RECENT_KEY = "pcr-atb2-recent"; + const RECENT_MAX = 24; + let recentPicks = state(proxy([])); + try { + const stored = JSON.parse(localStorage.getItem(RECENT_KEY) || "[]"); + if (Array.isArray(stored)) set(recentPicks, stored.slice(0, RECENT_MAX), true); + } catch { + } + function recentKey(e) { + var _a2, _b, _c, _d; + return e.type === "item" ? `item:${e.categoryKey}:${e.groupKey}:${(_a2 = e.item) == null ? void 0 : _a2.item_tag}` : `id:${(_b = e.option) == null ? void 0 : _b.kind}:${((_c = e.option) == null ? void 0 : _c.group) || ""}:${(_d = e.option) == null ? void 0 : _d.tag}`; + } + function clearRecent() { + set(recentPicks, [], true); + try { + localStorage.setItem(RECENT_KEY, JSON.stringify(get(recentPicks))); + } catch { + } + } user_effect(() => { const el = get(browserEl); if (!el) return; @@ -2315,7 +2342,7 @@ function TagBuilder2($$anchor, $$props) { for (const cat of CATEGORIES) { if (cat.enabled && cat.bucket) loadBucket(cat.bucket); } - const charTagsPromise = fetch(`/promptchain/tag-builder/characters?natlang_status=normalized&per_page=1000&sort=display`).then((r) => r.ok ? r.json() : { characters: [] }).then((d) => { + const charTagsPromise = fetch(`/promptchain/tag-builder/characters/identity-index`).then((r) => r.ok ? r.json() : { characters: [] }).then((d) => { const chars = d.characters || []; normalizedCharacterTags = new Set(chars.map((c) => c.tag)); normalizedCharacters = chars.filter((c) => c.base_natlang && c.base_natlang.trim()).sort((a, b) => (b.base_natlang || "").length - (a.base_natlang || "").length); @@ -6072,30 +6099,135 @@ ${filtered}` : filtered; } var node_14 = sibling(div_17, 2); { - var consequent_22 = ($$anchor2) => { - var fragment_4 = comment(); - var node_15 = first_child(fragment_4); + var consequent_27 = ($$anchor2) => { + const recentCard = ($$anchor3, r = noop) => { + var fragment_4 = comment(); + var node_15 = first_child(fragment_4); + { + var consequent_16 = ($$anchor4) => { + const o = user_derived(() => r().option); + const isChar = user_derived(() => get(o).kind === "character"); + const rHasImg = user_derived(() => { + var _a2; + return get(isChar) ? get(characterThumbs).has(get(o).tag) : !!((_a2 = get(castThumbs)[get(o).group]) == null ? void 0 : _a2.has(get(o).tag)); + }); + var div_18 = root_22(); + var div_19 = child(div_18); + let classes_11; + var node_16 = child(div_19); + { + var consequent_14 = ($$anchor5) => { + var img = root_23(); + template_effect(($0) => set_attribute(img, "src", $0), [ + () => get(isChar) ? `/promptchain/tag-builder/thumb/characters/${encodeURIComponent(get(o).tag)}` : `/promptchain/tag-builder/thumb/${encodeURIComponent(get(o).group)}/${encodeURIComponent(get(o).tag)}` + ]); + append($$anchor5, img); + }; + if_block(node_16, ($$render) => { + if (get(rHasImg)) $$render(consequent_14); + }); + } + var div_20 = sibling(div_19, 2); + var text_21 = child(div_20); + var node_17 = sibling(div_20, 2); + { + var consequent_15 = ($$anchor5) => { + var div_21 = root_24(); + var text_22 = child(div_21); + template_effect(() => set_text(text_22, get(o).series)); + append($$anchor5, div_21); + }; + if_block(node_17, ($$render) => { + if (get(o).series) $$render(consequent_15); + }); + } + template_effect(() => { + set_attribute(div_18, "title", get(o).base_natlang || get(o).display || get(o).tag); + classes_11 = set_class(div_19, 1, "pcr-atb2-card-thumb svelte-ibd6yj", null, classes_11, { "has-image": get(rHasImg) }); + set_text(text_21, get(o).display || get(o).tag); + }); + delegated("click", div_18, () => pickIdentityFromBrowser(get(o))); + append($$anchor4, div_18); + }; + var alternate = ($$anchor4) => { + const it = user_derived(() => r().item); + const rBucket = user_derived(() => { + var _a2; + return (_a2 = CATEGORIES.find((c) => c.key === r().categoryKey)) == null ? void 0 : _a2.bucket; + }); + const rHasImg = user_derived(() => !!get(rBucket) && hasThumb(get(rBucket), get(it).item_tag)); + var div_22 = root_25(); + var div_23 = child(div_22); + let classes_12; + var node_18 = child(div_23); + { + var consequent_17 = ($$anchor5) => { + var img_1 = root_26(); + template_effect(($0) => set_attribute(img_1, "src", $0), [() => thumbUrl(get(rBucket), get(it).item_tag)]); + append($$anchor5, img_1); + }; + if_block(node_18, ($$render) => { + if (get(rHasImg)) $$render(consequent_17); + }); + } + var div_24 = sibling(div_23, 2); + var text_23 = child(div_24); + template_effect(() => { + set_attribute(div_22, "title", get(it).base_natlang || get(it).display_name || get(it).item_tag); + classes_12 = set_class(div_23, 1, "pcr-atb2-card-thumb svelte-ibd6yj", null, classes_12, { "has-image": get(rHasImg) }); + set_text(text_23, get(it).display_name || get(it).item_tag); + }); + delegated("click", div_22, () => pickItemFromAll(get(it), r().categoryKey, r().groupKey)); + append($$anchor4, div_22); + }; + if_block(node_15, ($$render) => { + if (r().type === "identity") $$render(consequent_16); + else $$render(alternate, -1); + }); + } + append($$anchor3, fragment_4); + }; + var fragment_5 = root_20(); + var node_19 = first_child(fragment_5); { - var consequent_14 = ($$anchor3) => { - var div_18 = root_21(); - var text_21 = child(div_18); - template_effect(() => set_text(text_21, get(searchQuery) ? `No items match "${get(searchQuery)}"` : "Loading…")); - append($$anchor3, div_18); + var consequent_18 = ($$anchor3) => { + var div_25 = root_27(); + var div_26 = child(div_25); + var button_2 = sibling(child(div_26), 2); + var div_27 = sibling(div_26, 2); + each(div_27, 21, () => get(recentPicks), (r) => recentKey(r), ($$anchor4, r) => { + recentCard($$anchor4, () => get(r)); + }); + delegated("click", button_2, clearRecent); + append($$anchor3, div_25); }; - var alternate = ($$anchor3) => { - var fragment_5 = comment(); - var node_16 = first_child(fragment_5); - each(node_16, 17, () => get(allCategorySections), (section) => section.key, ($$anchor4, section) => { + var d_1 = user_derived(() => RECENT_ENABLED); + if_block(node_19, ($$render) => { + if (get(d_1)) $$render(consequent_18); + }); + } + var node_20 = sibling(node_19, 2); + { + var consequent_19 = ($$anchor3) => { + var div_28 = root_29(); + var text_24 = child(div_28); + template_effect(() => set_text(text_24, get(searchQuery) ? `No items match "${get(searchQuery)}"` : "Loading…")); + append($$anchor3, div_28); + }; + var alternate_1 = ($$anchor3) => { + var fragment_7 = comment(); + var node_21 = first_child(fragment_7); + each(node_21, 17, () => get(allCategorySections), (section) => section.key, ($$anchor4, section) => { const cat = user_derived(() => CATEGORIES.find((c) => c.key === get(section).categoryKey)); - var div_19 = root_23(); - var div_20 = sibling(child(div_19), 2); - var span_21 = child(div_20); - var text_22 = child(span_21); + var div_29 = root_31(); + var div_30 = sibling(child(div_29), 2); + var span_21 = child(div_30); + var text_25 = child(span_21); var span_22 = sibling(span_21, 4); - var text_23 = child(span_22); - action(div_20, ($$node) => stickyShadow == null ? void 0 : stickyShadow($$node)); - var div_21 = sibling(div_20, 2); - each(div_21, 21, () => get(section).items, (item) => item.item_tag, ($$anchor5, item) => { + var text_26 = child(span_22); + action(div_30, ($$node) => stickyShadow == null ? void 0 : stickyShadow($$node)); + var div_31 = sibling(div_30, 2); + each(div_31, 21, () => get(section).items, (item) => item.item_tag, ($$anchor5, item) => { const sectionCardMods = user_derived(() => !get(section).kind && isCustomizableSlot(get(section).categoryKey, get(section).groupKey) ? cardModifiers(get(item), get(section).categoryKey, get(section).groupKey) : null); const sectionCardDotColor = user_derived(() => { var _a2; @@ -6109,107 +6241,107 @@ ${filtered}` : filtered; var _a2, _b, _c, _d; return get(section).kind === "subject-character" ? ((_b = (_a2 = get(activeSubject)) == null ? void 0 : _a2.character) == null ? void 0 : _b.tag) === get(item).tag : get(section).kind === "subject-cast" ? ((_d = (_c = get(activeSubject)) == null ? void 0 : _c.character) == null ? void 0 : _d.tag) === get(item).item_tag : false; }); - var div_22 = root_24(); - let classes_11; - var node_17 = child(div_22); + var div_32 = root_32(); + let classes_13; + var node_22 = child(div_32); { - var consequent_16 = ($$anchor6) => { - var div_23 = root_25(); - let classes_12; - var node_18 = child(div_23); + var consequent_21 = ($$anchor6) => { + var div_33 = root_33(); + let classes_14; + var node_23 = child(div_33); { - var consequent_15 = ($$anchor7) => { - var img = root_26(); - template_effect(($0) => set_attribute(img, "src", $0), [ + var consequent_20 = ($$anchor7) => { + var img_2 = root_34(); + template_effect(($0) => set_attribute(img_2, "src", $0), [ () => `/promptchain/tag-builder/thumb/characters/${encodeURIComponent(get(item).tag)}` ]); - append($$anchor7, img); + append($$anchor7, img_2); }; - var d_1 = user_derived(() => get(characterThumbs).has(get(item).tag)); - if_block(node_18, ($$render) => { - if (get(d_1)) $$render(consequent_15); + var d_2 = user_derived(() => get(characterThumbs).has(get(item).tag)); + if_block(node_23, ($$render) => { + if (get(d_2)) $$render(consequent_20); }); } - template_effect(($0) => classes_12 = set_class(div_23, 1, "pcr-atb2-card-thumb svelte-ibd6yj", null, classes_12, $0), [ + template_effect(($0) => classes_14 = set_class(div_33, 1, "pcr-atb2-card-thumb svelte-ibd6yj", null, classes_14, $0), [ () => ({ "has-image": get(characterThumbs).has(get(item).tag) }) ]); - append($$anchor6, div_23); + append($$anchor6, div_33); }; - var consequent_18 = ($$anchor6) => { + var consequent_23 = ($$anchor6) => { const hasImg = user_derived(() => { var _a2; return (_a2 = get(castThumbs)[get(section).castGroup]) == null ? void 0 : _a2.has(get(item).item_tag); }); - var div_24 = root_27(); - let classes_13; - var node_19 = child(div_24); + var div_34 = root_35(); + let classes_15; + var node_24 = child(div_34); { - var consequent_17 = ($$anchor7) => { - var img_1 = root_28(); - template_effect(($0) => set_attribute(img_1, "src", $0), [ + var consequent_22 = ($$anchor7) => { + var img_3 = root_36(); + template_effect(($0) => set_attribute(img_3, "src", $0), [ () => `/promptchain/tag-builder/thumb/${encodeURIComponent(get(section).castGroup)}/${encodeURIComponent(get(item).item_tag)}` ]); - append($$anchor7, img_1); + append($$anchor7, img_3); }; - if_block(node_19, ($$render) => { - if (get(hasImg)) $$render(consequent_17); + if_block(node_24, ($$render) => { + if (get(hasImg)) $$render(consequent_22); }); } - template_effect(() => classes_13 = set_class(div_24, 1, "pcr-atb2-card-thumb svelte-ibd6yj", null, classes_13, { "has-image": get(hasImg) })); - append($$anchor6, div_24); + template_effect(() => classes_15 = set_class(div_34, 1, "pcr-atb2-card-thumb svelte-ibd6yj", null, classes_15, { "has-image": get(hasImg) })); + append($$anchor6, div_34); }; - var consequent_19 = ($$anchor6) => { - var div_25 = root_29(); - var img_2 = child(div_25); - template_effect(($0) => set_attribute(img_2, "src", $0), [() => thumbUrl(get(cat).bucket, get(item).item_tag)]); - append($$anchor6, div_25); + var consequent_24 = ($$anchor6) => { + var div_35 = root_37(); + var img_4 = child(div_35); + template_effect(($0) => set_attribute(img_4, "src", $0), [() => thumbUrl(get(cat).bucket, get(item).item_tag)]); + append($$anchor6, div_35); }; - var d_2 = user_derived(() => { + var d_3 = user_derived(() => { var _a2; return ((_a2 = get(cat)) == null ? void 0 : _a2.bucket) && hasThumb(get(cat).bucket, get(item).item_tag); }); - var consequent_20 = ($$anchor6) => { - var div_26 = root_30(); - append($$anchor6, div_26); + var consequent_25 = ($$anchor6) => { + var div_36 = root_38(); + append($$anchor6, div_36); }; - if_block(node_17, ($$render) => { + if_block(node_22, ($$render) => { var _a2; - if (get(section).kind === "subject-character") $$render(consequent_16); - else if (get(section).kind === "subject-cast") $$render(consequent_18, 1); - else if (get(d_2)) $$render(consequent_19, 2); - else if ((_a2 = get(cat)) == null ? void 0 : _a2.bucket) $$render(consequent_20, 3); + if (get(section).kind === "subject-character") $$render(consequent_21); + else if (get(section).kind === "subject-cast") $$render(consequent_23, 1); + else if (get(d_3)) $$render(consequent_24, 2); + else if ((_a2 = get(cat)) == null ? void 0 : _a2.bucket) $$render(consequent_25, 3); }); } - var div_27 = sibling(node_17, 2); - var node_20 = child(div_27); + var div_37 = sibling(node_22, 2); + var node_25 = child(div_37); { - var consequent_21 = ($$anchor6) => { - var button_2 = root_31(); - let classes_14; + var consequent_26 = ($$anchor6) => { + var button_3 = root_39(); + let classes_16; template_effect(() => { - classes_14 = set_class(button_2, 1, "pcr-atb2-card-mod-dot svelte-ibd6yj", null, classes_14, { + classes_16 = set_class(button_3, 1, "pcr-atb2-card-mod-dot svelte-ibd6yj", null, classes_16, { filled: !!get(sectionCardDotColor), hollow: !get(sectionCardDotColor) }); - set_style(button_2, get(sectionCardDotColor) ? `background:${get(sectionCardDotColor)}` : ""); + set_style(button_3, get(sectionCardDotColor) ? `background:${get(sectionCardDotColor)}` : ""); }); - delegated("click", button_2, (e) => { + delegated("click", button_3, (e) => { e.stopPropagation(); editCardModifiers(get(item), get(section).categoryKey, get(section).groupKey); }); - append($$anchor6, button_2); + append($$anchor6, button_3); }; - if_block(node_20, ($$render) => { - if (get(sectionCardMods)) $$render(consequent_21); + if_block(node_25, ($$render) => { + if (get(sectionCardMods)) $$render(consequent_26); }); } - var text_24 = sibling(node_20); + var text_27 = sibling(node_25); template_effect( ($0) => { - classes_11 = set_class(div_22, 1, "pcr-atb2-card svelte-ibd6yj", null, classes_11, $0); - set_attribute(div_22, "data-item-tag", get(item).item_tag); - set_attribute(div_22, "title", get(item).base_natlang || get(item).display_name || get(item).item_tag); - set_text(text_24, ` ${(get(item).display_name || get(item).item_tag) ?? ""}`); + classes_13 = set_class(div_32, 1, "pcr-atb2-card svelte-ibd6yj", null, classes_13, $0); + set_attribute(div_32, "data-item-tag", get(item).item_tag); + set_attribute(div_32, "title", get(item).base_natlang || get(item).display_name || get(item).item_tag); + set_text(text_27, ` ${(get(item).display_name || get(item).item_tag) ?? ""}`); }, [ () => ({ @@ -6218,7 +6350,7 @@ ${filtered}` : filtered; }) ] ); - delegated("click", div_22, () => { + delegated("click", div_32, () => { if (get(section).kind === "subject-character") { if (get(sectionActiveIdentity)) unbindIdentity(get(activeSubject).id); else pickIdentityFromBrowser(characterToOption(get(item))); @@ -6229,146 +6361,146 @@ ${filtered}` : filtered; pickItemFromAll(get(item), get(section).categoryKey, get(section).groupKey); } }); - delegated("contextmenu", div_22, (e) => { + delegated("contextmenu", div_32, (e) => { if (!get(section).kind && get(sectionBucket)) openChipQaMenu(e, get(sectionBucket), get(item)); }); - append($$anchor5, div_22); + append($$anchor5, div_32); }); - action(div_19, ($$node) => spyTarget == null ? void 0 : spyTarget($$node)); + action(div_29, ($$node) => spyTarget == null ? void 0 : spyTarget($$node)); template_effect(() => { - set_attribute(div_19, "data-spy-group", get(section).key); - set_text(text_22, get(section).categoryLabel); - set_text(text_23, get(section).groupLabel); + set_attribute(div_29, "data-spy-group", get(section).key); + set_text(text_25, get(section).categoryLabel); + set_text(text_26, get(section).groupLabel); }); - append($$anchor4, div_19); + append($$anchor4, div_29); }); - append($$anchor3, fragment_5); + append($$anchor3, fragment_7); }; - if_block(node_15, ($$render) => { - if (get(allCategorySections).length === 0) $$render(consequent_14); - else $$render(alternate, -1); + if_block(node_20, ($$render) => { + if (get(allCategorySections).length === 0) $$render(consequent_19); + else $$render(alternate_1, -1); }); } - append($$anchor2, fragment_4); + append($$anchor2, fragment_5); }; - var consequent_32 = ($$anchor2) => { + var consequent_37 = ($$anchor2) => { const sub = user_derived(() => get(activeSubjectSubitem) ? SUBJECT_SUBITEMS.find((s) => s.key === get(activeSubjectSubitem)) : null); - var fragment_6 = comment(); - var node_21 = first_child(fragment_6); + var fragment_8 = comment(); + var node_26 = first_child(fragment_8); { - var consequent_28 = ($$anchor3) => { - var fragment_7 = comment(); - var node_22 = first_child(fragment_7); + var consequent_33 = ($$anchor3) => { + var fragment_9 = comment(); + var node_27 = first_child(fragment_9); { - var consequent_23 = ($$anchor4) => { - var div_28 = root_34(); - append($$anchor4, div_28); + var consequent_28 = ($$anchor4) => { + var div_38 = root_42(); + append($$anchor4, div_38); }; - var consequent_24 = ($$anchor4) => { - var div_29 = root_35(); - var text_25 = child(div_29); - template_effect(() => set_text(text_25, get(searchQuery) ? `No characters match "${get(searchQuery)}"` : "No characters.")); - append($$anchor4, div_29); + var consequent_29 = ($$anchor4) => { + var div_39 = root_43(); + var text_28 = child(div_39); + template_effect(() => set_text(text_28, get(searchQuery) ? `No characters match "${get(searchQuery)}"` : "No characters.")); + append($$anchor4, div_39); }; - var alternate_1 = ($$anchor4) => { - var fragment_8 = root_36(); - var div_30 = first_child(fragment_8); - each(div_30, 21, () => get(characters), (char) => char.tag, ($$anchor5, char) => { + var alternate_2 = ($$anchor4) => { + var fragment_10 = root_44(); + var div_40 = first_child(fragment_10); + each(div_40, 21, () => get(characters), (char) => char.tag, ($$anchor5, char) => { const isActiveIdentity = user_derived(() => { var _a2, _b; return ((_b = (_a2 = get(activeSubject)) == null ? void 0 : _a2.character) == null ? void 0 : _b.tag) === get(char).tag; }); - var div_31 = root_37(); - let classes_15; - var div_32 = child(div_31); - let classes_16; - var node_23 = child(div_32); + var div_41 = root_45(); + let classes_17; + var div_42 = child(div_41); + let classes_18; + var node_28 = child(div_42); { - var consequent_25 = ($$anchor6) => { - var img_3 = root_38(); - template_effect(($0) => set_attribute(img_3, "src", $0), [ + var consequent_30 = ($$anchor6) => { + var img_5 = root_46(); + template_effect(($0) => set_attribute(img_5, "src", $0), [ () => `/promptchain/tag-builder/thumb/characters/${encodeURIComponent(get(char).tag)}` ]); - append($$anchor6, img_3); + append($$anchor6, img_5); }; - var d_3 = user_derived(() => get(characterThumbs).has(get(char).tag)); - if_block(node_23, ($$render) => { - if (get(d_3)) $$render(consequent_25); + var d_4 = user_derived(() => get(characterThumbs).has(get(char).tag)); + if_block(node_28, ($$render) => { + if (get(d_4)) $$render(consequent_30); }); } - var div_33 = sibling(div_32, 2); - var text_26 = child(div_33); - var node_24 = sibling(div_33, 2); + var div_43 = sibling(div_42, 2); + var text_29 = child(div_43); + var node_29 = sibling(div_43, 2); { - var consequent_26 = ($$anchor6) => { - var div_34 = root_39(); - var text_27 = child(div_34); - template_effect(() => set_text(text_27, get(char).series)); - append($$anchor6, div_34); + var consequent_31 = ($$anchor6) => { + var div_44 = root_47(); + var text_30 = child(div_44); + template_effect(() => set_text(text_30, get(char).series)); + append($$anchor6, div_44); }; - if_block(node_24, ($$render) => { - if (get(char).series) $$render(consequent_26); + if_block(node_29, ($$render) => { + if (get(char).series) $$render(consequent_31); }); } template_effect( ($0) => { - classes_15 = set_class(div_31, 1, "pcr-atb2-card svelte-ibd6yj", null, classes_15, { selected: get(isActiveIdentity) }); - set_attribute(div_31, "title", get(char).base_natlang || `${get(char).display}${get(char).series ? " — " + get(char).series : ""}`); - classes_16 = set_class(div_32, 1, "pcr-atb2-card-thumb svelte-ibd6yj", null, classes_16, $0); - set_text(text_26, get(char).display || get(char).tag); + classes_17 = set_class(div_41, 1, "pcr-atb2-card svelte-ibd6yj", null, classes_17, { selected: get(isActiveIdentity) }); + set_attribute(div_41, "title", get(char).base_natlang || `${get(char).display}${get(char).series ? " — " + get(char).series : ""}`); + classes_18 = set_class(div_42, 1, "pcr-atb2-card-thumb svelte-ibd6yj", null, classes_18, $0); + set_text(text_29, get(char).display || get(char).tag); }, [ () => ({ "has-image": get(characterThumbs).has(get(char).tag) }) ] ); - delegated("click", div_31, () => get(isActiveIdentity) ? unbindIdentity(get(activeSubject).id) : pickIdentityFromBrowser(characterToOption(get(char)))); - append($$anchor5, div_31); + delegated("click", div_41, () => get(isActiveIdentity) ? unbindIdentity(get(activeSubject).id) : pickIdentityFromBrowser(characterToOption(get(char)))); + append($$anchor5, div_41); }); - var node_25 = sibling(div_30, 2); + var node_30 = sibling(div_40, 2); { - var consequent_27 = ($$anchor5) => { - var div_35 = root_40(); - var text_28 = child(div_35); - action(div_35, ($$node) => characterLoadMore == null ? void 0 : characterLoadMore($$node)); - template_effect(($0) => set_text(text_28, $0), [ + var consequent_32 = ($$anchor5) => { + var div_45 = root_48(); + var text_31 = child(div_45); + action(div_45, ($$node) => characterLoadMore == null ? void 0 : characterLoadMore($$node)); + template_effect(($0) => set_text(text_31, $0), [ () => get(charactersLoadingMore) ? "Loading more…" : `Showing ${get(characters).length} of ${get(charactersTotal).toLocaleString()} — scroll for more` ]); - append($$anchor5, div_35); + append($$anchor5, div_45); }; - if_block(node_25, ($$render) => { - if (get(charactersTotal) > get(characters).length) $$render(consequent_27); + if_block(node_30, ($$render) => { + if (get(charactersTotal) > get(characters).length) $$render(consequent_32); }); } - append($$anchor4, fragment_8); + append($$anchor4, fragment_10); }; - if_block(node_22, ($$render) => { - if (get(charactersLoading)) $$render(consequent_23); - else if (get(characters).length === 0) $$render(consequent_24, 1); - else $$render(alternate_1, -1); + if_block(node_27, ($$render) => { + if (get(charactersLoading)) $$render(consequent_28); + else if (get(characters).length === 0) $$render(consequent_29, 1); + else $$render(alternate_2, -1); }); } - append($$anchor3, fragment_7); + append($$anchor3, fragment_9); }; - var alternate_3 = ($$anchor3) => { + var alternate_4 = ($$anchor3) => { const castData = user_derived(() => get(castCache)[get(sub).filter]); - var fragment_9 = comment(); - var node_26 = first_child(fragment_9); + var fragment_11 = comment(); + var node_31 = first_child(fragment_11); { - var consequent_29 = ($$anchor4) => { - var div_36 = root_42(); - var text_29 = child(div_36); - template_effect(() => set_text(text_29, `Loading ${get(sub).label ?? ""}…`)); - append($$anchor4, div_36); + var consequent_34 = ($$anchor4) => { + var div_46 = root_50(); + var text_32 = child(div_46); + template_effect(() => set_text(text_32, `Loading ${get(sub).label ?? ""}…`)); + append($$anchor4, div_46); }; - var consequent_30 = ($$anchor4) => { - var div_37 = root_43(); - var text_30 = child(div_37); - template_effect(($0) => set_text(text_30, `No ${$0 ?? ""} items.`), [() => get(sub).label.toLowerCase()]); - append($$anchor4, div_37); + var consequent_35 = ($$anchor4) => { + var div_47 = root_51(); + var text_33 = child(div_47); + template_effect(($0) => set_text(text_33, `No ${$0 ?? ""} items.`), [() => get(sub).label.toLowerCase()]); + append($$anchor4, div_47); }; - var alternate_2 = ($$anchor4) => { - var div_38 = root_44(); - each(div_38, 21, () => get(castData).items, (item) => item.item_tag, ($$anchor5, item) => { + var alternate_3 = ($$anchor4) => { + var div_48 = root_52(); + each(div_48, 21, () => get(castData).items, (item) => item.item_tag, ($$anchor5, item) => { const hasImg = user_derived(() => { var _a2; return (_a2 = get(castThumbs)[get(sub).filter]) == null ? void 0 : _a2.has(get(item).item_tag); @@ -6377,31 +6509,31 @@ ${filtered}` : filtered; var _a2, _b; return ((_b = (_a2 = get(activeSubject)) == null ? void 0 : _a2.character) == null ? void 0 : _b.tag) === get(item).item_tag; }); - var div_39 = root_45(); - let classes_17; - var div_40 = child(div_39); - let classes_18; - var node_27 = child(div_40); + var div_49 = root_53(); + let classes_19; + var div_50 = child(div_49); + let classes_20; + var node_32 = child(div_50); { - var consequent_31 = ($$anchor6) => { - var img_4 = root_46(); - template_effect(($0) => set_attribute(img_4, "src", $0), [ + var consequent_36 = ($$anchor6) => { + var img_6 = root_54(); + template_effect(($0) => set_attribute(img_6, "src", $0), [ () => `/promptchain/tag-builder/thumb/${encodeURIComponent(get(sub).filter)}/${encodeURIComponent(get(item).item_tag)}` ]); - append($$anchor6, img_4); + append($$anchor6, img_6); }; - if_block(node_27, ($$render) => { - if (get(hasImg)) $$render(consequent_31); + if_block(node_32, ($$render) => { + if (get(hasImg)) $$render(consequent_36); }); } - var div_41 = sibling(div_40, 2); - var text_31 = child(div_41); + var div_51 = sibling(div_50, 2); + var text_34 = child(div_51); template_effect( ($0) => { - classes_17 = set_class(div_39, 1, "pcr-atb2-card svelte-ibd6yj", null, classes_17, $0); - set_attribute(div_39, "title", get(item).base_natlang || get(item).display_name || get(item).item_tag); - classes_18 = set_class(div_40, 1, "pcr-atb2-card-thumb svelte-ibd6yj", null, classes_18, { "has-image": get(hasImg) }); - set_text(text_31, get(item).display_name || get(item).item_tag); + classes_19 = set_class(div_49, 1, "pcr-atb2-card svelte-ibd6yj", null, classes_19, $0); + set_attribute(div_49, "title", get(item).base_natlang || get(item).display_name || get(item).item_tag); + classes_20 = set_class(div_50, 1, "pcr-atb2-card-thumb svelte-ibd6yj", null, classes_20, { "has-image": get(hasImg) }); + set_text(text_34, get(item).display_name || get(item).item_tag); }, [ () => ({ @@ -6410,113 +6542,113 @@ ${filtered}` : filtered; }) ] ); - delegated("click", div_39, () => get(isActiveIdentity) ? unbindIdentity(get(activeSubject).id) : pickIdentityFromBrowser(castToOption(get(item), get(sub).filter))); - delegated("contextmenu", div_39, (e) => openChipQaMenu(e, "cast", get(item))); - append($$anchor5, div_39); + delegated("click", div_49, () => get(isActiveIdentity) ? unbindIdentity(get(activeSubject).id) : pickIdentityFromBrowser(castToOption(get(item), get(sub).filter))); + delegated("contextmenu", div_49, (e) => openChipQaMenu(e, "cast", get(item))); + append($$anchor5, div_49); }); - append($$anchor4, div_38); + append($$anchor4, div_48); }; - if_block(node_26, ($$render) => { + if_block(node_31, ($$render) => { var _a2; - if (!get(castData) || get(castData).loading) $$render(consequent_29); - else if (!((_a2 = get(castData).items) == null ? void 0 : _a2.length)) $$render(consequent_30, 1); - else $$render(alternate_2, -1); + if (!get(castData) || get(castData).loading) $$render(consequent_34); + else if (!((_a2 = get(castData).items) == null ? void 0 : _a2.length)) $$render(consequent_35, 1); + else $$render(alternate_3, -1); }); } - append($$anchor3, fragment_9); + append($$anchor3, fragment_11); }; - if_block(node_21, ($$render) => { - if (!get(sub) || get(sub).source === "characters") $$render(consequent_28); - else $$render(alternate_3, -1); + if_block(node_26, ($$render) => { + if (!get(sub) || get(sub).source === "characters") $$render(consequent_33); + else $$render(alternate_4, -1); }); } - append($$anchor2, fragment_6); + append($$anchor2, fragment_8); }; - var consequent_33 = ($$anchor2) => { - var div_42 = root_47(); - append($$anchor2, div_42); + var consequent_38 = ($$anchor2) => { + var div_52 = root_55(); + append($$anchor2, div_52); }; - var consequent_34 = ($$anchor2) => { - var div_43 = root_48(); - append($$anchor2, div_43); - }; - var consequent_35 = ($$anchor2) => { - var div_44 = root_49(); - append($$anchor2, div_44); - }; - var consequent_36 = ($$anchor2) => { - var div_45 = root_50(); - var text_32 = child(div_45); - template_effect(() => set_text(text_32, `Loading ${get(activeCategoryDef).label ?? ""}…`)); - append($$anchor2, div_45); - }; - var consequent_37 = ($$anchor2) => { - var div_46 = root_51(); - append($$anchor2, div_46); + var consequent_39 = ($$anchor2) => { + var div_53 = root_56(); + append($$anchor2, div_53); }; var consequent_40 = ($$anchor2) => { - var fragment_10 = comment(); - var node_28 = first_child(fragment_10); - each(node_28, 17, () => get(groupedSections), (section) => section.key, ($$anchor3, section) => { - var div_47 = root_53(); - var div_48 = sibling(child(div_47), 2); - var span_23 = child(div_48); - var text_33 = child(span_23); - action(div_48, ($$node) => stickyShadow == null ? void 0 : stickyShadow($$node)); - var div_49 = sibling(div_48, 2); - each(div_49, 21, () => get(section).items, (item) => item.item_tag, ($$anchor4, item) => { + var div_54 = root_57(); + append($$anchor2, div_54); + }; + var consequent_41 = ($$anchor2) => { + var div_55 = root_58(); + var text_35 = child(div_55); + template_effect(() => set_text(text_35, `Loading ${get(activeCategoryDef).label ?? ""}…`)); + append($$anchor2, div_55); + }; + var consequent_42 = ($$anchor2) => { + var div_56 = root_59(); + append($$anchor2, div_56); + }; + var consequent_45 = ($$anchor2) => { + var fragment_12 = comment(); + var node_33 = first_child(fragment_12); + each(node_33, 17, () => get(groupedSections), (section) => section.key, ($$anchor3, section) => { + var div_57 = root_61(); + var div_58 = sibling(child(div_57), 2); + var span_23 = child(div_58); + var text_36 = child(span_23); + action(div_58, ($$node) => stickyShadow == null ? void 0 : stickyShadow($$node)); + var div_59 = sibling(div_58, 2); + each(div_59, 21, () => get(section).items, (item) => item.item_tag, ($$anchor4, item) => { const groupCardMods = user_derived(() => isCustomizableSlot(get(activeCategory), get(item).item_group) ? cardModifiers(get(item), get(activeCategory), get(item).item_group) : null); const groupCardDotColor = user_derived(() => { var _a2; return ((_a2 = get(groupCardMods)) == null ? void 0 : _a2.color) ? customizerColorHex(get(groupCardMods).color) : null; }); - var div_50 = root_54(); - let classes_19; - var div_51 = child(div_50); - let classes_20; - var node_29 = child(div_51); + var div_60 = root_62(); + let classes_21; + var div_61 = child(div_60); + let classes_22; + var node_34 = child(div_61); { - var consequent_38 = ($$anchor5) => { - var img_5 = root_55(); - template_effect(($0) => set_attribute(img_5, "src", $0), [() => thumbUrl(get(activeBucket), get(item).item_tag)]); - append($$anchor5, img_5); + var consequent_43 = ($$anchor5) => { + var img_7 = root_63(); + template_effect(($0) => set_attribute(img_7, "src", $0), [() => thumbUrl(get(activeBucket), get(item).item_tag)]); + append($$anchor5, img_7); }; - var d_4 = user_derived(() => hasThumb(get(activeBucket), get(item).item_tag)); - if_block(node_29, ($$render) => { - if (get(d_4)) $$render(consequent_38); + var d_5 = user_derived(() => hasThumb(get(activeBucket), get(item).item_tag)); + if_block(node_34, ($$render) => { + if (get(d_5)) $$render(consequent_43); }); } - var div_52 = sibling(div_51, 2); - var node_30 = child(div_52); + var div_62 = sibling(div_61, 2); + var node_35 = child(div_62); { - var consequent_39 = ($$anchor5) => { - var button_3 = root_56(); - let classes_21; + var consequent_44 = ($$anchor5) => { + var button_4 = root_64(); + let classes_23; template_effect(() => { - classes_21 = set_class(button_3, 1, "pcr-atb2-card-mod-dot svelte-ibd6yj", null, classes_21, { + classes_23 = set_class(button_4, 1, "pcr-atb2-card-mod-dot svelte-ibd6yj", null, classes_23, { filled: !!get(groupCardDotColor), hollow: !get(groupCardDotColor) }); - set_style(button_3, get(groupCardDotColor) ? `background:${get(groupCardDotColor)}` : ""); + set_style(button_4, get(groupCardDotColor) ? `background:${get(groupCardDotColor)}` : ""); }); - delegated("click", button_3, (e) => { + delegated("click", button_4, (e) => { e.stopPropagation(); editCardModifiers(get(item), get(activeCategory), get(item).item_group); }); - append($$anchor5, button_3); + append($$anchor5, button_4); }; - if_block(node_30, ($$render) => { - if (get(groupCardMods)) $$render(consequent_39); + if_block(node_35, ($$render) => { + if (get(groupCardMods)) $$render(consequent_44); }); } - var text_34 = sibling(node_30); + var text_37 = sibling(node_35); template_effect( ($0, $1) => { - classes_19 = set_class(div_50, 1, "pcr-atb2-card svelte-ibd6yj", null, classes_19, $0); - set_attribute(div_50, "data-item-tag", get(item).item_tag); - set_attribute(div_50, "title", get(item).base_natlang || get(item).display_name || get(item).item_tag); - classes_20 = set_class(div_51, 1, "pcr-atb2-card-thumb svelte-ibd6yj", null, classes_20, $1); - set_text(text_34, ` ${(get(item).display_name || get(item).item_tag) ?? ""}`); + classes_21 = set_class(div_60, 1, "pcr-atb2-card svelte-ibd6yj", null, classes_21, $0); + set_attribute(div_60, "data-item-tag", get(item).item_tag); + set_attribute(div_60, "title", get(item).base_natlang || get(item).display_name || get(item).item_tag); + classes_22 = set_class(div_61, 1, "pcr-atb2-card-thumb svelte-ibd6yj", null, classes_22, $1); + set_text(text_37, ` ${(get(item).display_name || get(item).item_tag) ?? ""}`); }, [ () => ({ @@ -6528,113 +6660,113 @@ ${filtered}` : filtered; }) ] ); - delegated("click", div_50, () => pickItem(get(item))); - delegated("contextmenu", div_50, (e) => { + delegated("click", div_60, () => pickItem(get(item))); + delegated("contextmenu", div_60, (e) => { if (get(activeBucket)) openChipQaMenu(e, get(activeBucket), get(item)); }); - append($$anchor4, div_50); + append($$anchor4, div_60); }); - action(div_47, ($$node) => spyTarget == null ? void 0 : spyTarget($$node)); + action(div_57, ($$node) => spyTarget == null ? void 0 : spyTarget($$node)); template_effect(() => { - set_attribute(div_47, "data-spy-group", get(section).groupKey); - set_text(text_33, get(section).groupLabel); + set_attribute(div_57, "data-spy-group", get(section).groupKey); + set_text(text_36, get(section).groupLabel); }); - append($$anchor3, div_47); + append($$anchor3, div_57); }); - append($$anchor2, fragment_10); + append($$anchor2, fragment_12); }; - var alternate_4 = ($$anchor2) => { - var div_53 = root_57(); - each(div_53, 21, () => get(visibleItems), (item) => item.item_tag, ($$anchor3, item) => { + var alternate_5 = ($$anchor2) => { + var div_63 = root_65(); + each(div_63, 21, () => get(visibleItems), (item) => item.item_tag, ($$anchor3, item) => { const flatCardMods = user_derived(() => isCustomizableSlot(get(activeCategory), get(item).item_group) ? cardModifiers(get(item), get(activeCategory), get(item).item_group) : null); const flatCardDotColor = user_derived(() => { var _a2; return ((_a2 = get(flatCardMods)) == null ? void 0 : _a2.color) ? customizerColorHex(get(flatCardMods).color) : null; }); - var div_54 = root_58(); - let classes_22; - var node_31 = child(div_54); + var div_64 = root_66(); + let classes_24; + var node_36 = child(div_64); { - var consequent_42 = ($$anchor4) => { - var div_55 = root_59(); - let classes_23; - var node_32 = child(div_55); + var consequent_47 = ($$anchor4) => { + var div_65 = root_67(); + let classes_25; + var node_37 = child(div_65); { - var consequent_41 = ($$anchor5) => { - var img_6 = root_60(); - template_effect(($0) => set_attribute(img_6, "src", $0), [() => thumbUrl(get(activeBucket), get(item).item_tag)]); - append($$anchor5, img_6); + var consequent_46 = ($$anchor5) => { + var img_8 = root_68(); + template_effect(($0) => set_attribute(img_8, "src", $0), [() => thumbUrl(get(activeBucket), get(item).item_tag)]); + append($$anchor5, img_8); }; - var d_5 = user_derived(() => hasThumb(get(activeBucket), get(item).item_tag)); - if_block(node_32, ($$render) => { - if (get(d_5)) $$render(consequent_41); + var d_6 = user_derived(() => hasThumb(get(activeBucket), get(item).item_tag)); + if_block(node_37, ($$render) => { + if (get(d_6)) $$render(consequent_46); }); } - template_effect(($0) => classes_23 = set_class(div_55, 1, "pcr-atb2-card-thumb svelte-ibd6yj", null, classes_23, $0), [ + template_effect(($0) => classes_25 = set_class(div_65, 1, "pcr-atb2-card-thumb svelte-ibd6yj", null, classes_25, $0), [ () => ({ "has-image": hasThumb(get(activeBucket), get(item).item_tag) }) ]); - append($$anchor4, div_55); + append($$anchor4, div_65); }; - if_block(node_31, ($$render) => { - if (get(activeCategory) !== "styles") $$render(consequent_42); + if_block(node_36, ($$render) => { + if (get(activeCategory) !== "styles") $$render(consequent_47); }); } - var div_56 = sibling(node_31, 2); - var node_33 = child(div_56); + var div_66 = sibling(node_36, 2); + var node_38 = child(div_66); { - var consequent_43 = ($$anchor4) => { - var button_4 = root_61(); - let classes_24; + var consequent_48 = ($$anchor4) => { + var button_5 = root_69(); + let classes_26; template_effect(() => { - classes_24 = set_class(button_4, 1, "pcr-atb2-card-mod-dot svelte-ibd6yj", null, classes_24, { + classes_26 = set_class(button_5, 1, "pcr-atb2-card-mod-dot svelte-ibd6yj", null, classes_26, { filled: !!get(flatCardDotColor), hollow: !get(flatCardDotColor) }); - set_style(button_4, get(flatCardDotColor) ? `background:${get(flatCardDotColor)}` : ""); + set_style(button_5, get(flatCardDotColor) ? `background:${get(flatCardDotColor)}` : ""); }); - delegated("click", button_4, (e) => { + delegated("click", button_5, (e) => { e.stopPropagation(); editCardModifiers(get(item), get(activeCategory), get(item).item_group); }); - append($$anchor4, button_4); + append($$anchor4, button_5); }; - if_block(node_33, ($$render) => { - if (get(flatCardMods)) $$render(consequent_43); + if_block(node_38, ($$render) => { + if (get(flatCardMods)) $$render(consequent_48); }); } - var text_35 = sibling(node_33); - var node_34 = sibling(div_56, 2); + var text_38 = sibling(node_38); + var node_39 = sibling(div_66, 2); { - var consequent_44 = ($$anchor4) => { - var div_57 = root_62(); - var text_36 = child(div_57); + var consequent_49 = ($$anchor4) => { + var div_67 = root_70(); + var text_39 = child(div_67); template_effect(() => { var _a2; - return set_text(text_36, `${((_a2 = get(item).tags) == null ? void 0 : _a2.length) ?? 0 ?? ""} tags`); + return set_text(text_39, `${((_a2 = get(item).tags) == null ? void 0 : _a2.length) ?? 0 ?? ""} tags`); }); - append($$anchor4, div_57); + append($$anchor4, div_67); }; - var consequent_45 = ($$anchor4) => { - var div_58 = root_63(); - var text_37 = child(div_58); - template_effect(($0) => set_text(text_37, $0), [ + var consequent_50 = ($$anchor4) => { + var div_68 = root_71(); + var text_40 = child(div_68); + template_effect(($0) => set_text(text_40, $0), [ () => groupDisplay(get(activeBucket), get(item).item_group) ]); - append($$anchor4, div_58); + append($$anchor4, div_68); }; - if_block(node_34, ($$render) => { - if (get(activeCategory) === "styles") $$render(consequent_44); - else if (!get(activeGroup)) $$render(consequent_45, 1); + if_block(node_39, ($$render) => { + if (get(activeCategory) === "styles") $$render(consequent_49); + else if (!get(activeGroup)) $$render(consequent_50, 1); }); } template_effect( ($0) => { - classes_22 = set_class(div_54, 1, "pcr-atb2-card svelte-ibd6yj", null, classes_22, $0); - set_attribute(div_54, "data-item-tag", get(item).item_tag); - set_attribute(div_54, "title", get(item).base_natlang || get(item).display_name || get(item).item_tag); - set_text(text_35, ` ${(get(item).display_name || get(item).item_tag) ?? ""}`); + classes_24 = set_class(div_64, 1, "pcr-atb2-card svelte-ibd6yj", null, classes_24, $0); + set_attribute(div_64, "data-item-tag", get(item).item_tag); + set_attribute(div_64, "title", get(item).base_natlang || get(item).display_name || get(item).item_tag); + set_text(text_38, ` ${(get(item).display_name || get(item).item_tag) ?? ""}`); }, [ () => ({ @@ -6644,31 +6776,31 @@ ${filtered}` : filtered; }) ] ); - delegated("click", div_54, () => pickItem(get(item))); - delegated("contextmenu", div_54, (e) => { + delegated("click", div_64, () => pickItem(get(item))); + delegated("contextmenu", div_64, (e) => { if (get(activeCategory) !== "styles" && get(activeBucket)) openChipQaMenu(e, get(activeBucket), get(item)); }); - append($$anchor3, div_54); + append($$anchor3, div_64); }); - append($$anchor2, div_53); + append($$anchor2, div_63); }; if_block(node_14, ($$render) => { var _a2; - if (get(activeCategory) === "all") $$render(consequent_22); - else if (get(activeCategory) === "subjects") $$render(consequent_32, 1); - else if (get(activeCategory) === "styles" && !((_a2 = modelInfo()) == null ? void 0 : _a2.hash)) $$render(consequent_33, 2); - else if (get(activeCategory) === "styles" && get(stylesCache).loading) $$render(consequent_34, 3); - else if (get(activeCategory) === "styles" && get(visibleItems).length === 0) $$render(consequent_35, 4); - else if (get(activeCategory) !== "styles" && get(activeBucketData).loading) $$render(consequent_36, 5); - else if (get(visibleItems).length === 0) $$render(consequent_37, 6); - else if (get(groupedSections)) $$render(consequent_40, 7); - else $$render(alternate_4, -1); + if (get(activeCategory) === "all") $$render(consequent_27); + else if (get(activeCategory) === "subjects") $$render(consequent_37, 1); + else if (get(activeCategory) === "styles" && !((_a2 = modelInfo()) == null ? void 0 : _a2.hash)) $$render(consequent_38, 2); + else if (get(activeCategory) === "styles" && get(stylesCache).loading) $$render(consequent_39, 3); + else if (get(activeCategory) === "styles" && get(visibleItems).length === 0) $$render(consequent_40, 4); + else if (get(activeCategory) !== "styles" && get(activeBucketData).loading) $$render(consequent_41, 5); + else if (get(visibleItems).length === 0) $$render(consequent_42, 6); + else if (get(groupedSections)) $$render(consequent_45, 7); + else $$render(alternate_5, -1); }); } bind_this(main, ($$value) => set(browserEl, $$value), () => get(browserEl)); var aside_1 = sibling(main, 2); - var node_35 = sibling(child(aside_1), 2); - each(node_35, 17, () => get(subjects), (subj) => subj.id, ($$anchor2, subj) => { + var node_40 = sibling(child(aside_1), 2); + each(node_40, 17, () => get(subjects), (subj) => subj.id, ($$anchor2, subj) => { const typeDef = user_derived(() => SUBJECT_TYPES[get(subj).type] || SUBJECT_TYPES.person); const isActive = user_derived(() => get(activeSubjectId) === get(subj).id); const charThumbBucket = user_derived(() => { @@ -6679,18 +6811,18 @@ ${filtered}` : filtered; var _a2, _b; return ((_a2 = get(subj).character) == null ? void 0 : _a2.kind) === "cast" ? !!((_b = get(castThumbs)[get(subj).character.group]) == null ? void 0 : _b.has(get(subj).character.tag)) : !!(get(subj).character && get(characterThumbs).has(get(subj).character.tag)); }); - var div_59 = root_64(); - let classes_25; - var div_60 = child(div_59); - var node_36 = child(div_60); + var div_69 = root_72(); + let classes_27; + var div_70 = child(div_69); + var node_41 = child(div_70); { - var consequent_46 = ($$anchor3) => { - var span_24 = root_65(); - var img_7 = child(span_24); + var consequent_51 = ($$anchor3) => { + var span_24 = root_73(); + var img_9 = child(span_24); template_effect( ($0) => { set_style(span_24, `border-color:${get(typeDef).color ?? ""}`); - set_attribute(img_7, "src", $0); + set_attribute(img_9, "src", $0); }, [ () => `/promptchain/tag-builder/thumb/${encodeURIComponent(get(charThumbBucket))}/${encodeURIComponent(get(subj).character.tag)}` @@ -6698,187 +6830,187 @@ ${filtered}` : filtered; ); append($$anchor3, span_24); }; - var alternate_5 = ($$anchor3) => { - var span_25 = root_66(); - var text_38 = child(span_25); + var alternate_6 = ($$anchor3) => { + var span_25 = root_74(); + var text_41 = child(span_25); template_effect(() => { set_style(span_25, `background:${get(typeDef).color ?? ""}`); - set_text(text_38, get(subj).letter); + set_text(text_41, get(subj).letter); }); append($$anchor3, span_25); }; - if_block(node_36, ($$render) => { - if (get(subj).character && get(charThumbHas)) $$render(consequent_46); - else $$render(alternate_5, -1); - }); - } - var input_1 = sibling(node_36, 2); - var span_26 = sibling(input_1, 2); - var text_39 = child(span_26); - var node_37 = sibling(span_26, 2); - { - var consequent_47 = ($$anchor3) => { - var span_27 = root_67(); - var text_40 = child(span_27); - template_effect(() => set_text(text_40, get(subj).regionName || "+ new block")); - append($$anchor3, span_27); - }; - if_block(node_37, ($$render) => { - if (get(regionMode)) $$render(consequent_47); - }); - } - var button_5 = sibling(node_37, 2); - var div_61 = sibling(div_60, 2); - var div_62 = sibling(child(div_61), 2); - var span_28 = sibling(child(div_62), 2); - var span_29 = child(span_28); - var button_6 = child(span_29); - var span_30 = child(button_6); - var node_38 = child(span_30); - { - var consequent_49 = ($$anchor3) => { - var fragment_11 = root_68(); - var text_41 = first_child(fragment_11, true); - var node_39 = sibling(text_41); - { - var consequent_48 = ($$anchor4) => { - var text_42 = text(); - template_effect(() => set_text(text_42, `— ${get(subj).character.series ?? ""}`)); - append($$anchor4, text_42); - }; - if_block(node_39, ($$render) => { - if (get(subj).character.series) $$render(consequent_48); - }); - } - template_effect(() => set_text(text_41, get(subj).character.display)); - append($$anchor3, fragment_11); - }; - var alternate_6 = ($$anchor3) => { - var text_43 = text("Pick an identity…"); - append($$anchor3, text_43); - }; - if_block(node_38, ($$render) => { - if (get(subj).character) $$render(consequent_49); + if_block(node_41, ($$render) => { + if (get(subj).character && get(charThumbHas)) $$render(consequent_51); else $$render(alternate_6, -1); }); } - var node_40 = sibling(button_6, 2); - { - var consequent_50 = ($$anchor3) => { - var button_7 = root_71(); - delegated("click", button_7, (e) => { - e.stopPropagation(); - unbindIdentity(get(subj).id); - }); - append($$anchor3, button_7); - }; - if_block(node_40, ($$render) => { - if (get(subj).character) $$render(consequent_50); - }); - } - var div_63 = sibling(div_62, 2); - var span_31 = sibling(child(div_63), 2); - var span_32 = child(span_31); - var button_8 = child(span_32); - var span_33 = child(button_8); - var node_41 = child(span_33); + var input_1 = sibling(node_41, 2); + var span_26 = sibling(input_1, 2); + var text_42 = child(span_26); + var node_42 = sibling(span_26, 2); { var consequent_52 = ($$anchor3) => { - var fragment_13 = root_72(); + var span_27 = root_75(); + var text_43 = child(span_27); + template_effect(() => set_text(text_43, get(subj).regionName || "+ new block")); + append($$anchor3, span_27); + }; + if_block(node_42, ($$render) => { + if (get(regionMode)) $$render(consequent_52); + }); + } + var button_6 = sibling(node_42, 2); + var div_71 = sibling(div_70, 2); + var div_72 = sibling(child(div_71), 2); + var span_28 = sibling(child(div_72), 2); + var span_29 = child(span_28); + var button_7 = child(span_29); + var span_30 = child(button_7); + var node_43 = child(span_30); + { + var consequent_54 = ($$anchor3) => { + var fragment_13 = root_76(); var text_44 = first_child(fragment_13, true); - var node_42 = sibling(text_44); + var node_44 = sibling(text_44); { - var consequent_51 = ($$anchor4) => { + var consequent_53 = ($$anchor4) => { var text_45 = text(); - template_effect(() => set_text(text_45, `— ${get(subj).activeOutfit.character_display ?? ""}`)); + template_effect(() => set_text(text_45, `— ${get(subj).character.series ?? ""}`)); append($$anchor4, text_45); }; - if_block(node_42, ($$render) => { - var _a2; - if (get(subj).activeOutfit.character_tag !== ((_a2 = get(subj).character) == null ? void 0 : _a2.tag)) $$render(consequent_51); + if_block(node_44, ($$render) => { + if (get(subj).character.series) $$render(consequent_53); }); } - template_effect(() => set_text(text_44, get(subj).activeOutfit.name)); + template_effect(() => set_text(text_44, get(subj).character.display)); append($$anchor3, fragment_13); }; var alternate_7 = ($$anchor3) => { - var text_46 = text("Pick outfit…"); + var text_46 = text("Pick an identity…"); append($$anchor3, text_46); }; - if_block(node_41, ($$render) => { - if (get(subj).activeOutfit) $$render(consequent_52); + if_block(node_43, ($$render) => { + if (get(subj).character) $$render(consequent_54); else $$render(alternate_7, -1); }); } - var node_43 = sibling(button_8, 2); - { - var consequent_53 = ($$anchor3) => { - var button_9 = root_75(); - delegated("click", button_9, (e) => { - e.stopPropagation(); - removePreset(get(subj).id, "outfit"); - }); - append($$anchor3, button_9); - }; - if_block(node_43, ($$render) => { - if (get(subj).activeOutfit) $$render(consequent_53); - }); - } - var div_64 = sibling(div_63, 2); - var span_34 = sibling(child(div_64), 2); - var span_35 = child(span_34); - var button_10 = child(span_35); - var span_36 = child(button_10); - var node_44 = child(span_36); + var node_45 = sibling(button_7, 2); { var consequent_55 = ($$anchor3) => { - var fragment_15 = root_76(); + var button_8 = root_79(); + delegated("click", button_8, (e) => { + e.stopPropagation(); + unbindIdentity(get(subj).id); + }); + append($$anchor3, button_8); + }; + if_block(node_45, ($$render) => { + if (get(subj).character) $$render(consequent_55); + }); + } + var div_73 = sibling(div_72, 2); + var span_31 = sibling(child(div_73), 2); + var span_32 = child(span_31); + var button_9 = child(span_32); + var span_33 = child(button_9); + var node_46 = child(span_33); + { + var consequent_57 = ($$anchor3) => { + var fragment_15 = root_80(); var text_47 = first_child(fragment_15, true); - var node_45 = sibling(text_47); + var node_47 = sibling(text_47); { - var consequent_54 = ($$anchor4) => { + var consequent_56 = ($$anchor4) => { var text_48 = text(); - template_effect(() => set_text(text_48, `— ${get(subj).activePose.character_display ?? ""}`)); + template_effect(() => set_text(text_48, `— ${get(subj).activeOutfit.character_display ?? ""}`)); append($$anchor4, text_48); }; - if_block(node_45, ($$render) => { + if_block(node_47, ($$render) => { var _a2; - if (get(subj).activePose.character_tag !== ((_a2 = get(subj).character) == null ? void 0 : _a2.tag)) $$render(consequent_54); + if (get(subj).activeOutfit.character_tag !== ((_a2 = get(subj).character) == null ? void 0 : _a2.tag)) $$render(consequent_56); }); } - template_effect(() => set_text(text_47, get(subj).activePose.name)); + template_effect(() => set_text(text_47, get(subj).activeOutfit.name)); append($$anchor3, fragment_15); }; var alternate_8 = ($$anchor3) => { - var text_49 = text("Pick pose…"); + var text_49 = text("Pick outfit…"); append($$anchor3, text_49); }; - if_block(node_44, ($$render) => { - if (get(subj).activePose) $$render(consequent_55); + if_block(node_46, ($$render) => { + if (get(subj).activeOutfit) $$render(consequent_57); else $$render(alternate_8, -1); }); } - var node_46 = sibling(button_10, 2); + var node_48 = sibling(button_9, 2); { - var consequent_56 = ($$anchor3) => { - var button_11 = root_79(); - delegated("click", button_11, (e) => { + var consequent_58 = ($$anchor3) => { + var button_10 = root_83(); + delegated("click", button_10, (e) => { + e.stopPropagation(); + removePreset(get(subj).id, "outfit"); + }); + append($$anchor3, button_10); + }; + if_block(node_48, ($$render) => { + if (get(subj).activeOutfit) $$render(consequent_58); + }); + } + var div_74 = sibling(div_73, 2); + var span_34 = sibling(child(div_74), 2); + var span_35 = child(span_34); + var button_11 = child(span_35); + var span_36 = child(button_11); + var node_49 = child(span_36); + { + var consequent_60 = ($$anchor3) => { + var fragment_17 = root_84(); + var text_50 = first_child(fragment_17, true); + var node_50 = sibling(text_50); + { + var consequent_59 = ($$anchor4) => { + var text_51 = text(); + template_effect(() => set_text(text_51, `— ${get(subj).activePose.character_display ?? ""}`)); + append($$anchor4, text_51); + }; + if_block(node_50, ($$render) => { + var _a2; + if (get(subj).activePose.character_tag !== ((_a2 = get(subj).character) == null ? void 0 : _a2.tag)) $$render(consequent_59); + }); + } + template_effect(() => set_text(text_50, get(subj).activePose.name)); + append($$anchor3, fragment_17); + }; + var alternate_9 = ($$anchor3) => { + var text_52 = text("Pick pose…"); + append($$anchor3, text_52); + }; + if_block(node_49, ($$render) => { + if (get(subj).activePose) $$render(consequent_60); + else $$render(alternate_9, -1); + }); + } + var node_51 = sibling(button_11, 2); + { + var consequent_61 = ($$anchor3) => { + var button_12 = root_87(); + delegated("click", button_12, (e) => { e.stopPropagation(); removePreset(get(subj).id, "pose"); }); - append($$anchor3, button_11); + append($$anchor3, button_12); }; - if_block(node_46, ($$render) => { - if (get(subj).activePose) $$render(consequent_56); + if_block(node_51, ($$render) => { + if (get(subj).activePose) $$render(consequent_61); }); } - var node_47 = sibling(div_61, 2); - each(node_47, 17, () => get(typeDef).slotCategories, index, ($$anchor3, catKey) => { + var node_52 = sibling(div_71, 2); + each(node_52, 17, () => get(typeDef).slotCategories, index, ($$anchor3, catKey) => { const catDef = user_derived(() => CATEGORIES.find((c) => c.key === get(catKey))); - var fragment_17 = comment(); - var node_48 = first_child(fragment_17); + var fragment_19 = comment(); + var node_53 = first_child(fragment_19); { - var consequent_64 = ($$anchor4) => { + var consequent_69 = ($$anchor4) => { const catGroups = user_derived(() => get(bucketCache)[get(catDef).bucket].groups); const catSlots = user_derived(() => get(subj).slots[get(catKey)] || {}); const multiSet = user_derived(() => MULTI_GROUPS[get(catDef).bucket] || /* @__PURE__ */ new Set()); @@ -6888,102 +7020,102 @@ ${filtered}` : filtered; return !!((_a2 = get(subj).expandedSections) == null ? void 0 : _a2[get(catKey)]); }); const hasChev = user_derived(() => get(emptyCount) > 0); - var div_65 = root_81(); - var div_66 = child(div_65); - let classes_26; - var span_37 = child(div_66); - var text_50 = child(span_37); - var node_49 = sibling(span_37, 2); + var div_75 = root_89(); + var div_76 = child(div_75); + let classes_28; + var span_37 = child(div_76); + var text_53 = child(span_37); + var node_54 = sibling(span_37, 2); { - var consequent_57 = ($$anchor5) => { - var span_38 = root_82(); - var text_51 = child(span_38); - template_effect(() => set_text(text_51, `${get(isExpanded) ? "▾" : "▸"} +${get(emptyCount) ?? ""}`)); + var consequent_62 = ($$anchor5) => { + var span_38 = root_90(); + var text_54 = child(span_38); + template_effect(() => set_text(text_54, `${get(isExpanded) ? "▾" : "▸"} +${get(emptyCount) ?? ""}`)); append($$anchor5, span_38); }; - if_block(node_49, ($$render) => { - if (get(hasChev)) $$render(consequent_57); + if_block(node_54, ($$render) => { + if (get(hasChev)) $$render(consequent_62); }); } - var node_50 = sibling(div_66, 2); + var node_55 = sibling(div_76, 2); { - var consequent_58 = ($$anchor5) => { - var div_67 = root_83(); - var span_39 = sibling(child(div_67), 2); + var consequent_63 = ($$anchor5) => { + var div_77 = root_91(); + var span_39 = sibling(child(div_77), 2); var span_40 = child(span_39); - var text_52 = child(span_40); - var button_12 = sibling(text_52); - template_effect(() => set_text(text_52, `${get(subj).character.display ?? ""} `)); + var text_55 = child(span_40); + var button_13 = sibling(text_55); + template_effect(() => set_text(text_55, `${get(subj).character.display ?? ""} `)); delegated("click", span_40, (e) => { e.stopPropagation(); jumpToIdentity(get(subj).id); }); - delegated("click", button_12, (e) => { + delegated("click", button_13, (e) => { e.stopPropagation(); unbindIdentity(get(subj).id); }); - append($$anchor5, div_67); + append($$anchor5, div_77); }; - if_block(node_50, ($$render) => { - if (get(catKey) === "appearance" && get(subj).character) $$render(consequent_58); + if_block(node_55, ($$render) => { + if (get(catKey) === "appearance" && get(subj).character) $$render(consequent_63); }); } - var node_51 = sibling(node_50, 2); + var node_56 = sibling(node_55, 2); { - var consequent_59 = ($$anchor5) => { - var div_68 = root_84(); - var span_41 = sibling(child(div_68), 2); - var node_52 = child(span_41); - each(node_52, 19, () => get(subj).modifiers || [], (tok, mi) => tok + " " + mi, ($$anchor6, tok) => { - var span_42 = root_85(); - var text_53 = child(span_42); - var button_13 = sibling(text_53); - template_effect(() => set_text(text_53, `${get(tok) ?? ""} `)); + var consequent_64 = ($$anchor5) => { + var div_78 = root_92(); + var span_41 = sibling(child(div_78), 2); + var node_57 = child(span_41); + each(node_57, 19, () => get(subj).modifiers || [], (tok, mi) => tok + " " + mi, ($$anchor6, tok) => { + var span_42 = root_93(); + var text_56 = child(span_42); + var button_14 = sibling(text_56); + template_effect(() => set_text(text_56, `${get(tok) ?? ""} `)); delegated("click", span_42, (e) => { e.stopPropagation(); jumpToModifier(get(subj).id, get(tok)); }); - delegated("click", button_13, (e) => { + delegated("click", button_14, (e) => { e.stopPropagation(); removeModifier(get(subj).id, get(tok)); }); append($$anchor6, span_42); }); - var span_43 = sibling(node_52, 2); + var span_43 = sibling(node_57, 2); delegated("click", span_43, (e) => { e.stopPropagation(); openModifierPicker(get(subj).id, e.currentTarget); }); - append($$anchor5, div_68); + append($$anchor5, div_78); }; - if_block(node_51, ($$render) => { - if (get(catKey) === "appearance") $$render(consequent_59); + if_block(node_56, ($$render) => { + if (get(catKey) === "appearance") $$render(consequent_64); }); } - var node_53 = sibling(node_51, 2); - each(node_53, 17, () => get(catGroups), index, ($$anchor5, g) => { + var node_58 = sibling(node_56, 2); + each(node_58, 17, () => get(catGroups), index, ($$anchor5, g) => { const sel = user_derived(() => get(catSlots)[get(g).group_name] || []); const isMulti = user_derived(() => get(multiSet).has(get(g).group_name)); - var fragment_18 = comment(); - var node_54 = first_child(fragment_18); + var fragment_20 = comment(); + var node_59 = first_child(fragment_20); { - var consequent_63 = ($$anchor6) => { - var div_69 = root_87(); - var span_44 = child(div_69); - var text_54 = child(span_44); - var node_55 = sibling(text_54); + var consequent_68 = ($$anchor6) => { + var div_79 = root_95(); + var span_44 = child(div_79); + var text_57 = child(span_44); + var node_60 = sibling(text_57); { - var consequent_60 = ($$anchor7) => { - var span_45 = root_88(); + var consequent_65 = ($$anchor7) => { + var span_45 = root_96(); append($$anchor7, span_45); }; - if_block(node_55, ($$render) => { - if (get(isMulti)) $$render(consequent_60); + if_block(node_60, ($$render) => { + if (get(isMulti)) $$render(consequent_65); }); } var span_46 = sibling(span_44, 2); - var node_56 = child(span_46); - each(node_56, 17, () => get(sel), (item) => item.item_tag, ($$anchor7, item) => { + var node_61 = child(span_46); + each(node_61, 17, () => get(sel), (item) => item.item_tag, ($$anchor7, item) => { const hasMods = user_derived(() => !!get(item).modifiers); const isFurn = user_derived(() => isFurnitureChip(get(item))); const capColor = user_derived(() => { @@ -6991,15 +7123,15 @@ ${filtered}` : filtered; return get(isFurn) ? get(item)._furniture.color ? customizerColorHex(get(item)._furniture.color) : null : get(hasMods) ? customizerColorHex((_a2 = get(item).modifiers) == null ? void 0 : _a2.color) : null; }); const modTooltip = user_derived(() => get(isFurn) ? "Edit furniture" : get(hasMods) ? modifierTooltip(get(item)) : ""); - var span_47 = root_89(); - let classes_27; - var node_57 = child(span_47); + var span_47 = root_97(); + let classes_29; + var node_62 = child(span_47); { - var consequent_61 = ($$anchor8) => { - var span_48 = root_90(); - let classes_28; + var consequent_66 = ($$anchor8) => { + var span_48 = root_98(); + let classes_30; template_effect(() => { - classes_28 = set_class(span_48, 1, "pcr-atb2-chip-cap svelte-ibd6yj", null, classes_28, { + classes_30 = set_class(span_48, 1, "pcr-atb2-chip-cap svelte-ibd6yj", null, classes_30, { "pcr-atb2-chip-cap-filled": !!get(capColor) || get(isFurn), "pcr-atb2-chip-cap-hollow": !get(capColor) && !get(isFurn) }); @@ -7014,18 +7146,18 @@ ${filtered}` : filtered; }); append($$anchor8, span_48); }; - if_block(node_57, ($$render) => { - if (get(hasMods) || get(isFurn)) $$render(consequent_61); + if_block(node_62, ($$render) => { + if (get(hasMods) || get(isFurn)) $$render(consequent_66); }); } - var span_49 = sibling(node_57, 2); - var text_55 = child(span_49); - var button_14 = sibling(span_49, 2); + var span_49 = sibling(node_62, 2); + var text_58 = child(span_49); + var button_15 = sibling(span_49, 2); template_effect( ($0) => { - classes_27 = set_class(span_47, 1, "pcr-atb2-chip pcr-atb2-chip-jumpable svelte-ibd6yj", null, classes_27, $0); + classes_29 = set_class(span_47, 1, "pcr-atb2-chip pcr-atb2-chip-jumpable svelte-ibd6yj", null, classes_29, $0); set_attribute(span_49, "title", `Jump to ${get(catDef).label} / ${get(g).display_name || get(g).group_name}`); - set_text(text_55, get(item).display_name || get(item).item_tag); + set_text(text_58, get(item).display_name || get(item).item_tag); }, [ () => ({ @@ -7038,177 +7170,177 @@ ${filtered}` : filtered; e.stopPropagation(); jumpToSlotChip(get(subj).id, get(catKey), get(g).group_name, get(item).item_tag); }); - delegated("click", button_14, (e) => { + delegated("click", button_15, (e) => { e.stopPropagation(); clearSubjectChip(get(subj).id, get(catKey), get(g).group_name, get(item).item_tag); }); append($$anchor7, span_47); }); - var node_58 = sibling(node_56, 2); + var node_63 = sibling(node_61, 2); { - var consequent_62 = ($$anchor7) => { - var span_50 = root_91(); + var consequent_67 = ($$anchor7) => { + var span_50 = root_99(); delegated("click", span_50, (e) => { e.stopPropagation(); jumpToSlot(get(subj).id, get(catKey), get(g).group_name); }); append($$anchor7, span_50); }; - if_block(node_58, ($$render) => { - if (get(sel).length === 0 || get(isMulti)) $$render(consequent_62); + if_block(node_63, ($$render) => { + if (get(sel).length === 0 || get(isMulti)) $$render(consequent_67); }); } - template_effect(() => set_text(text_54, `${(get(g).display_name || get(g).group_name) ?? ""} `)); - append($$anchor6, div_69); + template_effect(() => set_text(text_57, `${(get(g).display_name || get(g).group_name) ?? ""} `)); + append($$anchor6, div_79); }; - if_block(node_54, ($$render) => { - if (get(sel).length > 0 || get(isExpanded)) $$render(consequent_63); + if_block(node_59, ($$render) => { + if (get(sel).length > 0 || get(isExpanded)) $$render(consequent_68); }); } - append($$anchor5, fragment_18); + append($$anchor5, fragment_20); }); template_effect(() => { - classes_26 = set_class(div_66, 1, "pcr-atb2-subj-section-header svelte-ibd6yj", null, classes_26, { clickable: get(hasChev) }); - set_text(text_50, get(catDef).label); + classes_28 = set_class(div_76, 1, "pcr-atb2-subj-section-header svelte-ibd6yj", null, classes_28, { clickable: get(hasChev) }); + set_text(text_53, get(catDef).label); }); - delegated("click", div_66, (e) => { + delegated("click", div_76, (e) => { if (get(hasChev)) { e.stopPropagation(); toggleSubjectSection(get(subj).id, get(catKey)); } }); - append($$anchor4, div_65); + append($$anchor4, div_75); }; - if_block(node_48, ($$render) => { + if_block(node_53, ($$render) => { var _a2, _b; - if (get(catDef) && get(catDef).enabled && ((_b = (_a2 = get(bucketCache)[get(catDef).bucket]) == null ? void 0 : _a2.groups) == null ? void 0 : _b.length)) $$render(consequent_64); + if (get(catDef) && get(catDef).enabled && ((_b = (_a2 = get(bucketCache)[get(catDef).bucket]) == null ? void 0 : _a2.groups) == null ? void 0 : _b.length)) $$render(consequent_69); }); } - append($$anchor3, fragment_17); + append($$anchor3, fragment_19); }); - var node_59 = sibling(node_47, 2); + var node_64 = sibling(node_52, 2); { - var consequent_65 = ($$anchor3) => { - var div_70 = root_92(); - var div_71 = sibling(child(div_70), 2); - var span_51 = child(div_71); + var consequent_70 = ($$anchor3) => { + var div_80 = root_100(); + var div_81 = sibling(child(div_80), 2); + var span_51 = child(div_81); each(span_51, 23, () => get(subj).freeform, (tok, ti) => tok + "\0" + ti, ($$anchor4, tok) => { - var span_52 = root_93(); - var text_56 = child(span_52); - var button_15 = sibling(text_56); - template_effect(() => set_text(text_56, `${get(tok) ?? ""} `)); - delegated("click", button_15, (e) => { + var span_52 = root_101(); + var text_59 = child(span_52); + var button_16 = sibling(text_59); + template_effect(() => set_text(text_59, `${get(tok) ?? ""} `)); + delegated("click", button_16, (e) => { e.stopPropagation(); removeFreeform(get(subj).id, get(tok)); }); append($$anchor4, span_52); }); - append($$anchor3, div_70); + append($$anchor3, div_80); }; - if_block(node_59, ($$render) => { - if (get(subj).freeform && get(subj).freeform.length) $$render(consequent_65); + if_block(node_64, ($$render) => { + if (get(subj).freeform && get(subj).freeform.length) $$render(consequent_70); }); } - var node_60 = sibling(node_59, 2); - each(node_60, 16, () => ["outfit", "pose", "interaction", "scene"], index, ($$anchor3, sectionKey) => { + var node_65 = sibling(node_64, 2); + each(node_65, 16, () => ["outfit", "pose", "interaction", "scene"], index, ($$anchor3, sectionKey) => { const items = user_derived(() => { var _a2; return ((_a2 = get(subj).sectionFreeform) == null ? void 0 : _a2[sectionKey]) || []; }); - var fragment_19 = comment(); - var node_61 = first_child(fragment_19); + var fragment_21 = comment(); + var node_66 = first_child(fragment_21); { - var consequent_66 = ($$anchor4) => { - var div_72 = root_95(); - var div_73 = child(div_72); - var span_53 = child(div_73); - var text_57 = child(span_53); - var div_74 = sibling(div_73, 2); - var span_54 = child(div_74); + var consequent_71 = ($$anchor4) => { + var div_82 = root_103(); + var div_83 = child(div_82); + var span_53 = child(div_83); + var text_60 = child(span_53); + var div_84 = sibling(div_83, 2); + var span_54 = child(div_84); each(span_54, 20, () => get(items), (tok) => tok, ($$anchor5, tok) => { - var span_55 = root_96(); - var text_58 = child(span_55); - var button_16 = sibling(text_58); - template_effect(() => set_text(text_58, `${tok ?? ""} `)); - delegated("click", button_16, (e) => { + var span_55 = root_104(); + var text_61 = child(span_55); + var button_17 = sibling(text_61); + template_effect(() => set_text(text_61, `${tok ?? ""} `)); + delegated("click", button_17, (e) => { e.stopPropagation(); removeSectionFreeform(get(subj).id, sectionKey, tok); }); append($$anchor5, span_55); }); - template_effect(() => set_text(text_57, `Unbound (${sectionKey ?? ""})`)); - append($$anchor4, div_72); + template_effect(() => set_text(text_60, `Unbound (${sectionKey ?? ""})`)); + append($$anchor4, div_82); }; - if_block(node_61, ($$render) => { - if (get(items).length) $$render(consequent_66); + if_block(node_66, ($$render) => { + if (get(items).length) $$render(consequent_71); }); } - append($$anchor3, fragment_19); + append($$anchor3, fragment_21); }); template_effect(() => { - classes_25 = set_class(div_59, 1, "pcr-atb2-card2 pcr-atb2-subject-card svelte-ibd6yj", null, classes_25, { active: get(isActive) }); - set_style(div_59, `--subj-color:${get(typeDef).color ?? ""}`); + classes_27 = set_class(div_69, 1, "pcr-atb2-card2 pcr-atb2-subject-card svelte-ibd6yj", null, classes_27, { active: get(isActive) }); + set_style(div_69, `--subj-color:${get(typeDef).color ?? ""}`); set_value(input_1, get(subj).name); - set_text(text_39, get(typeDef).label); + set_text(text_42, get(typeDef).label); }); - delegated("click", div_59, () => setActiveSubject(get(subj).id)); + delegated("click", div_69, () => setActiveSubject(get(subj).id)); delegated("input", input_1, (e) => renameSubject(get(subj).id, e.target.value)); delegated("click", input_1, (e) => e.stopPropagation()); - delegated("click", button_5, (e) => { + delegated("click", button_6, (e) => { e.stopPropagation(); deleteSubject(get(subj).id); }); - delegated("click", button_6, (e) => { + delegated("click", button_7, (e) => { e.stopPropagation(); toggleIdentityPicker(get(subj).id, e.currentTarget); }); - delegated("click", button_8, (e) => { + delegated("click", button_9, (e) => { e.stopPropagation(); togglePresetPicker("outfit", get(subj).id, e.currentTarget); }); - delegated("click", button_10, (e) => { + delegated("click", button_11, (e) => { e.stopPropagation(); togglePresetPicker("pose", get(subj).id, e.currentTarget); }); - append($$anchor2, div_59); + append($$anchor2, div_69); }); - var div_75 = sibling(node_35, 2); - var node_62 = sibling(div_75, 2); + var div_85 = sibling(node_40, 2); + var node_67 = sibling(div_85, 2); { - var consequent_72 = ($$anchor2) => { - var div_76 = root_97(); - let classes_29; - var div_77 = child(div_76); - var button_17 = sibling(child(div_77), 6); - var node_63 = sibling(div_77, 2); - each(node_63, 17, () => get(sceneGroupsList), index, ($$anchor3, g) => { + var consequent_77 = ($$anchor2) => { + var div_86 = root_105(); + let classes_31; + var div_87 = child(div_86); + var button_18 = sibling(child(div_87), 6); + var node_68 = sibling(div_87, 2); + each(node_68, 17, () => get(sceneGroupsList), index, ($$anchor3, g) => { const sel = user_derived(() => get(sceneSelections)[get(g).group_name] || []); const isMulti = user_derived(() => MULTI_GROUPS.scene.has(get(g).group_name)); - var div_78 = root_98(); - var span_56 = child(div_78); - var text_59 = child(span_56); - var node_64 = sibling(text_59); + var div_88 = root_106(); + var span_56 = child(div_88); + var text_62 = child(span_56); + var node_69 = sibling(text_62); { - var consequent_67 = ($$anchor4) => { - var span_57 = root_99(); + var consequent_72 = ($$anchor4) => { + var span_57 = root_107(); append($$anchor4, span_57); }; - if_block(node_64, ($$render) => { - if (get(isMulti)) $$render(consequent_67); + if_block(node_69, ($$render) => { + if (get(isMulti)) $$render(consequent_72); }); } var span_58 = sibling(span_56, 2); - var node_65 = child(span_58); - each(node_65, 17, () => get(sel), (item) => item.item_tag, ($$anchor4, item) => { - var span_59 = root_100(); - let classes_30; - var text_60 = child(span_59); - var button_18 = sibling(text_60); + var node_70 = child(span_58); + each(node_70, 17, () => get(sel), (item) => item.item_tag, ($$anchor4, item) => { + var span_59 = root_108(); + let classes_32; + var text_63 = child(span_59); + var button_19 = sibling(text_63); template_effect( ($0) => { - classes_30 = set_class(span_59, 1, "pcr-atb2-chip pcr-atb2-chip-jumpable svelte-ibd6yj", null, classes_30, $0); + classes_32 = set_class(span_59, 1, "pcr-atb2-chip pcr-atb2-chip-jumpable svelte-ibd6yj", null, classes_32, $0); set_attribute(span_59, "title", `Jump to Scene / ${(get(g).display_name || get(g).group_name) ?? ""}`); - set_text(text_60, `${(get(item).display_name || get(item).item_tag) ?? ""} `); + set_text(text_63, `${(get(item).display_name || get(item).item_tag) ?? ""} `); }, [ () => ({ "pcr-atb2-chip-unprocessed": isItemUnprocessed(get(item)) }) @@ -7222,74 +7354,74 @@ ${filtered}` : filtered; itemTag: get(item).item_tag }); }); - delegated("click", button_18, (e) => { + delegated("click", button_19, (e) => { e.stopPropagation(); clearSceneChip(get(g).group_name, get(item).item_tag); }); append($$anchor4, span_59); }); - var node_66 = sibling(node_65, 2); + var node_71 = sibling(node_70, 2); { - var consequent_68 = ($$anchor4) => { - var span_60 = root_101(); + var consequent_73 = ($$anchor4) => { + var span_60 = root_109(); delegated("click", span_60, () => { set(activeCategory, "scene"); set(activeGroup, get(g).group_name, true); }); append($$anchor4, span_60); }; - if_block(node_66, ($$render) => { - if (get(sel).length === 0 || get(isMulti)) $$render(consequent_68); + if_block(node_71, ($$render) => { + if (get(sel).length === 0 || get(isMulti)) $$render(consequent_73); }); } - template_effect(() => set_text(text_59, `${(get(g).display_name || get(g).group_name) ?? ""} `)); - append($$anchor3, div_78); + template_effect(() => set_text(text_62, `${(get(g).display_name || get(g).group_name) ?? ""} `)); + append($$anchor3, div_88); }); - var node_67 = sibling(node_63, 2); + var node_72 = sibling(node_68, 2); { - var consequent_69 = ($$anchor3) => { - var div_79 = root_102(); - var span_61 = sibling(child(div_79), 2); + var consequent_74 = ($$anchor3) => { + var div_89 = root_110(); + var span_61 = sibling(child(div_89), 2); each(span_61, 23, () => get(sceneFreeform), (tok, ti) => tok + " " + ti, ($$anchor4, tok) => { - var span_62 = root_103(); - var text_61 = child(span_62); - var button_19 = sibling(text_61); - template_effect(() => set_text(text_61, `${get(tok) ?? ""} `)); - delegated("click", button_19, (e) => { + var span_62 = root_111(); + var text_64 = child(span_62); + var button_20 = sibling(text_64); + template_effect(() => set_text(text_64, `${get(tok) ?? ""} `)); + delegated("click", button_20, (e) => { e.stopPropagation(); removeSceneFreeform(get(tok)); }); append($$anchor4, span_62); }); - append($$anchor3, div_79); + append($$anchor3, div_89); }; - if_block(node_67, ($$render) => { - if (get(sceneFreeform).length) $$render(consequent_69); + if_block(node_72, ($$render) => { + if (get(sceneFreeform).length) $$render(consequent_74); }); } - var node_68 = sibling(node_67, 2); - each(node_68, 17, () => { + var node_73 = sibling(node_72, 2); + each(node_73, 17, () => { var _a2; return ((_a2 = get(bucketCache).furniture) == null ? void 0 : _a2.groups) || []; }, index, ($$anchor3, fg) => { const fsel = user_derived(() => get(sceneSelections)[get(fg).group_name] || []); - var fragment_20 = comment(); - var node_69 = first_child(fragment_20); + var fragment_22 = comment(); + var node_74 = first_child(fragment_22); { - var consequent_71 = ($$anchor4) => { - var div_80 = root_105(); - var span_63 = child(div_80); - var text_62 = child(span_63); + var consequent_76 = ($$anchor4) => { + var div_90 = root_113(); + var span_63 = child(div_90); + var text_65 = child(span_63); var span_64 = sibling(span_63, 2); each(span_64, 21, () => get(fsel), (item) => item.item_tag, ($$anchor5, item) => { const isCustomized = user_derived(() => isFurnitureChip(get(item))); - var span_65 = root_106(); - let classes_31; - var node_70 = child(span_65); + var span_65 = root_114(); + let classes_33; + var node_75 = child(span_65); { - var consequent_70 = ($$anchor6) => { + var consequent_75 = ($$anchor6) => { const sceneCapColor = user_derived(() => get(item)._furniture.color ? customizerColorHex(get(item)._furniture.color) : null); - var span_66 = root_107(); + var span_66 = root_115(); template_effect(() => set_style(span_66, get(sceneCapColor) ? `background:${get(sceneCapColor)}` : "background:#7c3aed")); delegated("click", span_66, (e) => { e.stopPropagation(); @@ -7297,345 +7429,345 @@ ${filtered}` : filtered; }); append($$anchor6, span_66); }; - if_block(node_70, ($$render) => { - if (get(isCustomized)) $$render(consequent_70); + if_block(node_75, ($$render) => { + if (get(isCustomized)) $$render(consequent_75); }); } - var span_67 = sibling(node_70, 2); - var text_63 = child(span_67); - var button_20 = sibling(span_67, 2); + var span_67 = sibling(node_75, 2); + var text_66 = child(span_67); + var button_21 = sibling(span_67, 2); template_effect(() => { - classes_31 = set_class(span_65, 1, "pcr-atb2-chip svelte-ibd6yj", null, classes_31, { "pcr-atb2-chip-customized": get(isCustomized) }); - set_text(text_63, get(item).display_name || get(item).item_tag); + classes_33 = set_class(span_65, 1, "pcr-atb2-chip svelte-ibd6yj", null, classes_33, { "pcr-atb2-chip-customized": get(isCustomized) }); + set_text(text_66, get(item).display_name || get(item).item_tag); }); - delegated("click", button_20, (e) => { + delegated("click", button_21, (e) => { e.stopPropagation(); clearSceneChip(get(fg).group_name, get(item).item_tag); }); append($$anchor5, span_65); }); - template_effect(() => set_text(text_62, `${(get(fg).icon || "📦") ?? ""} ${(get(fg).display_name || get(fg).group_name) ?? ""} `)); - append($$anchor4, div_80); + template_effect(() => set_text(text_65, `${(get(fg).icon || "📦") ?? ""} ${(get(fg).display_name || get(fg).group_name) ?? ""} `)); + append($$anchor4, div_90); }; - if_block(node_69, ($$render) => { - if (get(fsel).length > 0) $$render(consequent_71); + if_block(node_74, ($$render) => { + if (get(fsel).length > 0) $$render(consequent_76); }); } - append($$anchor3, fragment_20); + append($$anchor3, fragment_22); }); - template_effect(() => classes_29 = set_class(div_76, 1, "pcr-atb2-card2 pcr-atb2-scene-card svelte-ibd6yj", null, classes_29, { active: get(activeCategoryDef).scope === "global" })); - delegated("click", button_17, deleteScene); - append($$anchor2, div_76); + template_effect(() => classes_31 = set_class(div_86, 1, "pcr-atb2-card2 pcr-atb2-scene-card svelte-ibd6yj", null, classes_31, { active: get(activeCategoryDef).scope === "global" })); + delegated("click", button_18, deleteScene); + append($$anchor2, div_86); }; - var alternate_9 = ($$anchor2) => { - var div_81 = root_108(); - delegated("click", div_81, spawnScene); - append($$anchor2, div_81); + var alternate_10 = ($$anchor2) => { + var div_91 = root_116(); + delegated("click", div_91, spawnScene); + append($$anchor2, div_91); }; - if_block(node_62, ($$render) => { - if (get(sceneSpawned)) $$render(consequent_72); - else $$render(alternate_9, -1); + if_block(node_67, ($$render) => { + if (get(sceneSpawned)) $$render(consequent_77); + else $$render(alternate_10, -1); }); } - var node_71 = sibling(node_62, 2); + var node_76 = sibling(node_67, 2); { - var consequent_73 = ($$anchor2) => { - var div_82 = root_109(); - var div_83 = child(div_82); - var span_68 = sibling(child(div_83), 2); - var text_64 = child(span_68); - var button_21 = sibling(span_68, 4); - var div_84 = sibling(div_83, 2); - var span_69 = child(div_84); + var consequent_78 = ($$anchor2) => { + var div_92 = root_117(); + var div_93 = child(div_92); + var span_68 = sibling(child(div_93), 2); + var text_67 = child(span_68); + var button_22 = sibling(span_68, 4); + var div_94 = sibling(div_93, 2); + var span_69 = child(div_94); each(span_69, 20, () => get(activeStyle).tags, (tag) => tag, ($$anchor3, tag) => { - var span_70 = root_110(); - var text_65 = child(span_70); - template_effect(() => set_text(text_65, tag)); + var span_70 = root_118(); + var text_68 = child(span_70); + template_effect(() => set_text(text_68, tag)); append($$anchor3, span_70); }); - template_effect(() => set_text(text_64, get(activeStyle).name)); + template_effect(() => set_text(text_67, get(activeStyle).name)); delegated("click", span_68, (e) => { e.stopPropagation(); jumpToTag({ category: "styles", itemTag: get(activeStyle).id }); }); - delegated("click", button_21, deleteStyleCard); - append($$anchor2, div_82); + delegated("click", button_22, deleteStyleCard); + append($$anchor2, div_92); }; - var consequent_74 = ($$anchor2) => { - var div_85 = root_111(); - delegated("click", div_85, () => { + var consequent_79 = ($$anchor2) => { + var div_95 = root_119(); + delegated("click", div_95, () => { set(activeCategory, "styles"); set(activeGroup, null); }); - append($$anchor2, div_85); + append($$anchor2, div_95); }; - if_block(node_71, ($$render) => { + if_block(node_76, ($$render) => { var _a2; - if (get(styleSpawned) && get(activeStyle)) $$render(consequent_73); - else if ((_a2 = modelInfo()) == null ? void 0 : _a2.hash) $$render(consequent_74, 1); + if (get(styleSpawned) && get(activeStyle)) $$render(consequent_78); + else if ((_a2 = modelInfo()) == null ? void 0 : _a2.hash) $$render(consequent_79, 1); }); } - var div_86 = sibling(div_3, 2); - var div_87 = child(div_86); - var div_88 = child(div_87); - let classes_32; - var div_89 = sibling(div_88, 2); - let classes_33; - var button_22 = sibling(div_87, 4); - var button_23 = sibling(button_22, 2); - var text_66 = child(button_23); - var node_72 = sibling(div_86, 2); + var div_96 = sibling(div_3, 2); + var div_97 = child(div_96); + var div_98 = child(div_97); + let classes_34; + var div_99 = sibling(div_98, 2); + let classes_35; + var button_23 = sibling(div_97, 4); + var button_24 = sibling(button_23, 2); + var text_69 = child(button_24); + var node_77 = sibling(div_96, 2); { - var consequent_75 = ($$anchor2) => { + var consequent_80 = ($$anchor2) => { const curStatus = user_derived(() => get(chipQaMenu).item.natlang_status ?? "unprocessed"); const tagOutput = user_derived(() => get(chipQaMenu).item.base_tags || get(chipQaMenu).item.item_tag); const natlangOutput = user_derived(() => get(chipQaMenu).item.base_natlang || ""); - var fragment_21 = root_112(); - var div_90 = first_child(fragment_21); - var div_91 = sibling(div_90, 2); - var div_92 = child(div_91); - var text_67 = child(div_92); - var div_93 = sibling(div_92, 2); - var div_94 = child(div_93); - var div_95 = sibling(child(div_94), 2); - var text_68 = child(div_95); - var div_96 = sibling(div_94, 2); - var div_97 = sibling(child(div_96), 2); - var text_69 = child(div_97); - var div_98 = sibling(div_93, 2); - var button_24 = child(div_98); - let classes_34; - var button_25 = sibling(button_24, 2); - let classes_35; - var button_26 = sibling(button_25, 2); + var fragment_23 = root_120(); + var div_100 = first_child(fragment_23); + var div_101 = sibling(div_100, 2); + var div_102 = child(div_101); + var text_70 = child(div_102); + var div_103 = sibling(div_102, 2); + var div_104 = child(div_103); + var div_105 = sibling(child(div_104), 2); + var text_71 = child(div_105); + var div_106 = sibling(div_104, 2); + var div_107 = sibling(child(div_106), 2); + var text_72 = child(div_107); + var div_108 = sibling(div_103, 2); + var button_25 = child(div_108); let classes_36; + var button_26 = sibling(button_25, 2); + let classes_37; + var button_27 = sibling(button_26, 2); + let classes_38; template_effect(() => { - set_style(div_91, `left:${get(chipQaMenu).x ?? ""}px;top:${get(chipQaMenu).y ?? ""}px`); - set_text(text_67, get(chipQaMenu).item.display_name || get(chipQaMenu).item.item_tag); - set_text(text_68, get(tagOutput)); - set_text(text_69, get(natlangOutput) || "(empty)"); - classes_34 = set_class(button_24, 1, "pcr-atb2-qa-menu-item svelte-ibd6yj", null, classes_34, { current: get(curStatus) === "normalized" }); - classes_35 = set_class(button_25, 1, "pcr-atb2-qa-menu-item svelte-ibd6yj", null, classes_35, { current: get(curStatus) === "unprocessed" }); - classes_36 = set_class(button_26, 1, "pcr-atb2-qa-menu-item svelte-ibd6yj", null, classes_36, { current: get(curStatus) === "broken" }); + set_style(div_101, `left:${get(chipQaMenu).x ?? ""}px;top:${get(chipQaMenu).y ?? ""}px`); + set_text(text_70, get(chipQaMenu).item.display_name || get(chipQaMenu).item.item_tag); + set_text(text_71, get(tagOutput)); + set_text(text_72, get(natlangOutput) || "(empty)"); + classes_36 = set_class(button_25, 1, "pcr-atb2-qa-menu-item svelte-ibd6yj", null, classes_36, { current: get(curStatus) === "normalized" }); + classes_37 = set_class(button_26, 1, "pcr-atb2-qa-menu-item svelte-ibd6yj", null, classes_37, { current: get(curStatus) === "unprocessed" }); + classes_38 = set_class(button_27, 1, "pcr-atb2-qa-menu-item svelte-ibd6yj", null, classes_38, { current: get(curStatus) === "broken" }); }); - delegated("click", div_90, closeChipQaMenu); - delegated("contextmenu", div_90, (e) => { + delegated("click", div_100, closeChipQaMenu); + delegated("contextmenu", div_100, (e) => { e.preventDefault(); closeChipQaMenu(); }); - delegated("click", button_24, () => setChipNatlangStatus(get(chipQaMenu).bucket, get(chipQaMenu).item, "normalized")); - delegated("click", button_25, () => setChipNatlangStatus(get(chipQaMenu).bucket, get(chipQaMenu).item, "unprocessed")); - delegated("click", button_26, () => setChipNatlangStatus(get(chipQaMenu).bucket, get(chipQaMenu).item, "broken")); - append($$anchor2, fragment_21); + delegated("click", button_25, () => setChipNatlangStatus(get(chipQaMenu).bucket, get(chipQaMenu).item, "normalized")); + delegated("click", button_26, () => setChipNatlangStatus(get(chipQaMenu).bucket, get(chipQaMenu).item, "unprocessed")); + delegated("click", button_27, () => setChipNatlangStatus(get(chipQaMenu).bucket, get(chipQaMenu).item, "broken")); + append($$anchor2, fragment_23); }; - if_block(node_72, ($$render) => { - if (get(chipQaMenu)) $$render(consequent_75); + if_block(node_77, ($$render) => { + if (get(chipQaMenu)) $$render(consequent_80); }); } - var node_73 = sibling(div, 2); + var node_78 = sibling(div, 2); { - var consequent_79 = ($$anchor2) => { - var div_99 = root_113(); - var input_2 = child(div_99); + var consequent_84 = ($$anchor2) => { + var div_109 = root_121(); + var input_2 = child(div_109); bind_this(input_2, ($$value) => identityPickerSearchEl = $$value, () => identityPickerSearchEl); - var div_100 = sibling(input_2, 2); - var node_74 = child(div_100); + var div_110 = sibling(input_2, 2); + var node_79 = child(div_110); { - var consequent_76 = ($$anchor3) => { - var div_101 = root_114(); - append($$anchor3, div_101); + var consequent_81 = ($$anchor3) => { + var div_111 = root_122(); + append($$anchor3, div_111); }; - var consequent_77 = ($$anchor3) => { - var div_102 = root_115(); - append($$anchor3, div_102); + var consequent_82 = ($$anchor3) => { + var div_112 = root_123(); + append($$anchor3, div_112); }; - var alternate_11 = ($$anchor3) => { - var fragment_22 = comment(); - var node_75 = first_child(fragment_22); - each(node_75, 17, () => get(identityResults), (opt) => opt.kind + ":" + opt.tag, ($$anchor4, opt) => { - var div_103 = root_117(); - var span_71 = child(div_103); - var text_70 = child(span_71); + var alternate_12 = ($$anchor3) => { + var fragment_24 = comment(); + var node_80 = first_child(fragment_24); + each(node_80, 17, () => get(identityResults), (opt) => opt.kind + ":" + opt.tag, ($$anchor4, opt) => { + var div_113 = root_125(); + var span_71 = child(div_113); + var text_73 = child(span_71); var span_72 = sibling(span_71, 2); - var node_76 = child(span_72); + var node_81 = child(span_72); { - var consequent_78 = ($$anchor5) => { - var text_71 = text(); - template_effect(() => set_text(text_71, get(opt).series)); - append($$anchor5, text_71); + var consequent_83 = ($$anchor5) => { + var text_74 = text(); + template_effect(() => set_text(text_74, get(opt).series)); + append($$anchor5, text_74); }; - var alternate_10 = ($$anchor5) => { - var text_72 = text(); - template_effect(() => set_text(text_72, get(opt).kindLabel)); - append($$anchor5, text_72); + var alternate_11 = ($$anchor5) => { + var text_75 = text(); + template_effect(() => set_text(text_75, get(opt).kindLabel)); + append($$anchor5, text_75); }; - if_block(node_76, ($$render) => { - if (get(opt).kind === "character" && get(opt).series) $$render(consequent_78); - else $$render(alternate_10, -1); + if_block(node_81, ($$render) => { + if (get(opt).kind === "character" && get(opt).series) $$render(consequent_83); + else $$render(alternate_11, -1); }); } - template_effect(() => set_text(text_70, get(opt).display)); - delegated("click", div_103, () => pickIdentityFromDropdown(get(opt))); - append($$anchor4, div_103); + template_effect(() => set_text(text_73, get(opt).display)); + delegated("click", div_113, () => pickIdentityFromDropdown(get(opt))); + append($$anchor4, div_113); }); - append($$anchor3, fragment_22); + append($$anchor3, fragment_24); }; - if_block(node_74, ($$render) => { - if (get(identityCharLoading) && get(identityResults).length === 0) $$render(consequent_76); - else if (get(identityResults).length === 0) $$render(consequent_77, 1); - else $$render(alternate_11, -1); + if_block(node_79, ($$render) => { + if (get(identityCharLoading) && get(identityResults).length === 0) $$render(consequent_81); + else if (get(identityResults).length === 0) $$render(consequent_82, 1); + else $$render(alternate_12, -1); }); } - template_effect(() => set_style(div_99, `left:${get(identityPickerRect).left ?? ""}px; top:${get(identityPickerRect).top ?? ""}px; width:${get(identityPickerRect).width ?? ""}px;`)); - delegated("click", div_99, (e) => e.stopPropagation()); + template_effect(() => set_style(div_109, `left:${get(identityPickerRect).left ?? ""}px; top:${get(identityPickerRect).top ?? ""}px; width:${get(identityPickerRect).width ?? ""}px;`)); + delegated("click", div_109, (e) => e.stopPropagation()); bind_value(input_2, () => get(identityPickerQuery), ($$value) => set(identityPickerQuery, $$value)); - append($$anchor2, div_99); + append($$anchor2, div_109); }; - if_block(node_73, ($$render) => { - if (get(identityPickerOpen)) $$render(consequent_79); + if_block(node_78, ($$render) => { + if (get(identityPickerOpen)) $$render(consequent_84); }); } - var node_77 = sibling(node_73, 2); + var node_82 = sibling(node_78, 2); { - var consequent_83 = ($$anchor2) => { + var consequent_88 = ($$anchor2) => { const subj = user_derived(() => get(subjects).find((s) => s.id === get(presetPickerOpen).subjId)); const boundTag = user_derived(() => { var _a2, _b; return (_b = (_a2 = get(subj)) == null ? void 0 : _a2.character) == null ? void 0 : _b.tag; }); - var div_104 = root_120(); - var input_3 = child(div_104); + var div_114 = root_128(); + var input_3 = child(div_114); bind_this(input_3, ($$value) => presetPickerSearchEl = $$value, () => presetPickerSearchEl); - var div_105 = sibling(input_3, 2); - var node_78 = child(div_105); + var div_115 = sibling(input_3, 2); + var node_83 = child(div_115); { - var consequent_80 = ($$anchor3) => { - var div_106 = root_121(); - append($$anchor3, div_106); + var consequent_85 = ($$anchor3) => { + var div_116 = root_129(); + append($$anchor3, div_116); }; - var consequent_81 = ($$anchor3) => { - var div_107 = root_122(); - append($$anchor3, div_107); + var consequent_86 = ($$anchor3) => { + var div_117 = root_130(); + append($$anchor3, div_117); }; - var alternate_12 = ($$anchor3) => { - var fragment_25 = comment(); - var node_79 = first_child(fragment_25); - each(node_79, 17, () => get(presetPickerResults), (row) => row.id, ($$anchor4, row) => { + var alternate_13 = ($$anchor3) => { + var fragment_27 = comment(); + var node_84 = first_child(fragment_27); + each(node_84, 17, () => get(presetPickerResults), (row) => row.id, ($$anchor4, row) => { const isCanonical = user_derived(() => get(row).character_tag === get(boundTag)); const presetName = user_derived(() => get(presetPickerOpen).kind === "outfit" ? get(row).outfit_name : get(row).pose_name); - var div_108 = root_124(); - let classes_37; - var node_80 = child(div_108); + var div_118 = root_132(); + let classes_39; + var node_85 = child(div_118); { - var consequent_82 = ($$anchor5) => { - var span_73 = root_125(); + var consequent_87 = ($$anchor5) => { + var span_73 = root_133(); append($$anchor5, span_73); }; - if_block(node_80, ($$render) => { - if (get(isCanonical)) $$render(consequent_82); + if_block(node_85, ($$render) => { + if (get(isCanonical)) $$render(consequent_87); }); } - var span_74 = sibling(node_80, 2); - var text_73 = child(span_74); + var span_74 = sibling(node_85, 2); + var text_76 = child(span_74); var span_75 = sibling(span_74, 2); - var text_74 = child(span_75); + var text_77 = child(span_75); template_effect(() => { - classes_37 = set_class(div_108, 1, "pcr-atb2-preset-dd-row svelte-ibd6yj", null, classes_37, { canonical: get(isCanonical) }); - set_text(text_73, get(presetName)); - set_text(text_74, `${get(row).character_display ?? ""}${get(row).character_series ? ` · ${get(row).character_series}` : ""}`); + classes_39 = set_class(div_118, 1, "pcr-atb2-preset-dd-row svelte-ibd6yj", null, classes_39, { canonical: get(isCanonical) }); + set_text(text_76, get(presetName)); + set_text(text_77, `${get(row).character_display ?? ""}${get(row).character_series ? ` · ${get(row).character_series}` : ""}`); }); - delegated("click", div_108, () => pickPresetFromDropdown(get(row))); - append($$anchor4, div_108); + delegated("click", div_118, () => pickPresetFromDropdown(get(row))); + append($$anchor4, div_118); }); - append($$anchor3, fragment_25); + append($$anchor3, fragment_27); }; - if_block(node_78, ($$render) => { - if (get(presetPickerLoading) && get(presetPickerResults).length === 0) $$render(consequent_80); - else if (get(presetPickerResults).length === 0) $$render(consequent_81, 1); - else $$render(alternate_12, -1); + if_block(node_83, ($$render) => { + if (get(presetPickerLoading) && get(presetPickerResults).length === 0) $$render(consequent_85); + else if (get(presetPickerResults).length === 0) $$render(consequent_86, 1); + else $$render(alternate_13, -1); }); } template_effect(() => { - set_style(div_104, `left:${get(presetPickerRect).left ?? ""}px; top:${get(presetPickerRect).top ?? ""}px; width:${get(presetPickerRect).width ?? ""}px;`); + set_style(div_114, `left:${get(presetPickerRect).left ?? ""}px; top:${get(presetPickerRect).top ?? ""}px; width:${get(presetPickerRect).width ?? ""}px;`); set_attribute(input_3, "placeholder", get(presetPickerOpen).kind === "outfit" ? "Search outfits…" : "Search poses…"); }); - delegated("click", div_104, (e) => e.stopPropagation()); + delegated("click", div_114, (e) => e.stopPropagation()); bind_value(input_3, () => get(presetPickerQuery), ($$value) => set(presetPickerQuery, $$value)); - append($$anchor2, div_104); + append($$anchor2, div_114); }; - if_block(node_77, ($$render) => { - if (get(presetPickerOpen)) $$render(consequent_83); + if_block(node_82, ($$render) => { + if (get(presetPickerOpen)) $$render(consequent_88); }); } - var node_81 = sibling(node_77, 2); + var node_86 = sibling(node_82, 2); { - var consequent_84 = ($$anchor2) => { + var consequent_89 = ($$anchor2) => { const subj = user_derived(() => get(subjects).find((s) => s.id === get(modifierPickerOpen))); - var div_109 = root_126(); - var div_110 = child(div_109); - each(div_110, 20, () => MODIFIER_OPTIONS, (opt) => opt, ($$anchor3, opt) => { + var div_119 = root_134(); + var div_120 = child(div_119); + each(div_120, 20, () => MODIFIER_OPTIONS, (opt) => opt, ($$anchor3, opt) => { const isOn = user_derived(() => { var _a2, _b; return !!((_b = (_a2 = get(subj)) == null ? void 0 : _a2.modifiers) == null ? void 0 : _b.includes(opt)); }); - var div_111 = root_127(); - let classes_38; - var span_76 = child(div_111); - var text_75 = child(span_76); + var div_121 = root_135(); + let classes_40; + var span_76 = child(div_121); + var text_78 = child(span_76); var span_77 = sibling(span_76, 2); - var text_76 = child(span_77); + var text_79 = child(span_77); template_effect(() => { - classes_38 = set_class(div_111, 1, "pcr-atb2-modifier-dd-row svelte-ibd6yj", null, classes_38, { on: get(isOn) }); - set_text(text_75, get(isOn) ? "✓" : ""); - set_text(text_76, opt); + classes_40 = set_class(div_121, 1, "pcr-atb2-modifier-dd-row svelte-ibd6yj", null, classes_40, { on: get(isOn) }); + set_text(text_78, get(isOn) ? "✓" : ""); + set_text(text_79, opt); }); - delegated("click", div_111, () => { + delegated("click", div_121, () => { toggleModifier(get(modifierPickerOpen), opt); closeModifierPicker(); }); - append($$anchor3, div_111); + append($$anchor3, div_121); }); - template_effect(() => set_style(div_109, `left:${get(modifierPickerRect).left ?? ""}px; top:${get(modifierPickerRect).top ?? ""}px; width:${get(modifierPickerRect).width ?? ""}px;`)); - delegated("click", div_109, (e) => e.stopPropagation()); - append($$anchor2, div_109); + template_effect(() => set_style(div_119, `left:${get(modifierPickerRect).left ?? ""}px; top:${get(modifierPickerRect).top ?? ""}px; width:${get(modifierPickerRect).width ?? ""}px;`)); + delegated("click", div_119, (e) => e.stopPropagation()); + append($$anchor2, div_119); }; - if_block(node_81, ($$render) => { - if (get(modifierPickerOpen)) $$render(consequent_84); + if_block(node_86, ($$render) => { + if (get(modifierPickerOpen)) $$render(consequent_89); }); } - var node_82 = sibling(node_81, 2); + var node_87 = sibling(node_86, 2); { - var consequent_85 = ($$anchor2) => { - var div_112 = root_128(); - var div_113 = child(div_112); - var div_114 = sibling(child(div_113), 2); - var strong_1 = sibling(child(div_114)); - var text_77 = child(strong_1); + var consequent_90 = ($$anchor2) => { + var div_122 = root_136(); + var div_123 = child(div_122); + var div_124 = sibling(child(div_123), 2); + var strong_1 = sibling(child(div_124)); + var text_80 = child(strong_1); var strong_2 = sibling(strong_1, 2); - var text_78 = child(strong_2); - var div_115 = sibling(strong_2, 2); - var text_79 = child(div_115); - var div_116 = sibling(div_114, 2); - var button_27 = child(div_116); - var button_28 = sibling(button_27, 2); + var text_81 = child(strong_2); + var div_125 = sibling(strong_2, 2); + var text_82 = child(div_125); + var div_126 = sibling(div_124, 2); + var button_28 = child(div_126); + var button_29 = sibling(button_28, 2); template_effect(() => { - set_text(text_77, get(pendingIdentitySwap).current.display); - set_text(text_78, get(pendingIdentitySwap).next.display); - set_text(text_79, `Identity-derived tags from ${get(pendingIdentitySwap).current.display ?? ""} will be removed and replaced.`); + set_text(text_80, get(pendingIdentitySwap).current.display); + set_text(text_81, get(pendingIdentitySwap).next.display); + set_text(text_82, `Identity-derived tags from ${get(pendingIdentitySwap).current.display ?? ""} will be removed and replaced.`); }); - delegated("click", div_112, cancelIdentitySwap); - delegated("click", div_113, (e) => e.stopPropagation()); - delegated("click", button_27, cancelIdentitySwap); - delegated("click", button_28, confirmIdentitySwap); - append($$anchor2, div_112); + delegated("click", div_122, cancelIdentitySwap); + delegated("click", div_123, (e) => e.stopPropagation()); + delegated("click", button_28, cancelIdentitySwap); + delegated("click", button_29, confirmIdentitySwap); + append($$anchor2, div_122); }; - if_block(node_82, ($$render) => { - if (get(pendingIdentitySwap)) $$render(consequent_85); + if_block(node_87, ($$render) => { + if (get(pendingIdentitySwap)) $$render(consequent_90); }); } - var node_83 = sibling(node_82, 2); + var node_88 = sibling(node_87, 2); { - var consequent_86 = ($$anchor2) => { + var consequent_91 = ($$anchor2) => { Customizer($$anchor2, { get item() { return get(customizerOpen).item; @@ -7650,13 +7782,13 @@ ${filtered}` : filtered; onCancel: cancelCustomizer }); }; - if_block(node_83, ($$render) => { - if (get(customizerOpen)) $$render(consequent_86); + if_block(node_88, ($$render) => { + if (get(customizerOpen)) $$render(consequent_91); }); } - var node_84 = sibling(node_83, 2); + var node_89 = sibling(node_88, 2); { - var consequent_87 = ($$anchor2) => { + var consequent_92 = ($$anchor2) => { { let $0 = user_derived(() => get(bucketCache).furniture.mods.actionOverrides || {}); let $1 = user_derived(() => get(furnitureCustomizerOpen).subjId ? get(subjects).find((s) => s.id === get(furnitureCustomizerOpen).subjId) : null); @@ -7693,14 +7825,14 @@ ${filtered}` : filtered; }); } }; - if_block(node_84, ($$render) => { + if_block(node_89, ($$render) => { var _a2; - if (get(furnitureCustomizerOpen) && ((_a2 = get(bucketCache).furniture) == null ? void 0 : _a2.mods)) $$render(consequent_87); + if (get(furnitureCustomizerOpen) && ((_a2 = get(bucketCache).furniture) == null ? void 0 : _a2.mods)) $$render(consequent_92); }); } - var node_85 = sibling(node_84, 2); + var node_90 = sibling(node_89, 2); { - var consequent_88 = ($$anchor2) => { + var consequent_93 = ($$anchor2) => { FantasyCustomizer($$anchor2, { get item() { return get(fantasyCustomizerOpen).item; @@ -7718,8 +7850,8 @@ ${filtered}` : filtered; onCancel: cancelFantasyCustomizer }); }; - if_block(node_85, ($$render) => { - if (get(fantasyCustomizerOpen)) $$render(consequent_88); + if_block(node_90, ($$render) => { + if (get(fantasyCustomizerOpen)) $$render(consequent_93); }); } template_effect(() => { @@ -7731,12 +7863,12 @@ ${filtered}` : filtered; set_style(main, `--pcr-atb2-card-min: ${get(cardMinPx) ?? ""}px`); classes_10 = set_class(span_19, 1, "pcr-atb2-bc-target svelte-ibd6yj", null, classes_10, { rebind: get(routingTarget).type === "rebind" }); set_text(text_19, get(routingTarget).label); - classes_32 = set_class(div_88, 1, "pcr-atb2-mode-option svelte-ibd6yj", null, classes_32, { active: !get(isNaturalMode) }); - set_attribute(div_88, "aria-checked", !get(isNaturalMode)); - classes_33 = set_class(div_89, 1, "pcr-atb2-mode-option svelte-ibd6yj", null, classes_33, { active: get(isNaturalMode) }); - set_attribute(div_89, "aria-checked", get(isNaturalMode)); - button_23.disabled = get(totalSelectionCount) === 0; - set_text(text_66, `Insert${get(totalSelectionCount) > 0 ? ` (${get(totalSelectionCount)})` : ""}`); + classes_34 = set_class(div_98, 1, "pcr-atb2-mode-option svelte-ibd6yj", null, classes_34, { active: !get(isNaturalMode) }); + set_attribute(div_98, "aria-checked", !get(isNaturalMode)); + classes_35 = set_class(div_99, 1, "pcr-atb2-mode-option svelte-ibd6yj", null, classes_35, { active: get(isNaturalMode) }); + set_attribute(div_99, "aria-checked", get(isNaturalMode)); + button_24.disabled = get(totalSelectionCount) === 0; + set_text(text_69, `Insert${get(totalSelectionCount) > 0 ? ` (${get(totalSelectionCount)})` : ""}`); }); bind_value(input, () => get(searchQuery), ($$value) => set(searchQuery, $$value)); delegated("click", button, toggleMaximized); @@ -7744,14 +7876,14 @@ ${filtered}` : filtered; var _a2; (_a2 = onClose()) == null ? void 0 : _a2.apply(this, $$args); }); - delegated("click", div_75, () => spawnSubject("person")); - delegated("click", div_88, () => setMode(false)); - delegated("click", div_89, () => setMode(true)); - delegated("click", button_22, function(...$$args) { + delegated("click", div_85, () => spawnSubject("person")); + delegated("click", div_98, () => setMode(false)); + delegated("click", div_99, () => setMode(true)); + delegated("click", button_23, function(...$$args) { var _a2; (_a2 = onClose()) == null ? void 0 : _a2.apply(this, $$args); }); - delegated("click", button_23, handleInsert); + delegated("click", button_24, handleInsert); append($$anchor, fragment); pop(); } diff --git a/svelte-src/components/tag-builder2/TagBuilder2.svelte b/svelte-src/components/tag-builder2/TagBuilder2.svelte index b72c442..4b57184 100644 --- a/svelte-src/components/tag-builder2/TagBuilder2.svelte +++ b/svelte-src/components/tag-builder2/TagBuilder2.svelte @@ -272,6 +272,38 @@ maximized = !maximized; try { localStorage.setItem(MAXIMIZED_KEY, maximized ? "1" : "0"); } catch {} } + + // Recently-used picks (character/cast identities + tag items), persisted to + // localStorage and surfaced as a pinned strip atop the default "all" view so + // the things reached for most are one click away — no searching, no schema. + // Disabled for now (user request) — implementation kept intact; flip + // RECENT_ENABLED back to true to re-enable the strip + its tracking. + const RECENT_ENABLED = false; + const RECENT_KEY = "pcr-atb2-recent"; + const RECENT_MAX = 24; + let recentPicks = $state([]); + try { + const stored = JSON.parse(localStorage.getItem(RECENT_KEY) || "[]"); + if (Array.isArray(stored)) recentPicks = stored.slice(0, RECENT_MAX); + } catch {} + // Stable identity for dedupe: an item is keyed by where it lives + its tag; + // an identity by character/cast tag (+ cast group). + function recentKey(e) { + return e.type === "item" + ? `item:${e.categoryKey}:${e.groupKey}:${e.item?.item_tag}` + : `id:${e.option?.kind}:${e.option?.group || ""}:${e.option?.tag}`; + } + function recordRecent(entry) { + if (!RECENT_ENABLED) return; + const k = recentKey(entry); + recentPicks = [entry, ...recentPicks.filter(e => recentKey(e) !== k)].slice(0, RECENT_MAX); + try { localStorage.setItem(RECENT_KEY, JSON.stringify(recentPicks)); } catch {} + } + function clearRecent() { + recentPicks = []; + try { localStorage.setItem(RECENT_KEY, JSON.stringify(recentPicks)); } catch {} + } + $effect(() => { const el = browserEl; if (!el) return; @@ -733,7 +765,7 @@ // Preload normalized characters (tag + base_natlang etc.) so the // round-trip parser can recognize both tag-form ("cammy_white") and // natlang ("Cammy White from Street Fighter.") character identities. - const charTagsPromise = fetch(`/promptchain/tag-builder/characters?natlang_status=normalized&per_page=1000&sort=display`) + const charTagsPromise = fetch(`/promptchain/tag-builder/characters/identity-index`) .then(r => r.ok ? r.json() : { characters: [] }) .then(d => { const chars = d.characters || []; @@ -1448,6 +1480,7 @@ // - active w/o identity -> bind directly to active // - active with identity -> open swap-confirm modal async function pickIdentityFromBrowser(option) { + recordRecent({ type: "identity", option }); const subj = activeSubject; if (subj && subj.character) { pendingIdentitySwap = { subjId: subj.id, current: subj.character, next: option }; @@ -3531,6 +3564,7 @@ toggleModifier(subj.id, item.item_tag); return; } + recordRecent({ type: "item", categoryKey, groupKey, item }); const cat = CATEGORIES.find(c => c.key === categoryKey); if (!cat) return; if (cat.scope === "furniture") { @@ -5121,6 +5155,51 @@ {#if activeCategory === "all"} + {#snippet recentCard(r)} + {#if r.type === "identity"} + {@const o = r.option} + {@const isChar = o.kind === "character"} + {@const rHasImg = isChar ? characterThumbs.has(o.tag) : !!castThumbs[o.group]?.has(o.tag)} + + +
pickIdentityFromBrowser(o)}> +
+ {#if rHasImg} + + {/if} +
+
{o.display || o.tag}
+ {#if o.series}
{o.series}
{/if} +
+ {:else} + {@const it = r.item} + {@const rBucket = CATEGORIES.find(c => c.key === r.categoryKey)?.bucket} + {@const rHasImg = !!rBucket && hasThumb(rBucket, it.item_tag)} + + +
pickItemFromAll(it, r.categoryKey, r.groupKey)}> +
+ {#if rHasImg}{/if} +
+
{it.display_name || it.item_tag}
+
+ {/if} + {/snippet} + {#if RECENT_ENABLED && recentPicks.length > 0 && !searchQuery.trim()} +
+
+ 🕘 Recently used + +
+
+ {#each recentPicks as r (recentKey(r))} + {@render recentCard(r)} + {/each} +
+
+ {/if} {#if allCategorySections.length === 0}
{searchQuery ? `No items match "${searchQuery}"` : "Loading…"}
{:else} @@ -6270,6 +6349,23 @@ .pcr-atb2-browser-section-cat { color: #888; } .pcr-atb2-browser-section-sep { color: #555; } .pcr-atb2-browser-section-grp { color: #d4b8ff; } + .pcr-atb2-recent-section .pcr-atb2-browser-section-header { + display: flex; + align-items: center; + gap: 8px; + } + .pcr-atb2-recent-clear { + margin-left: auto; + background: none; + border: 1px solid #333; + color: #777; + border-radius: 4px; + font: inherit; + font-size: 10px; + padding: 1px 8px; + cursor: pointer; + } + .pcr-atb2-recent-clear:hover { color: #ccc; border-color: #555; } .pcr-atb2-card { background: #ffffff0d; border: 1px solid #333;