1import { aB as setComponentPageTitle, u as useNavigate, aP as presetStore, aV as getServiceName, aW as sortByLabel, b as userStore, f as createSignal, o as onMount, c as createComponent, az as PageHeader, A, i as insert, B as Button, ag as Plus, d as Show, F as For, aX as SolidCard, h as memo, aE as adminStore, aA as Divider, an as Trash, aH as ConfirmModal, aD as Page, t as template, aL as Pill } from "./index-BhA_zdKR.js"; 2import { C as Copy } from "./Copy.esm-yeHNsHT3.js"; 3var _tmpl$ = /* @__PURE__ */ template(`<div class="mb-4 flex w-full justify-end gap-2">`), _tmpl$2 = /* @__PURE__ */ template(`<div class="flex justify-center text-xl font-bold">No Tiers`), _tmpl$3 = /* @__PURE__ */ template(`<div class="flex justify-center text-xl font-bold">Tiers`), _tmpl$4 = /* @__PURE__ */ template(`<div class="flex w-full flex-col gap-2">`), _tmpl$5 = /* @__PURE__ */ template(`<div class="flex flex-col items-center gap-2"><div class="flex justify-center font-bold">Models`), _tmpl$6 = /* @__PURE__ */ template(`<span class="text-600 ml-2 text-xs italic">Stripe: $`), _tmpl$7 = /* @__PURE__ */ template(`<span class="text-600 ml-2 text-xs italic">Patreon: $`), _tmpl$8 = /* @__PURE__ */ template(`<span class="text-600 ml-2 text-xs italic">disabled`), _tmpl$9 = /* @__PURE__ */ template(`<div class="flex w-full gap-2"><div class="flex min-w-fit gap-2">`), _tmpl$0 = /* @__PURE__ */ template(`<span class="text-500 ml-1 text-xs">`), _tmpl$1 = /* @__PURE__ */ template(`<div class="ml-4 flex w-full items-center"><div class="flex gap-1"><span class="mr-1 text-xs italic text-[var(--text-600)]">[Level: <!>] </span><span class="mr-1 text-xs italic text-[var(--text-600)]">`), _tmpl$10 = /* @__PURE__ */ template(`<div class="flex w-full items-center gap-2">`); 4const SubscriptionList = () => { 5 setComponentPageTitle("Subscriptions"); 6 const nav = useNavigate(); 7 const state = presetStore((s) => { 8 return { 9 enabled: s.subs.filter((s2) => !s2.subDisabled).map((pre) => ({ 10 ...pre, 11 label: `[${getServiceName(pre.service)}] ${pre.name}` 12 })).sort(sortByLabel), 13 disabled: s.subs.filter((s2) => s2.subDisabled).map((pre) => ({ 14 ...pre, 15 label: `[${getServiceName(pre.service)}] ${pre.name}` 16 })).sort(sortByLabel) 17 }; 18 }); 19 const cfg = userStore(); 20 const [deleting, setDeleting] = createSignal(); 21 const deleteSub = () => { 22 const presetId = deleting(); 23 if (!presetId) return; 24 presetStore.deleteSubscription(presetId, () => nav("/admin/subscriptions")); 25 setDeleting(); 26 }; 27 onMount(() => { 28 presetStore.getSubscriptions(); 29 userStore.getTiers(); 30 }); 31 return createComponent(Page, { 32 get children() { 33 return [createComponent(PageHeader, { 34 title: "Subscriptions" 35 }), createComponent(A, { 36 href: "/admin/metrics", 37 "class": "link", 38 children: "â Back to Manage" 39 }), (() => { 40 var _el$ = _tmpl$(); 41 insert(_el$, createComponent(A, { 42 href: "/admin/tiers/new", 43 get children() { 44 return createComponent(Button, { 45 get children() { 46 return [createComponent(Plus, {}), "Tier"]; 47 } 48 }); 49 } 50 }), null); 51 insert(_el$, createComponent(A, { 52 href: "/admin/subscriptions/new", 53 get children() { 54 return createComponent(Button, { 55 get children() { 56 return [createComponent(Plus, {}), "Model"]; 57 } 58 }); 59 } 60 }), null); 61 return _el$; 62 })(), (() => { 63 var _el$2 = _tmpl$5(), _el$6 = _el$2.firstChild; 64 insert(_el$2, createComponent(Show, { 65 get when() { 66 return cfg.tiers.length === 0; 67 }, 68 get children() { 69 return _tmpl$2(); 70 } 71 }), _el$6); 72 insert(_el$2, createComponent(Show, { 73 get when() { 74 return cfg.tiers.length > 0; 75 }, 76 get children() { 77 return [_tmpl$3(), (() => { 78 var _el$5 = _tmpl$4(); 79 insert(_el$5, createComponent(For, { 80 get each() { 81 return cfg.tiers; 82 }, 83 children: (each) => (() => { 84 var _el$7 = _tmpl$9(), _el$11 = _el$7.firstChild; 85 insert(_el$7, createComponent(A, { 86 get href() { 87 return `/admin/tiers/${each._id}`; 88 }, 89 "class": "w-full", 90 get children() { 91 return createComponent(SolidCard, { 92 get bg() { 93 return each.enabled ? "bg-800" : "rose-900"; 94 }, 95 hover: "bg-700", 96 "class": "w-full cursor-pointer", 97 get children() { 98 return [memo(() => each.name), createComponent(Show, { 99 get when() { 100 return each.cost > 0 && !!each.priceId; 101 }, 102 get children() { 103 var _el$8 = _tmpl$6(); 104 _el$8.firstChild; 105 insert(_el$8, () => each.cost / 100, null); 106 return _el$8; 107 } 108 }), createComponent(Show, { 109 get when() { 110 return each.patreon?.cost > 0; 111 }, 112 get children() { 113 var _el$0 = _tmpl$7(); 114 _el$0.firstChild; 115 insert(_el$0, () => (each.patreon?.cost / 100).toFixed(2), null); 116 return _el$0; 117 } 118 }), createComponent(Show, { 119 get when() { 120 return !each.enabled; 121 }, 122 get children() { 123 return _tmpl$8(); 124 } 125 })]; 126 } 127 }); 128 } 129 }), _el$11); 130 insert(_el$11, createComponent(Show, { 131 get when() { 132 return each.enabled; 133 }, 134 get children() { 135 return createComponent(Button, { 136 schema: "green", 137 onClick: () => adminStore.updateTier(each._id, { 138 enabled: false 139 }), 140 children: "Enabled" 141 }); 142 } 143 }), null); 144 insert(_el$11, createComponent(Show, { 145 get when() { 146 return !each.enabled; 147 }, 148 get children() { 149 return createComponent(Button, { 150 schema: "red", 151 onClick: () => adminStore.updateTier(each._id, { 152 enabled: true 153 }), 154 children: "Disabled" 155 }); 156 } 157 }), null); 158 return _el$7; 159 })() 160 })); 161 return _el$5; 162 })()]; 163 } 164 }), _el$6); 165 insert(_el$2, createComponent(Divider, {}), _el$6); 166 insert(_el$2, createComponent(For, { 167 get each() { 168 return state.enabled.concat(state.disabled); 169 }, 170 children: (sub) => (() => { 171 var _el$12 = _tmpl$10(); 172 insert(_el$12, createComponent(A, { 173 get href() { 174 return `/admin/subscriptions/${sub._id}`; 175 }, 176 "class": "flex h-12 w-full gap-2 rounded-xl hover:bg-[var(--bg-600)]", 177 get classList() { 178 return { 179 "bg-red-900": sub.subDisabled && !sub.isDefaultSub, 180 "text-500": sub.subDisabled && !sub.isDefaultSub, 181 "bg-800": !sub.subDisabled && !sub.isDefaultSub, 182 "bg-[var(--hl-800)]": sub.isDefaultSub 183 }; 184 }, 185 get children() { 186 var _el$13 = _tmpl$1(), _el$14 = _el$13.firstChild, _el$15 = _el$14.firstChild, _el$16 = _el$15.firstChild, _el$18 = _el$16.nextSibling; 187 _el$18.nextSibling; 188 var _el$20 = _el$15.nextSibling; 189 insert(_el$15, () => sub.subLevel, _el$18); 190 insert(_el$15, () => getServiceName(sub.service), null); 191 insert(_el$14, () => sub.name, _el$20); 192 insert(_el$14, createComponent(Show, { 193 get when() { 194 return sub.description; 195 }, 196 get children() { 197 var _el$19 = _tmpl$0(); 198 insert(_el$19, () => sub.description); 199 return _el$19; 200 } 201 }), _el$20); 202 insert(_el$20, () => sub.isDefaultSub ? " default" : "", null); 203 insert(_el$20, () => sub.subDisabled ? " (disabled)" : "", null); 204 insert(_el$14, createComponent(Contexts, { 205 get levels() { 206 return [{ 207 level: sub.subLevel, 208 maxContextLength: sub.maxContextLength, 209 maxTokens: sub.maxTokens 210 }]; 211 } 212 }), null); 213 insert(_el$14, createComponent(Contexts, { 214 get levels() { 215 return sub.levels || []; 216 } 217 }), null); 218 return _el$13; 219 } 220 }), null); 221 insert(_el$12, createComponent(Button, { 222 schema: "clear", 223 size: "sm", 224 onClick: () => nav(`/admin/subscriptions/new?preset=${sub._id}`), 225 "class": "icon-button", 226 get children() { 227 return createComponent(Copy, {}); 228 } 229 }), null); 230 insert(_el$12, createComponent(Button, { 231 schema: "clear", 232 size: "sm", 233 onClick: () => setDeleting(sub._id), 234 "class": "icon-button", 235 get children() { 236 return createComponent(Trash, {}); 237 } 238 }), null); 239 return _el$12; 240 })() 241 }), null); 242 return _el$2; 243 })(), createComponent(ConfirmModal, { 244 get show() { 245 return !!deleting(); 246 }, 247 close: () => setDeleting(), 248 confirm: deleteSub, 249 message: "Are you sure you wish to delete this subscription?" 250 })]; 251 } 252 }); 253}; 254const Contexts = (props) => { 255 return createComponent(For, { 256 get each() { 257 return props.levels; 258 }, 259 children: (level) => createComponent(Pill, { 260 small: true, 261 get children() { 262 return [memo(() => level.level), ". ", memo(() => level.maxContextLength), " / ", memo(() => level.maxTokens)]; 263 } 264 }) 265 }); 266}; 267export { 268 SubscriptionList as default 269};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.