@mashkovd/pelican-vue 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { onScopeDispose as
|
|
1
|
+
import { onScopeDispose as me, defineComponent as F, ref as R, watch as E, openBlock as p, createElementBlock as y, createElementVNode as i, createTextVNode as D, toDisplayString as b, Fragment as U, renderList as K, unref as v, normalizeClass as B, computed as k, normalizeStyle as ie, createCommentVNode as O, createVNode as P, withDirectives as he, vShow as ye, inject as Ue, withModifiers as te, renderSlot as q, createBlock as re, withCtx as ue, mergeProps as Ve, shallowRef as Ee, triggerRef as ae, reactive as Ce, provide as ne, toRef as Me, onMounted as Be, normalizeProps as Oe, guardReactiveProps as Ke } from "vue";
|
|
2
2
|
function Ye(e, t) {
|
|
3
3
|
let a = null;
|
|
4
4
|
const n = (...c) => {
|
|
@@ -8,9 +8,9 @@ function Ye(e, t) {
|
|
|
8
8
|
}, s = () => {
|
|
9
9
|
a && (clearTimeout(a), a = null);
|
|
10
10
|
};
|
|
11
|
-
return
|
|
11
|
+
return me(s), { wrapped: n, cancel: s };
|
|
12
12
|
}
|
|
13
|
-
const
|
|
13
|
+
const ze = 20, Ge = 350, He = 2e3, je = 2e4, We = 30, qe = [
|
|
14
14
|
"return-desc",
|
|
15
15
|
"return-asc",
|
|
16
16
|
"copiers-desc",
|
|
@@ -79,30 +79,30 @@ const Ge = 20, ze = 350, He = 2e3, je = 2e4, We = 30, qe = [
|
|
|
79
79
|
u !== s.value && (s.value = u);
|
|
80
80
|
}
|
|
81
81
|
);
|
|
82
|
-
const { wrapped: c } = Ye((u) => n("update:search", u),
|
|
82
|
+
const { wrapped: c } = Ye((u) => n("update:search", u), Ge);
|
|
83
83
|
function l(u) {
|
|
84
84
|
const m = u.target.value;
|
|
85
85
|
s.value = m, c(m);
|
|
86
86
|
}
|
|
87
|
-
function
|
|
87
|
+
function o(u) {
|
|
88
88
|
n("update:sortKey", u.target.value);
|
|
89
89
|
}
|
|
90
90
|
return (u, m) => (p(), y("div", Je, [
|
|
91
|
-
|
|
91
|
+
i("button", {
|
|
92
92
|
class: "btn-flat filters-toggle",
|
|
93
93
|
type: "button",
|
|
94
94
|
onClick: m[0] || (m[0] = (g) => n("toggle-filters"))
|
|
95
95
|
}, " Filters "),
|
|
96
|
-
|
|
96
|
+
i("div", Qe, [
|
|
97
97
|
m[2] || (m[2] = D(" Showing ", -1)),
|
|
98
|
-
|
|
98
|
+
i("b", null, b(e.filteredTotal.toLocaleString("en-US")), 1),
|
|
99
99
|
m[3] || (m[3] = D(" of ", -1)),
|
|
100
|
-
|
|
100
|
+
i("b", null, b(e.total.toLocaleString("en-US")), 1),
|
|
101
101
|
m[4] || (m[4] = D(" · page ", -1)),
|
|
102
|
-
|
|
102
|
+
i("b", null, b(e.page), 1),
|
|
103
103
|
D(" / " + b(e.totalPages), 1)
|
|
104
104
|
]),
|
|
105
|
-
|
|
105
|
+
i("input", {
|
|
106
106
|
class: "search",
|
|
107
107
|
type: "search",
|
|
108
108
|
placeholder: "Search by signal name…",
|
|
@@ -110,11 +110,11 @@ const Ge = 20, ze = 350, He = 2e3, je = 2e4, We = 30, qe = [
|
|
|
110
110
|
value: s.value,
|
|
111
111
|
onInput: l
|
|
112
112
|
}, null, 40, et),
|
|
113
|
-
|
|
114
|
-
m[5] || (m[5] =
|
|
115
|
-
|
|
113
|
+
i("div", tt, [
|
|
114
|
+
m[5] || (m[5] = i("label", null, "Sort:", -1)),
|
|
115
|
+
i("select", {
|
|
116
116
|
value: e.sortKey,
|
|
117
|
-
onChange:
|
|
117
|
+
onChange: o
|
|
118
118
|
}, [
|
|
119
119
|
(p(!0), y(U, null, K(v(qe), (g) => (p(), y("option", {
|
|
120
120
|
key: g,
|
|
@@ -122,7 +122,7 @@ const Ge = 20, ze = 350, He = 2e3, je = 2e4, We = 30, qe = [
|
|
|
122
122
|
}, b(v(Xe)[g]), 9, nt))), 128))
|
|
123
123
|
], 40, at)
|
|
124
124
|
]),
|
|
125
|
-
|
|
125
|
+
i("button", {
|
|
126
126
|
class: "btn-flat",
|
|
127
127
|
type: "button",
|
|
128
128
|
title: "reload",
|
|
@@ -144,11 +144,11 @@ const Ge = 20, ze = 350, He = 2e3, je = 2e4, We = 30, qe = [
|
|
|
144
144
|
setup(e, { emit: t }) {
|
|
145
145
|
const a = e, n = t, s = ["Low", "Medium", "High"];
|
|
146
146
|
function c(l) {
|
|
147
|
-
const
|
|
148
|
-
|
|
147
|
+
const o = new Set(a.modelValue);
|
|
148
|
+
o.has(l) ? o.delete(l) : o.add(l), n("update:modelValue", o);
|
|
149
149
|
}
|
|
150
|
-
return (l,
|
|
151
|
-
(p(), y(U, null, K(s, (u) =>
|
|
150
|
+
return (l, o) => (p(), y("div", ot, [
|
|
151
|
+
(p(), y(U, null, K(s, (u) => i("button", {
|
|
152
152
|
key: u,
|
|
153
153
|
type: "button",
|
|
154
154
|
class: B(["chip", ["risk-" + u.toLowerCase(), { on: e.modelValue.has(u) }]]),
|
|
@@ -170,17 +170,17 @@ const Ge = 20, ze = 350, He = 2e3, je = 2e4, We = 30, qe = [
|
|
|
170
170
|
},
|
|
171
171
|
emits: ["update:modelValue"],
|
|
172
172
|
setup(e, { emit: t }) {
|
|
173
|
-
const a = e, n = t, s = k(() => a.anyAt ?? a.min), c = k(() => !!a.inverted), l = k(() => a.modelValue == null ? c.value ? a.max : s.value : a.modelValue),
|
|
173
|
+
const a = e, n = t, s = k(() => a.anyAt ?? a.min), c = k(() => !!a.inverted), l = k(() => a.modelValue == null ? c.value ? a.max : s.value : a.modelValue), o = k(() => a.modelValue == null ? "any" : a.format ? a.format(a.modelValue) : String(a.modelValue));
|
|
174
174
|
function u(m) {
|
|
175
175
|
const g = parseInt(m.target.value, 10);
|
|
176
176
|
isNaN(g) || (c.value && g >= a.max || !c.value && g <= s.value ? n("update:modelValue", null) : n("update:modelValue", g));
|
|
177
177
|
}
|
|
178
178
|
return (m, g) => (p(), y("div", ct, [
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
179
|
+
i("div", dt, [
|
|
180
|
+
i("label", mt, b(e.label), 1),
|
|
181
|
+
i("span", ft, b(o.value), 1)
|
|
182
182
|
]),
|
|
183
|
-
|
|
183
|
+
i("input", {
|
|
184
184
|
type: "range",
|
|
185
185
|
class: "range",
|
|
186
186
|
min: e.min,
|
|
@@ -192,7 +192,7 @@ const Ge = 20, ze = 350, He = 2e3, je = 2e4, We = 30, qe = [
|
|
|
192
192
|
}, null, 40, vt)
|
|
193
193
|
]));
|
|
194
194
|
}
|
|
195
|
-
}),
|
|
195
|
+
}), G = /* @__PURE__ */ N(pt, [["__scopeId", "data-v-10c5fe1c"]]), gt = { class: "pelican-fgroup" }, ht = { class: "title-row" }, yt = { class: "title" }, Mt = { class: "val" }, bt = { class: "dual-track" }, xt = ["min", "max", "value"], wt = ["min", "max", "value"], $t = {
|
|
196
196
|
key: 0,
|
|
197
197
|
class: "scale"
|
|
198
198
|
}, kt = /* @__PURE__ */ F({
|
|
@@ -211,14 +211,14 @@ const Ge = 20, ze = 350, He = 2e3, je = 2e4, We = 30, qe = [
|
|
|
211
211
|
},
|
|
212
212
|
emits: ["update:modelValueMin", "update:modelValueMax"],
|
|
213
213
|
setup(e, { emit: t }) {
|
|
214
|
-
const a = e, n = t, s = k(() => a.rawMin ?? 0), c = k(() => a.rawMax ?? 100), l = k(() => a.modelValueMin ?? s.value),
|
|
214
|
+
const a = e, n = t, s = k(() => a.rawMin ?? 0), c = k(() => a.rawMax ?? 100), l = k(() => a.modelValueMin ?? s.value), o = k(() => a.modelValueMax ?? c.value), u = k(
|
|
215
215
|
() => l.value <= s.value ? a.minLabel ?? "any" : a.formatRaw(a.rawToDomain(l.value))
|
|
216
216
|
), m = k(
|
|
217
|
-
() =>
|
|
218
|
-
), g = k(() => l.value <= s.value &&
|
|
217
|
+
() => o.value >= c.value ? a.maxLabel ?? "any" : a.formatRaw(a.rawToDomain(o.value))
|
|
218
|
+
), g = k(() => l.value <= s.value && o.value >= c.value ? "any" : `${u.value} – ${m.value}`);
|
|
219
219
|
function f(r) {
|
|
220
220
|
let w = parseInt(r.target.value, 10);
|
|
221
|
-
isNaN(w) || (w >
|
|
221
|
+
isNaN(w) || (w > o.value && (w = o.value), n("update:modelValueMin", w <= s.value ? null : w));
|
|
222
222
|
}
|
|
223
223
|
function d(r) {
|
|
224
224
|
let w = parseInt(r.target.value, 10);
|
|
@@ -227,29 +227,31 @@ const Ge = 20, ze = 350, He = 2e3, je = 2e4, We = 30, qe = [
|
|
|
227
227
|
return (r, w) => {
|
|
228
228
|
var I;
|
|
229
229
|
return p(), y("div", gt, [
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
230
|
+
i("div", ht, [
|
|
231
|
+
i("label", yt, b(e.label), 1),
|
|
232
|
+
i("span", Mt, b(g.value), 1)
|
|
233
233
|
]),
|
|
234
|
-
|
|
235
|
-
|
|
234
|
+
i("div", bt, [
|
|
235
|
+
i("input", {
|
|
236
236
|
type: "range",
|
|
237
237
|
class: "range-dual",
|
|
238
238
|
min: s.value,
|
|
239
239
|
max: c.value,
|
|
240
240
|
value: l.value,
|
|
241
|
+
style: ie({ zIndex: l.value <= s.value || l.value >= o.value ? 5 : 4 }),
|
|
241
242
|
onInput: f,
|
|
242
243
|
onChange: f
|
|
243
|
-
}, null,
|
|
244
|
-
|
|
244
|
+
}, null, 44, xt),
|
|
245
|
+
i("input", {
|
|
245
246
|
type: "range",
|
|
246
247
|
class: "range-dual",
|
|
247
248
|
min: s.value,
|
|
248
249
|
max: c.value,
|
|
249
|
-
value:
|
|
250
|
+
value: o.value,
|
|
251
|
+
style: ie({ zIndex: l.value <= s.value || l.value >= o.value ? 4 : 5 }),
|
|
250
252
|
onInput: d,
|
|
251
253
|
onChange: d
|
|
252
|
-
}, null,
|
|
254
|
+
}, null, 44, wt)
|
|
253
255
|
]),
|
|
254
256
|
(I = e.scaleHints) != null && I.length ? (p(), y("div", $t, [
|
|
255
257
|
(p(!0), y(U, null, K(e.scaleHints, (_) => (p(), y("span", { key: _ }, b(_), 1))), 128))
|
|
@@ -257,13 +259,13 @@ const Ge = 20, ze = 350, He = 2e3, je = 2e4, We = 30, qe = [
|
|
|
257
259
|
]);
|
|
258
260
|
};
|
|
259
261
|
}
|
|
260
|
-
}),
|
|
261
|
-
function
|
|
262
|
+
}), be = /* @__PURE__ */ N(kt, [["__scopeId", "data-v-0bf11d26"]]);
|
|
263
|
+
function xe(e, t = 2) {
|
|
262
264
|
if (e == null || isNaN(Number(e))) return null;
|
|
263
265
|
const a = Number(e);
|
|
264
266
|
return { text: `${a.toFixed(t)}%`, positive: a >= 0 };
|
|
265
267
|
}
|
|
266
|
-
function
|
|
268
|
+
function we(e, t = "en-US") {
|
|
267
269
|
if (e == null || isNaN(Number(e))) return "—";
|
|
268
270
|
const a = Number(e), n = a < 0 ? "-" : "", s = Math.abs(a);
|
|
269
271
|
let c;
|
|
@@ -277,13 +279,13 @@ function H(e, t = "en-US") {
|
|
|
277
279
|
maximumFractionDigits: 2
|
|
278
280
|
})}`;
|
|
279
281
|
}
|
|
280
|
-
function
|
|
282
|
+
function $e(e, t = "en-US") {
|
|
281
283
|
return e == null ? "—" : Number(e).toLocaleString(t);
|
|
282
284
|
}
|
|
283
285
|
function It(e) {
|
|
284
286
|
return e.Fee == null ? e._meta ? "free" : "—" : `${(e.Fee * 100).toFixed(0)}%`;
|
|
285
287
|
}
|
|
286
|
-
function
|
|
288
|
+
function ke(e, t = "en-US") {
|
|
287
289
|
if (!e) return "—";
|
|
288
290
|
const a = new Date(e);
|
|
289
291
|
return isNaN(a.getTime()) ? "—" : a.toLocaleString(t, {
|
|
@@ -303,7 +305,7 @@ function _t(e) {
|
|
|
303
305
|
const a = Math.floor(e / 365), n = Math.floor((e - a * 365) / 30);
|
|
304
306
|
return n ? `${a}y ${n}mo` : `${a}y`;
|
|
305
307
|
}
|
|
306
|
-
function
|
|
308
|
+
function ce(e) {
|
|
307
309
|
return e >= 1e6 ? "$" + (e / 1e6).toFixed(2) + "M" : e >= 1e3 ? "$" + Math.round(e / 1e3) + "K" : "$" + Math.round(e);
|
|
308
310
|
}
|
|
309
311
|
function St(e) {
|
|
@@ -317,7 +319,7 @@ function j(e) {
|
|
|
317
319
|
const t = new Date(e);
|
|
318
320
|
return isNaN(t.getTime()) ? null : Math.floor((Date.now() - t.getTime()) / 864e5);
|
|
319
321
|
}
|
|
320
|
-
const le = (e) => e <= 0 ? 0 : Math.round(Math.pow(10, 1 + (e - 1) / 99 * 6)),
|
|
322
|
+
const le = (e) => e <= 0 ? 0 : Math.round(Math.pow(10, 1 + (e - 1) / 99 * 6)), Ie = (e) => e <= 0 ? 0 : Math.max(1, Math.min(100, Math.round(1 + (Math.log10(e) - 1) * 99 / 6))), se = (e) => e <= 0 ? 0 : Math.round(Math.pow(10, (e - 1) / 99 * 4.7)), Pt = { class: "pelican-fgroup" }, Ct = { class: "title-row" }, Tt = { class: "val" }, At = ["value"], Ft = /* @__PURE__ */ F({
|
|
321
323
|
__name: "InvestAmount",
|
|
322
324
|
props: {
|
|
323
325
|
modelValue: {}
|
|
@@ -325,27 +327,27 @@ const le = (e) => e <= 0 ? 0 : Math.round(Math.pow(10, 1 + (e - 1) / 99 * 6)), k
|
|
|
325
327
|
emits: ["update:modelValue", "apply"],
|
|
326
328
|
setup(e, { emit: t }) {
|
|
327
329
|
const a = e, n = t, s = k(
|
|
328
|
-
() => a.modelValue == null ? "any" :
|
|
330
|
+
() => a.modelValue == null ? "any" : ce(a.modelValue)
|
|
329
331
|
);
|
|
330
332
|
function c(l) {
|
|
331
|
-
const
|
|
332
|
-
if (!
|
|
333
|
+
const o = l.target.value.trim();
|
|
334
|
+
if (!o) {
|
|
333
335
|
n("update:modelValue", null), n("apply", null);
|
|
334
336
|
return;
|
|
335
337
|
}
|
|
336
|
-
const u = parseInt(
|
|
338
|
+
const u = parseInt(o, 10);
|
|
337
339
|
if (isNaN(u) || u <= 0) {
|
|
338
340
|
n("update:modelValue", null), n("apply", null);
|
|
339
341
|
return;
|
|
340
342
|
}
|
|
341
|
-
n("update:modelValue", u), n("apply", { min:
|
|
343
|
+
n("update:modelValue", u), n("apply", { min: Ie(50), max: Ie(u) });
|
|
342
344
|
}
|
|
343
|
-
return (l,
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
345
|
+
return (l, o) => (p(), y("div", Pt, [
|
|
346
|
+
i("div", Ct, [
|
|
347
|
+
o[0] || (o[0] = i("label", { class: "title" }, "Your Investment Amount, $", -1)),
|
|
348
|
+
i("span", Tt, b(s.value), 1)
|
|
347
349
|
]),
|
|
348
|
-
|
|
350
|
+
i("input", {
|
|
349
351
|
type: "number",
|
|
350
352
|
min: 50,
|
|
351
353
|
step: 50,
|
|
@@ -365,14 +367,14 @@ const le = (e) => e <= 0 ? 0 : Math.round(Math.pow(10, 1 + (e - 1) / 99 * 6)), k
|
|
|
365
367
|
},
|
|
366
368
|
emits: ["update:filters", "update:investAmount", "reset"],
|
|
367
369
|
setup(e, { emit: t }) {
|
|
368
|
-
const a = e, n = t, s = R(0), c = R(100), l = R(0),
|
|
370
|
+
const a = e, n = t, s = R(0), c = R(100), l = R(0), o = R(100);
|
|
369
371
|
E(s, (f) => {
|
|
370
372
|
n("update:filters", { retMin: f <= 0 ? null : se(f) });
|
|
371
373
|
}), E(c, (f) => {
|
|
372
374
|
n("update:filters", { retMax: f >= 100 ? null : se(f) });
|
|
373
375
|
}), E(l, (f) => {
|
|
374
376
|
n("update:filters", { balanceMin: f <= 0 ? null : le(f) });
|
|
375
|
-
}), E(
|
|
377
|
+
}), E(o, (f) => {
|
|
376
378
|
n("update:filters", { balanceMax: f >= 100 ? null : le(f) });
|
|
377
379
|
}), E(
|
|
378
380
|
() => [a.filters.retMin, a.filters.retMax],
|
|
@@ -382,7 +384,7 @@ const le = (e) => e <= 0 ? 0 : Math.round(Math.pow(10, 1 + (e - 1) / 99 * 6)), k
|
|
|
382
384
|
), E(
|
|
383
385
|
() => [a.filters.balanceMin, a.filters.balanceMax],
|
|
384
386
|
([f, d]) => {
|
|
385
|
-
f == null && (l.value = 0), d == null && (
|
|
387
|
+
f == null && (l.value = 0), d == null && (o.value = 100);
|
|
386
388
|
}
|
|
387
389
|
);
|
|
388
390
|
function u(f) {
|
|
@@ -392,14 +394,14 @@ const le = (e) => e <= 0 ? 0 : Math.round(Math.pow(10, 1 + (e - 1) / 99 * 6)), k
|
|
|
392
394
|
u({ risk: f });
|
|
393
395
|
}
|
|
394
396
|
function g(f) {
|
|
395
|
-
f == null ? (u({ balanceMin: null, balanceMax: null }), l.value = 0,
|
|
397
|
+
f == null ? (u({ balanceMin: null, balanceMax: null }), l.value = 0, o.value = 100) : (l.value = f.min, o.value = f.max);
|
|
396
398
|
}
|
|
397
399
|
return (f, d) => (p(), y("aside", {
|
|
398
400
|
class: B(["pelican-filters", { open: e.open }])
|
|
399
401
|
}, [
|
|
400
|
-
|
|
401
|
-
d[13] || (d[13] =
|
|
402
|
-
|
|
402
|
+
i("div", Lt, [
|
|
403
|
+
d[13] || (d[13] = i("label", { class: "ftitle" }, "Risk", -1)),
|
|
404
|
+
i("button", {
|
|
403
405
|
class: "btn-reset",
|
|
404
406
|
type: "button",
|
|
405
407
|
onClick: d[0] || (d[0] = (r) => n("reset"))
|
|
@@ -414,7 +416,7 @@ const le = (e) => e <= 0 ? 0 : Math.round(Math.pow(10, 1 + (e - 1) / 99 * 6)), k
|
|
|
414
416
|
"onUpdate:modelValue": d[1] || (d[1] = (r) => n("update:investAmount", r)),
|
|
415
417
|
onApply: g
|
|
416
418
|
}, null, 8, ["model-value"]),
|
|
417
|
-
P(
|
|
419
|
+
P(be, {
|
|
418
420
|
label: "Return %",
|
|
419
421
|
"model-value-min": s.value,
|
|
420
422
|
"model-value-max": c.value,
|
|
@@ -425,7 +427,7 @@ const le = (e) => e <= 0 ? 0 : Math.round(Math.pow(10, 1 + (e - 1) / 99 * 6)), k
|
|
|
425
427
|
"onUpdate:modelValueMin": d[2] || (d[2] = (r) => s.value = r ?? 0),
|
|
426
428
|
"onUpdate:modelValueMax": d[3] || (d[3] = (r) => c.value = r ?? 100)
|
|
427
429
|
}, null, 8, ["model-value-min", "model-value-max", "format-raw", "raw-to-domain"]),
|
|
428
|
-
P(
|
|
430
|
+
P(G, {
|
|
429
431
|
label: "Max Drawdown ≤",
|
|
430
432
|
"model-value": e.filters.ddMax,
|
|
431
433
|
min: 0,
|
|
@@ -436,18 +438,18 @@ const le = (e) => e <= 0 ? 0 : Math.round(Math.pow(10, 1 + (e - 1) / 99 * 6)), k
|
|
|
436
438
|
format: (r) => r + "%",
|
|
437
439
|
"onUpdate:modelValue": d[4] || (d[4] = (r) => u({ ddMax: r == null || r >= 100 ? null : r }))
|
|
438
440
|
}, null, 8, ["model-value", "format"]),
|
|
439
|
-
P(
|
|
441
|
+
P(be, {
|
|
440
442
|
label: "Balance",
|
|
441
443
|
"model-value-min": l.value,
|
|
442
|
-
"model-value-max":
|
|
443
|
-
"format-raw": (r) => v(
|
|
444
|
+
"model-value-max": o.value,
|
|
445
|
+
"format-raw": (r) => v(ce)(r),
|
|
444
446
|
"raw-to-domain": (r) => v(le)(r),
|
|
445
447
|
"scale-hints": ["$0", "$10K", "$10M"],
|
|
446
448
|
"max-label": "$10M+",
|
|
447
449
|
"onUpdate:modelValueMin": d[5] || (d[5] = (r) => l.value = r ?? 0),
|
|
448
|
-
"onUpdate:modelValueMax": d[6] || (d[6] = (r) =>
|
|
450
|
+
"onUpdate:modelValueMax": d[6] || (d[6] = (r) => o.value = r ?? 100)
|
|
449
451
|
}, null, 8, ["model-value-min", "model-value-max", "format-raw", "raw-to-domain"]),
|
|
450
|
-
P(
|
|
452
|
+
P(G, {
|
|
451
453
|
label: "Mgmt Fee ≤",
|
|
452
454
|
"model-value": e.filters.feeMax,
|
|
453
455
|
min: 0,
|
|
@@ -458,16 +460,16 @@ const le = (e) => e <= 0 ? 0 : Math.round(Math.pow(10, 1 + (e - 1) / 99 * 6)), k
|
|
|
458
460
|
format: (r) => r + "%",
|
|
459
461
|
"onUpdate:modelValue": d[7] || (d[7] = (r) => u({ feeMax: r == null || r >= 100 ? null : r }))
|
|
460
462
|
}, null, 8, ["model-value", "format"]),
|
|
461
|
-
P(
|
|
463
|
+
P(G, {
|
|
462
464
|
label: "Copiers AUM ≥",
|
|
463
465
|
"model-value": e.filters.aumMin,
|
|
464
466
|
min: 0,
|
|
465
467
|
max: 5e6,
|
|
466
468
|
step: 5e4,
|
|
467
|
-
format: (r) => "≥ " + v(
|
|
469
|
+
format: (r) => "≥ " + v(ce)(r),
|
|
468
470
|
"onUpdate:modelValue": d[8] || (d[8] = (r) => u({ aumMin: r && r > 0 ? r : null }))
|
|
469
471
|
}, null, 8, ["model-value", "format"]),
|
|
470
|
-
P(
|
|
472
|
+
P(G, {
|
|
471
473
|
label: "Copiers ≥",
|
|
472
474
|
"model-value": e.filters.copiersMin,
|
|
473
475
|
min: 0,
|
|
@@ -476,7 +478,7 @@ const le = (e) => e <= 0 ? 0 : Math.round(Math.pow(10, 1 + (e - 1) / 99 * 6)), k
|
|
|
476
478
|
format: (r) => "≥ " + r,
|
|
477
479
|
"onUpdate:modelValue": d[9] || (d[9] = (r) => u({ copiersMin: r && r > 0 ? r : null }))
|
|
478
480
|
}, null, 8, ["model-value", "format"]),
|
|
479
|
-
P(
|
|
481
|
+
P(G, {
|
|
480
482
|
label: "Age ≥ (days)",
|
|
481
483
|
"model-value": e.filters.ageMin,
|
|
482
484
|
min: 0,
|
|
@@ -485,7 +487,7 @@ const le = (e) => e <= 0 ? 0 : Math.round(Math.pow(10, 1 + (e - 1) / 99 * 6)), k
|
|
|
485
487
|
format: (r) => "≥ " + r + "d",
|
|
486
488
|
"onUpdate:modelValue": d[10] || (d[10] = (r) => u({ ageMin: r && r > 0 ? r : null }))
|
|
487
489
|
}, null, 8, ["model-value", "format"]),
|
|
488
|
-
P(
|
|
490
|
+
P(G, {
|
|
489
491
|
label: "Trades ≥",
|
|
490
492
|
"model-value": e.filters.tradesMin,
|
|
491
493
|
min: 0,
|
|
@@ -494,7 +496,7 @@ const le = (e) => e <= 0 ? 0 : Math.round(Math.pow(10, 1 + (e - 1) / 99 * 6)), k
|
|
|
494
496
|
format: (r) => "≥ " + r,
|
|
495
497
|
"onUpdate:modelValue": d[11] || (d[11] = (r) => u({ tradesMin: r && r > 0 ? r : null }))
|
|
496
498
|
}, null, 8, ["model-value", "format"]),
|
|
497
|
-
P(
|
|
499
|
+
P(G, {
|
|
498
500
|
label: "Win Rate ≥",
|
|
499
501
|
"model-value": e.filters.winrateMin,
|
|
500
502
|
min: 0,
|
|
@@ -505,7 +507,7 @@ const le = (e) => e <= 0 ? 0 : Math.round(Math.pow(10, 1 + (e - 1) / 99 * 6)), k
|
|
|
505
507
|
}, null, 8, ["model-value", "format"])
|
|
506
508
|
], 2));
|
|
507
509
|
}
|
|
508
|
-
}), Ut = /* @__PURE__ */ N(Dt, [["__scopeId", "data-v-67cc5448"]]),
|
|
510
|
+
}), Ut = /* @__PURE__ */ N(Dt, [["__scopeId", "data-v-67cc5448"]]), _e = [
|
|
509
511
|
"#f97316",
|
|
510
512
|
"#3b82f6",
|
|
511
513
|
"#10b981",
|
|
@@ -532,7 +534,7 @@ function Vt(e, t = 140, a = 34) {
|
|
|
532
534
|
startX: 1,
|
|
533
535
|
endX: t - 1
|
|
534
536
|
};
|
|
535
|
-
const n = e.map((S) => Date.parse(S.Timestamp)), s = n[0], c = n[n.length - 1], l = c - s || 1,
|
|
537
|
+
const n = e.map((S) => Date.parse(S.Timestamp)), s = n[0], c = n[n.length - 1], l = c - s || 1, o = e.map((S) => S.AccountReturn), u = Math.min(0, ...o), g = Math.max(0, ...o) - u || 1, f = (S) => (S - s) / l * (t - 2) + 1, d = (S) => a - 2 - (S - u) / g * (a - 4), r = e.map((S, x) => `${f(n[x]).toFixed(1)},${d(S.AccountReturn).toFixed(1)}`), w = o[o.length - 1], I = d(0), _ = f(s), h = f(c), C = `M ${r.join(" L ")}`, V = `M ${r[0]} ` + r.slice(1).map((S) => `L ${S}`).join(" ") + ` L ${h.toFixed(1)},${I.toFixed(1)} L ${_.toFixed(1)},${I.toFixed(1)} Z`;
|
|
536
538
|
return {
|
|
537
539
|
hasData: !0,
|
|
538
540
|
width: t,
|
|
@@ -546,32 +548,32 @@ function Vt(e, t = 140, a = 34) {
|
|
|
546
548
|
};
|
|
547
549
|
}
|
|
548
550
|
function Et(e, t = 520, a = 280) {
|
|
549
|
-
const n = e.slice().sort((d, r) => (r.c || 0) - (d.c || 0)), s = n.reduce((d, r) => d + (r.c || 0), 0) || 1, c = t / 2, l = a / 2,
|
|
551
|
+
const n = e.slice().sort((d, r) => (r.c || 0) - (d.c || 0)), s = n.reduce((d, r) => d + (r.c || 0), 0) || 1, c = t / 2, l = a / 2, o = 90, u = 52, m = o + 10;
|
|
550
552
|
let g = -Math.PI / 2;
|
|
551
553
|
const f = [];
|
|
552
554
|
return n.forEach((d, r) => {
|
|
553
555
|
const w = (d.c || 0) / s, I = w * Math.PI * 2, _ = g, h = g + I;
|
|
554
556
|
g = h;
|
|
555
|
-
const C = (_ + h) / 2, V = I > Math.PI ? 1 : 0, S = c +
|
|
556
|
-
let
|
|
557
|
+
const C = (_ + h) / 2, V = I > Math.PI ? 1 : 0, S = c + o * Math.cos(_), x = l + o * Math.sin(_), $ = c + o * Math.cos(h), M = l + o * Math.sin(h), T = c + u * Math.cos(_), Y = l + u * Math.sin(_), z = c + u * Math.cos(h), L = l + u * Math.sin(h), A = `M ${S.toFixed(2)} ${x.toFixed(2)} A ${o} ${o} 0 ${V} 1 ${$.toFixed(2)} ${M.toFixed(2)} L ${z.toFixed(2)} ${L.toFixed(2)} A ${u} ${u} 0 ${V} 0 ${T.toFixed(2)} ${Y.toFixed(2)} Z`, Fe = _e[r % _e.length];
|
|
558
|
+
let fe = null, ve = 0, pe = 0, ge = "start";
|
|
557
559
|
if (w >= 0.015) {
|
|
558
|
-
const Q = Math.cos(C) < 0,
|
|
559
|
-
|
|
560
|
+
const Q = Math.cos(C) < 0, Ne = c + o * Math.cos(C), Le = l + o * Math.sin(C), X = c + m * Math.cos(C), ee = l + m * Math.sin(C), De = Q ? X - 4 : X + 4;
|
|
561
|
+
fe = `${Ne.toFixed(1)},${Le.toFixed(1)} ${X.toFixed(1)},${ee.toFixed(1)} ${De.toFixed(1)},${ee.toFixed(1)}`, ve = Q ? X - 6 : X + 6, pe = ee + 4, ge = Q ? "end" : "start";
|
|
560
562
|
}
|
|
561
563
|
f.push({
|
|
562
564
|
marketName: d.n,
|
|
563
565
|
count: d.c,
|
|
564
566
|
fraction: w,
|
|
565
|
-
color:
|
|
567
|
+
color: Fe,
|
|
566
568
|
arcPath: A,
|
|
567
|
-
labelLine:
|
|
568
|
-
labelX:
|
|
569
|
-
labelY:
|
|
570
|
-
labelAnchor:
|
|
569
|
+
labelLine: fe,
|
|
570
|
+
labelX: ve,
|
|
571
|
+
labelY: pe,
|
|
572
|
+
labelAnchor: ge
|
|
571
573
|
});
|
|
572
|
-
}), { width: t, height: a, cx: c, cy: l, outerR:
|
|
574
|
+
}), { width: t, height: a, cx: c, cy: l, outerR: o, innerR: u, slices: f };
|
|
573
575
|
}
|
|
574
|
-
const Bt = ["width", "height"], Ot = ["width", "height", "viewBox"], Kt = ["x2", "y1", "y2"], Yt = ["d", "fill"],
|
|
576
|
+
const Bt = ["width", "height"], Ot = ["width", "height", "viewBox"], Kt = ["x2", "y1", "y2"], Yt = ["d", "fill"], zt = ["d", "stroke"], Gt = /* @__PURE__ */ F({
|
|
575
577
|
__name: "Sparkline",
|
|
576
578
|
props: {
|
|
577
579
|
history: {},
|
|
@@ -590,7 +592,7 @@ const Bt = ["width", "height"], Ot = ["width", "height", "viewBox"], Kt = ["x2",
|
|
|
590
592
|
role: "img",
|
|
591
593
|
"aria-label": "Equity curve"
|
|
592
594
|
}, [
|
|
593
|
-
|
|
595
|
+
i("line", {
|
|
594
596
|
x1: "0",
|
|
595
597
|
x2: a.value.width,
|
|
596
598
|
y1: a.value.zeroY,
|
|
@@ -600,12 +602,12 @@ const Bt = ["width", "height"], Ot = ["width", "height", "viewBox"], Kt = ["x2",
|
|
|
600
602
|
"stroke-width": "1",
|
|
601
603
|
"vector-effect": "non-scaling-stroke"
|
|
602
604
|
}, null, 8, Kt),
|
|
603
|
-
|
|
605
|
+
i("path", {
|
|
604
606
|
d: a.value.areaPath,
|
|
605
607
|
fill: a.value.positive ? "var(--area-green)" : "var(--area-red)",
|
|
606
608
|
stroke: "none"
|
|
607
609
|
}, null, 8, Yt),
|
|
608
|
-
|
|
610
|
+
i("path", {
|
|
609
611
|
d: a.value.linePath,
|
|
610
612
|
fill: "none",
|
|
611
613
|
stroke: a.value.positive ? "var(--green)" : "var(--red)",
|
|
@@ -613,7 +615,7 @@ const Bt = ["width", "height"], Ot = ["width", "height", "viewBox"], Kt = ["x2",
|
|
|
613
615
|
"stroke-linejoin": "round",
|
|
614
616
|
"stroke-linecap": "round",
|
|
615
617
|
"vector-effect": "non-scaling-stroke"
|
|
616
|
-
}, null, 8,
|
|
618
|
+
}, null, 8, zt)
|
|
617
619
|
], 8, Ot)) : (p(), y("svg", {
|
|
618
620
|
key: 0,
|
|
619
621
|
class: "pelican-spark",
|
|
@@ -622,7 +624,7 @@ const Bt = ["width", "height"], Ot = ["width", "height", "viewBox"], Kt = ["x2",
|
|
|
622
624
|
role: "img",
|
|
623
625
|
"aria-label": "No equity data"
|
|
624
626
|
}, [...s[0] || (s[0] = [
|
|
625
|
-
|
|
627
|
+
i("text", {
|
|
626
628
|
x: "2",
|
|
627
629
|
y: "20",
|
|
628
630
|
"font-size": "11",
|
|
@@ -630,7 +632,7 @@ const Bt = ["width", "height"], Ot = ["width", "height", "viewBox"], Kt = ["x2",
|
|
|
630
632
|
}, "no data", -1)
|
|
631
633
|
])], 8, Bt));
|
|
632
634
|
}
|
|
633
|
-
}), Ht = /* @__PURE__ */ N(
|
|
635
|
+
}), Ht = /* @__PURE__ */ N(Gt, [["__scopeId", "data-v-a9b85847"]]), jt = {
|
|
634
636
|
key: 0,
|
|
635
637
|
class: "dim"
|
|
636
638
|
}, Wt = ["viewBox"], qt = ["d", "fill"], Xt = ["points", "stroke"], Zt = ["x", "y", "text-anchor"], Jt = {
|
|
@@ -654,7 +656,7 @@ const Bt = ["width", "height"], Ot = ["width", "height", "viewBox"], Kt = ["x2",
|
|
|
654
656
|
role: "img",
|
|
655
657
|
"aria-label": "Markets donut chart"
|
|
656
658
|
}, [
|
|
657
|
-
|
|
659
|
+
i("g", null, [
|
|
658
660
|
(p(!0), y(U, null, K(n.value.slices, (l) => (p(), y("path", {
|
|
659
661
|
key: l.marketName + l.fraction,
|
|
660
662
|
d: l.arcPath,
|
|
@@ -663,19 +665,19 @@ const Bt = ["width", "height"], Ot = ["width", "height", "viewBox"], Kt = ["x2",
|
|
|
663
665
|
"stroke-width": "1.5"
|
|
664
666
|
}, null, 8, qt))), 128))
|
|
665
667
|
]),
|
|
666
|
-
|
|
667
|
-
(p(!0), y(U, null, K(n.value.slices, (l) =>
|
|
668
|
+
i("g", null, [
|
|
669
|
+
(p(!0), y(U, null, K(n.value.slices, (l) => he((p(), y("polyline", {
|
|
668
670
|
key: `l-${l.marketName}`,
|
|
669
671
|
points: l.labelLine ?? "",
|
|
670
672
|
stroke: l.color,
|
|
671
673
|
"stroke-width": "1",
|
|
672
674
|
fill: "none"
|
|
673
675
|
}, null, 8, Xt)), [
|
|
674
|
-
[
|
|
676
|
+
[ye, l.labelLine]
|
|
675
677
|
])), 128))
|
|
676
678
|
]),
|
|
677
|
-
|
|
678
|
-
(p(!0), y(U, null, K(n.value.slices, (l) =>
|
|
679
|
+
i("g", null, [
|
|
680
|
+
(p(!0), y(U, null, K(n.value.slices, (l) => he((p(), y("text", {
|
|
679
681
|
key: `t-${l.marketName}`,
|
|
680
682
|
x: l.labelX,
|
|
681
683
|
y: l.labelY,
|
|
@@ -685,9 +687,9 @@ const Bt = ["width", "height"], Ot = ["width", "height", "viewBox"], Kt = ["x2",
|
|
|
685
687
|
"font-weight": "500"
|
|
686
688
|
}, [
|
|
687
689
|
D(b(l.marketName) + " ", 1),
|
|
688
|
-
|
|
690
|
+
i("tspan", Jt, b(l.count), 1)
|
|
689
691
|
], 8, Zt)), [
|
|
690
|
-
[
|
|
692
|
+
[ye, l.labelLine]
|
|
691
693
|
])), 128))
|
|
692
694
|
])
|
|
693
695
|
], 8, Wt));
|
|
@@ -714,17 +716,17 @@ const Bt = ["width", "height"], Ot = ["width", "height", "viewBox"], Kt = ["x2",
|
|
|
714
716
|
() => !t.loading && (t.trades == null || t.trades.length === 0)
|
|
715
717
|
);
|
|
716
718
|
return (s, c) => (p(), y("div", ta, [
|
|
717
|
-
|
|
719
|
+
i("div", aa, b(a.value), 1),
|
|
718
720
|
e.loading ? (p(), y("div", na, "Loading…")) : n.value ? (p(), y("div", la, "No trades.")) : (p(), y("ul", sa, [
|
|
719
|
-
(p(!0), y(U, null, K(e.trades ?? [], (l,
|
|
720
|
-
|
|
721
|
-
|
|
721
|
+
(p(!0), y(U, null, K(e.trades ?? [], (l, o) => (p(), y("li", { key: o }, [
|
|
722
|
+
i("span", oa, b(l.MarketName ?? "—"), 1),
|
|
723
|
+
i("span", {
|
|
722
724
|
class: B(["dir", l.Direction === "Sell" ? "red" : "green"])
|
|
723
725
|
}, b(l.Direction ?? ""), 3),
|
|
724
|
-
|
|
725
|
-
D(b(v(
|
|
726
|
+
i("span", ia, [
|
|
727
|
+
D(b(v(ke)(l.OpenTimestamp, e.locale)) + " ", 1),
|
|
726
728
|
l.CloseTimestamp ? (p(), y(U, { key: 0 }, [
|
|
727
|
-
D(" → " + b(v(
|
|
729
|
+
D(" → " + b(v(ke)(l.CloseTimestamp, e.locale)), 1)
|
|
728
730
|
], 64)) : O("", !0)
|
|
729
731
|
]),
|
|
730
732
|
l.Pnl != null ? (p(), y("span", {
|
|
@@ -735,12 +737,12 @@ const Bt = ["width", "height"], Ot = ["width", "height", "viewBox"], Kt = ["x2",
|
|
|
735
737
|
]))
|
|
736
738
|
]));
|
|
737
739
|
}
|
|
738
|
-
}),
|
|
740
|
+
}), Se = /* @__PURE__ */ N(ra, [["__scopeId", "data-v-aa7cbcd7"]]);
|
|
739
741
|
function W(e) {
|
|
740
742
|
const t = e.Wins ?? 0, a = e.Losses ?? 0, n = t + a;
|
|
741
743
|
return n ? t / n * 100 : -1;
|
|
742
744
|
}
|
|
743
|
-
const ua = Symbol("pelican.apiBase"), ca = Symbol("pelican.catalogBase"),
|
|
745
|
+
const ua = Symbol("pelican.apiBase"), ca = Symbol("pelican.catalogBase"), Te = Symbol("pelican.locale"), da = ["data-id"], ma = { class: "name" }, fa = { class: "avatar" }, va = { class: "avatar-fallback" }, pa = ["src"], ga = { class: "nm" }, ha = { class: "title" }, ya = {
|
|
744
746
|
key: 0,
|
|
745
747
|
class: "free-badge"
|
|
746
748
|
}, Ma = { class: "by" }, ba = {
|
|
@@ -767,7 +769,7 @@ const ua = Symbol("pelican.apiBase"), ca = Symbol("pelican.catalogBase"), Ce = S
|
|
|
767
769
|
}, Pa = {
|
|
768
770
|
class: "c-num",
|
|
769
771
|
"data-label": "Fee"
|
|
770
|
-
}, Ca = ["href"], Ta = { class: "grid" }, Aa = { class: "col-stats" }, Fa = { class: "field" }, Na = { class: "value" }, La = { class: "field" }, Da = { class: "value" }, Ua = { class: "field" }, Va = { class: "value" }, Ea = { class: "field" }, Ba = { class: "value" }, Oa = { class: "field" }, Ka = { class: "value" }, Ya = { class: "field" },
|
|
772
|
+
}, Ca = ["href"], Ta = { class: "grid" }, Aa = { class: "col-stats" }, Fa = { class: "field" }, Na = { class: "value" }, La = { class: "field" }, Da = { class: "value" }, Ua = { class: "field" }, Va = { class: "value" }, Ea = { class: "field" }, Ba = { class: "value" }, Oa = { class: "field" }, Ka = { class: "value" }, Ya = { class: "field" }, za = { class: "value" }, Ga = { class: "field" }, Ha = { class: "value" }, ja = { class: "field" }, Wa = { class: "value" }, qa = { key: 0 }, Xa = {
|
|
771
773
|
key: 1,
|
|
772
774
|
class: "dim"
|
|
773
775
|
}, Za = { class: "col-donut" }, Ja = { class: "trade-toggles" }, Qa = /* @__PURE__ */ F({
|
|
@@ -780,7 +782,7 @@ const ua = Symbol("pelican.apiBase"), ca = Symbol("pelican.catalogBase"), Ce = S
|
|
|
780
782
|
},
|
|
781
783
|
emits: ["toggle", "load-trades", "select"],
|
|
782
784
|
setup(e, { emit: t }) {
|
|
783
|
-
const a = e, n = t, s =
|
|
785
|
+
const a = e, n = t, s = Ue(Te, "en-US"), c = k(() => xe(a.s.Return, 1)), l = k(() => a.s.MaxDD != null ? xe(a.s.MaxDD, 2) : null), o = k(() => j(a.s.Inception)), u = k(() => W(a.s)), m = k(() => u.value >= 0 ? 100 - u.value : -1), g = k(
|
|
784
786
|
() => {
|
|
785
787
|
var _, h;
|
|
786
788
|
return ((_ = a.s.Profile) == null ? void 0 : _.Name) ?? ((h = a.s.Profile) != null && h.Id ? "#" + a.s.Profile.Id : "");
|
|
@@ -795,14 +797,14 @@ const ua = Symbol("pelican.apiBase"), ca = Symbol("pelican.catalogBase"), Ce = S
|
|
|
795
797
|
return (_, h) => {
|
|
796
798
|
var C, V, S, x;
|
|
797
799
|
return p(), y(U, null, [
|
|
798
|
-
|
|
800
|
+
i("div", {
|
|
799
801
|
class: B(["pelican-row", { open: e.expanded }]),
|
|
800
802
|
"data-id": e.s.Id,
|
|
801
803
|
onClick: h[3] || (h[3] = ($) => n("toggle"))
|
|
802
804
|
}, [
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
805
|
+
i("div", ma, [
|
|
806
|
+
i("div", fa, [
|
|
807
|
+
i("span", va, b(v(Rt)(e.s.Name)), 1),
|
|
806
808
|
e.s.ImageUploaded ? (p(), y("img", {
|
|
807
809
|
key: 0,
|
|
808
810
|
class: "avatar-img",
|
|
@@ -813,42 +815,42 @@ const ua = Symbol("pelican.apiBase"), ca = Symbol("pelican.catalogBase"), Ce = S
|
|
|
813
815
|
onError: h[0] || (h[0] = ($) => $.target.remove())
|
|
814
816
|
}, null, 40, pa)) : O("", !0)
|
|
815
817
|
]),
|
|
816
|
-
|
|
817
|
-
|
|
818
|
+
i("div", ga, [
|
|
819
|
+
i("div", ha, [
|
|
818
820
|
D(b(e.s.Name || "#" + e.s.Id) + " ", 1),
|
|
819
821
|
e.s._meta && e.s.Fee == null ? (p(), y("span", ya, "free")) : O("", !0)
|
|
820
822
|
]),
|
|
821
|
-
|
|
823
|
+
i("div", Ma, b(g.value), 1)
|
|
822
824
|
])
|
|
823
825
|
]),
|
|
824
|
-
|
|
826
|
+
i("div", ba, [
|
|
825
827
|
P(Ht, {
|
|
826
828
|
history: e.s.History
|
|
827
829
|
}, null, 8, ["history"])
|
|
828
830
|
]),
|
|
829
|
-
|
|
831
|
+
i("div", xa, [
|
|
830
832
|
c.value ? (p(), y("span", {
|
|
831
833
|
key: 0,
|
|
832
834
|
class: B(c.value.positive ? "green" : "red")
|
|
833
835
|
}, b(c.value.text), 3)) : (p(), y("span", wa, "—"))
|
|
834
836
|
]),
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
837
|
+
i("div", $a, b(v($e)(e.s.NumCopiers, v(s))), 1),
|
|
838
|
+
i("div", ka, b(v(we)(e.s.CopiersAUM, v(s))), 1),
|
|
839
|
+
i("div", Ia, [
|
|
838
840
|
l.value ? (p(), y("span", {
|
|
839
841
|
key: 0,
|
|
840
842
|
class: B(l.value.positive ? "green" : "red")
|
|
841
843
|
}, b(l.value.text), 3)) : (p(), y("span", _a, "—"))
|
|
842
844
|
]),
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
845
|
+
i("div", Sa, b(v(_t)(o.value)), 1),
|
|
846
|
+
i("div", Ra, b(v(we)(e.s.AccountBalance, v(s))), 1),
|
|
847
|
+
i("div", Pa, b(v(It)(e.s)), 1),
|
|
848
|
+
i("div", {
|
|
847
849
|
class: "c-link",
|
|
848
850
|
onClick: h[2] || (h[2] = te(() => {
|
|
849
851
|
}, ["stop"]))
|
|
850
852
|
}, [
|
|
851
|
-
|
|
853
|
+
i("a", {
|
|
852
854
|
class: "signal-link",
|
|
853
855
|
href: f.value,
|
|
854
856
|
target: "_blank",
|
|
@@ -865,70 +867,70 @@ const ua = Symbol("pelican.apiBase"), ca = Symbol("pelican.catalogBase"), Ce = S
|
|
|
865
867
|
onClick: h[4] || (h[4] = te(() => {
|
|
866
868
|
}, ["stop"]))
|
|
867
869
|
}, [
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
h[5] || (h[5] =
|
|
872
|
-
|
|
870
|
+
i("div", Ta, [
|
|
871
|
+
i("div", Aa, [
|
|
872
|
+
i("div", Fa, [
|
|
873
|
+
h[5] || (h[5] = i("div", { class: "label" }, "Currency", -1)),
|
|
874
|
+
i("div", Na, b(e.s.Currency ?? "USD"), 1)
|
|
873
875
|
]),
|
|
874
|
-
|
|
875
|
-
h[6] || (h[6] =
|
|
876
|
-
|
|
876
|
+
i("div", La, [
|
|
877
|
+
h[6] || (h[6] = i("div", { class: "label" }, "Monthly profit", -1)),
|
|
878
|
+
i("div", Da, b(v(H)(e.s.MonthlyProfit, v(s))), 1)
|
|
877
879
|
]),
|
|
878
|
-
|
|
879
|
-
h[7] || (h[7] =
|
|
880
|
-
|
|
880
|
+
i("div", Ua, [
|
|
881
|
+
h[7] || (h[7] = i("div", { class: "label" }, "Yearly profit", -1)),
|
|
882
|
+
i("div", Va, b(v(H)(e.s.YearlyProfit, v(s))), 1)
|
|
881
883
|
]),
|
|
882
|
-
|
|
883
|
-
h[8] || (h[8] =
|
|
884
|
-
|
|
884
|
+
i("div", Ea, [
|
|
885
|
+
h[8] || (h[8] = i("div", { class: "label" }, "Balance", -1)),
|
|
886
|
+
i("div", Ba, b(v(H)(e.s.AccountBalance, v(s))), 1)
|
|
885
887
|
]),
|
|
886
|
-
|
|
887
|
-
h[9] || (h[9] =
|
|
888
|
-
|
|
888
|
+
i("div", Oa, [
|
|
889
|
+
h[9] || (h[9] = i("div", { class: "label" }, "Realized P/L", -1)),
|
|
890
|
+
i("div", Ka, b(v(H)(e.s.RealisedPnl, v(s))), 1)
|
|
889
891
|
]),
|
|
890
|
-
|
|
891
|
-
h[10] || (h[10] =
|
|
892
|
-
|
|
892
|
+
i("div", Ya, [
|
|
893
|
+
h[10] || (h[10] = i("div", { class: "label" }, "Unrealized P/L", -1)),
|
|
894
|
+
i("div", za, b(v(H)(e.s.UnrealisedPnl, v(s))), 1)
|
|
893
895
|
]),
|
|
894
|
-
|
|
895
|
-
h[11] || (h[11] =
|
|
896
|
-
|
|
896
|
+
i("div", Ga, [
|
|
897
|
+
h[11] || (h[11] = i("div", { class: "label" }, "Trades total", -1)),
|
|
898
|
+
i("div", Ha, b(v($e)(e.s.TradesTotal, v(s))), 1)
|
|
897
899
|
]),
|
|
898
|
-
|
|
899
|
-
h[12] || (h[12] =
|
|
900
|
-
|
|
900
|
+
i("div", ja, [
|
|
901
|
+
h[12] || (h[12] = i("div", { class: "label" }, "Win rate", -1)),
|
|
902
|
+
i("div", Wa, [
|
|
901
903
|
u.value >= 0 ? (p(), y("span", qa, b(u.value.toFixed(1)) + "% / " + b(m.value.toFixed(1)) + "%", 1)) : (p(), y("span", Xa, "—"))
|
|
902
904
|
])
|
|
903
905
|
])
|
|
904
906
|
]),
|
|
905
|
-
|
|
906
|
-
h[13] || (h[13] =
|
|
907
|
+
i("div", Za, [
|
|
908
|
+
h[13] || (h[13] = i("div", { class: "hd" }, "Markets", -1)),
|
|
907
909
|
P(ea, {
|
|
908
910
|
markets: e.s.Markets
|
|
909
911
|
}, null, 8, ["markets"])
|
|
910
912
|
])
|
|
911
913
|
]),
|
|
912
|
-
|
|
913
|
-
|
|
914
|
+
i("div", Ja, [
|
|
915
|
+
i("button", {
|
|
914
916
|
class: B(["pill", { on: d.value }]),
|
|
915
917
|
type: "button",
|
|
916
918
|
onClick: w
|
|
917
919
|
}, b(d.value ? "Hide" : "Open Trades"), 3),
|
|
918
|
-
|
|
920
|
+
i("button", {
|
|
919
921
|
class: B(["pill", { on: r.value }]),
|
|
920
922
|
type: "button",
|
|
921
923
|
onClick: I
|
|
922
924
|
}, b(r.value ? "Hide" : "Trade History"), 3)
|
|
923
925
|
]),
|
|
924
|
-
d.value ? (p(),
|
|
926
|
+
d.value ? (p(), re(Se, {
|
|
925
927
|
key: 0,
|
|
926
928
|
kind: "open",
|
|
927
929
|
trades: ((C = e.openTrades) == null ? void 0 : C.trades) ?? null,
|
|
928
930
|
loading: !!((V = e.openTrades) != null && V.loading),
|
|
929
931
|
locale: v(s)
|
|
930
932
|
}, null, 8, ["trades", "loading", "locale"])) : O("", !0),
|
|
931
|
-
r.value ? (p(),
|
|
933
|
+
r.value ? (p(), re(Se, {
|
|
932
934
|
key: 1,
|
|
933
935
|
kind: "closed",
|
|
934
936
|
trades: ((S = e.closedTrades) == null ? void 0 : S.trades) ?? null,
|
|
@@ -959,13 +961,13 @@ const ua = Symbol("pelican.apiBase"), ca = Symbol("pelican.catalogBase"), Ce = S
|
|
|
959
961
|
n("go", l);
|
|
960
962
|
}
|
|
961
963
|
function c(l) {
|
|
962
|
-
const
|
|
963
|
-
isNaN(
|
|
964
|
+
const o = parseInt(l.target.value, 10);
|
|
965
|
+
isNaN(o) || n("go", o);
|
|
964
966
|
}
|
|
965
|
-
return (l,
|
|
966
|
-
|
|
967
|
+
return (l, o) => a.totalPages > 1 ? (p(), y("nav", tn, [
|
|
968
|
+
i("button", {
|
|
967
969
|
disabled: e.page <= 1,
|
|
968
|
-
onClick:
|
|
970
|
+
onClick: o[0] || (o[0] = (u) => s("prev"))
|
|
969
971
|
}, "‹ prev", 8, an),
|
|
970
972
|
(p(!0), y(U, null, K(e.range, (u, m) => (p(), y(U, { key: m }, [
|
|
971
973
|
u === "…" ? (p(), y("span", nn, "…")) : (p(), y("button", {
|
|
@@ -974,13 +976,13 @@ const ua = Symbol("pelican.apiBase"), ca = Symbol("pelican.catalogBase"), Ce = S
|
|
|
974
976
|
onClick: (g) => s(u)
|
|
975
977
|
}, b(u), 11, ln))
|
|
976
978
|
], 64))), 128)),
|
|
977
|
-
|
|
979
|
+
i("button", {
|
|
978
980
|
disabled: e.page >= e.totalPages,
|
|
979
|
-
onClick:
|
|
981
|
+
onClick: o[1] || (o[1] = (u) => s("next"))
|
|
980
982
|
}, "next ›", 8, sn),
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
983
|
+
i("span", on, [
|
|
984
|
+
o[2] || (o[2] = D(" go to ", -1)),
|
|
985
|
+
i("input", {
|
|
984
986
|
type: "number",
|
|
985
987
|
min: 1,
|
|
986
988
|
max: e.totalPages,
|
|
@@ -1019,22 +1021,22 @@ const ua = Symbol("pelican.apiBase"), ca = Symbol("pelican.catalogBase"), Ce = S
|
|
|
1019
1021
|
function c(l) {
|
|
1020
1022
|
return a.sortKey === `${l}-asc` ? "active-asc" : a.sortKey === `${l}-desc` ? "active-desc" : "";
|
|
1021
1023
|
}
|
|
1022
|
-
return (l,
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
(p(), y(U, null, K(s, (u) =>
|
|
1024
|
+
return (l, o) => (p(), y("section", dn, [
|
|
1025
|
+
i("div", mn, [
|
|
1026
|
+
o[1] || (o[1] = i("div", null, "Name", -1)),
|
|
1027
|
+
o[2] || (o[2] = i("div", null, "Equity curve", -1)),
|
|
1028
|
+
(p(), y(U, null, K(s, (u) => i("div", {
|
|
1027
1029
|
key: u.key,
|
|
1028
1030
|
class: B(["c-num sortable", c(u.key)]),
|
|
1029
1031
|
onClick: (m) => n("toggle-sort", u.key)
|
|
1030
1032
|
}, b(u.label), 11, fn)), 64)),
|
|
1031
|
-
|
|
1033
|
+
o[3] || (o[3] = i("div", null, null, -1))
|
|
1032
1034
|
]),
|
|
1033
1035
|
e.pageItems.length === 0 ? (p(), y("div", vn, [
|
|
1034
1036
|
q(l.$slots, "empty", {}, () => [
|
|
1035
|
-
|
|
1037
|
+
o[4] || (o[4] = D("No matches.", -1))
|
|
1036
1038
|
], !0)
|
|
1037
|
-
])) : (p(!0), y(U, { key: 1 }, K(e.pageItems, (u) => (p(),
|
|
1039
|
+
])) : (p(!0), y(U, { key: 1 }, K(e.pageItems, (u) => (p(), re(en, {
|
|
1038
1040
|
key: u.Id,
|
|
1039
1041
|
s: u,
|
|
1040
1042
|
expanded: e.expanded.has(u.Id),
|
|
@@ -1044,8 +1046,8 @@ const ua = Symbol("pelican.apiBase"), ca = Symbol("pelican.catalogBase"), Ce = S
|
|
|
1044
1046
|
onLoadTrades: (m) => n("load-trades", { id: u.Id, kind: m }),
|
|
1045
1047
|
onSelect: (m) => n("select", u)
|
|
1046
1048
|
}, {
|
|
1047
|
-
"row-actions":
|
|
1048
|
-
q(l.$slots, "row-actions",
|
|
1049
|
+
"row-actions": ue((m) => [
|
|
1050
|
+
q(l.$slots, "row-actions", Ve({ ref_for: !0 }, m), void 0, !0)
|
|
1049
1051
|
]),
|
|
1050
1052
|
_: 3
|
|
1051
1053
|
}, 8, ["s", "expanded", "open-trades", "closed-trades", "onToggle", "onLoadTrades", "onSelect"]))), 128)),
|
|
@@ -1053,7 +1055,7 @@ const ua = Symbol("pelican.apiBase"), ca = Symbol("pelican.catalogBase"), Ce = S
|
|
|
1053
1055
|
page: e.page,
|
|
1054
1056
|
"total-pages": e.totalPages,
|
|
1055
1057
|
range: e.pageRange,
|
|
1056
|
-
onGo:
|
|
1058
|
+
onGo: o[0] || (o[0] = (u) => n("go", u))
|
|
1057
1059
|
}, null, 8, ["page", "total-pages", "range"])
|
|
1058
1060
|
]));
|
|
1059
1061
|
}
|
|
@@ -1072,21 +1074,21 @@ const ua = Symbol("pelican.apiBase"), ca = Symbol("pelican.catalogBase"), Ce = S
|
|
|
1072
1074
|
() => t.total > 0 ? Math.min(100, t.loaded / t.total * 100) : 0
|
|
1073
1075
|
);
|
|
1074
1076
|
return (n, s) => e.active ? (p(), y("div", hn, [
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
style:
|
|
1077
|
+
i("div", yn, [
|
|
1078
|
+
i("span", {
|
|
1079
|
+
style: ie({ width: a.value.toFixed(1) + "%" })
|
|
1078
1080
|
}, null, 4)
|
|
1079
1081
|
]),
|
|
1080
|
-
|
|
1082
|
+
i("div", Mn, [
|
|
1081
1083
|
s[0] || (s[0] = D(" Building full catalog: ", -1)),
|
|
1082
|
-
|
|
1084
|
+
i("b", null, b(e.loaded.toLocaleString("en-US")), 1),
|
|
1083
1085
|
D(" / " + b(e.total.toLocaleString("en-US")) + " strategies (" + b(a.value.toFixed(0)) + "%) · ", 1),
|
|
1084
|
-
s[1] || (s[1] =
|
|
1086
|
+
s[1] || (s[1] = i("i", null, "upstream rate-limited", -1))
|
|
1085
1087
|
]),
|
|
1086
|
-
|
|
1088
|
+
i("div", bn, " All " + b(e.total.toLocaleString("en-US")) + " strategies are visible. Stats fill in as the build progresses; refresh of data every 20 sec. ", 1)
|
|
1087
1089
|
])) : O("", !0);
|
|
1088
1090
|
}
|
|
1089
|
-
}), wn = /* @__PURE__ */ N(xn, [["__scopeId", "data-v-8767a909"]]),
|
|
1091
|
+
}), wn = /* @__PURE__ */ N(xn, [["__scopeId", "data-v-8767a909"]]), Ae = "pelican-theme";
|
|
1090
1092
|
function $n(e = "auto") {
|
|
1091
1093
|
const t = kn(), a = R(t ?? e), n = R("dark"), s = typeof window < "u" && window.matchMedia ? window.matchMedia("(prefers-color-scheme: dark)") : null, c = () => {
|
|
1092
1094
|
const m = a.value;
|
|
@@ -1096,24 +1098,24 @@ function $n(e = "auto") {
|
|
|
1096
1098
|
};
|
|
1097
1099
|
s && (s.addEventListener ? s.addEventListener("change", l) : s.addListener(l)), E(a, (m) => {
|
|
1098
1100
|
try {
|
|
1099
|
-
localStorage.setItem(
|
|
1101
|
+
localStorage.setItem(Ae, m);
|
|
1100
1102
|
} catch {
|
|
1101
1103
|
}
|
|
1102
1104
|
c();
|
|
1103
|
-
}), c(),
|
|
1105
|
+
}), c(), me(() => {
|
|
1104
1106
|
s && (s.removeEventListener ? s.removeEventListener("change", l) : s.removeListener(l));
|
|
1105
1107
|
});
|
|
1106
|
-
function
|
|
1108
|
+
function o(m) {
|
|
1107
1109
|
a.value = m;
|
|
1108
1110
|
}
|
|
1109
1111
|
function u() {
|
|
1110
1112
|
a.value = a.value === "dark" ? "light" : a.value === "light" ? "auto" : "dark";
|
|
1111
1113
|
}
|
|
1112
|
-
return { mode: a, resolved: n, setMode:
|
|
1114
|
+
return { mode: a, resolved: n, setMode: o, cycle: u };
|
|
1113
1115
|
}
|
|
1114
1116
|
function kn() {
|
|
1115
1117
|
try {
|
|
1116
|
-
const e = localStorage.getItem(
|
|
1118
|
+
const e = localStorage.getItem(Ae);
|
|
1117
1119
|
return e === "dark" || e === "light" || e === "auto" ? e : null;
|
|
1118
1120
|
} catch {
|
|
1119
1121
|
return null;
|
|
@@ -1145,7 +1147,7 @@ function J(e, t) {
|
|
|
1145
1147
|
return a + n;
|
|
1146
1148
|
}
|
|
1147
1149
|
function In({ apiBase: e, catalogBase: t, onError: a }) {
|
|
1148
|
-
const n = Ee(/* @__PURE__ */ new Map()), s = R(!1), c = R(!1), l = R(0),
|
|
1150
|
+
const n = Ee(/* @__PURE__ */ new Map()), s = R(!1), c = R(!1), l = R(0), o = R(0), u = R(null), m = k(() => Array.from(n.value.values()));
|
|
1149
1151
|
let g = !1;
|
|
1150
1152
|
const f = (M) => {
|
|
1151
1153
|
a ? a(M) : console.warn("[pelican-vue]", M);
|
|
@@ -1156,9 +1158,9 @@ function In({ apiBase: e, catalogBase: t, onError: a }) {
|
|
|
1156
1158
|
async function w(M) {
|
|
1157
1159
|
try {
|
|
1158
1160
|
const Y = await oe(M ? "/api/strategies-full?partial=1" : "/api/strategies-full", r());
|
|
1159
|
-
|
|
1160
|
-
const
|
|
1161
|
-
for (const L of Y)
|
|
1161
|
+
o.value = Y.length;
|
|
1162
|
+
const z = n.value;
|
|
1163
|
+
for (const L of Y) z.set(L.Id, { ...z.get(L.Id), ...L });
|
|
1162
1164
|
ae(n);
|
|
1163
1165
|
} catch (T) {
|
|
1164
1166
|
f(T);
|
|
@@ -1167,7 +1169,7 @@ function In({ apiBase: e, catalogBase: t, onError: a }) {
|
|
|
1167
1169
|
async function I() {
|
|
1168
1170
|
try {
|
|
1169
1171
|
const M = await oe("/api/strategies-full/progress", r());
|
|
1170
|
-
return l.value = M.loaded,
|
|
1172
|
+
return l.value = M.loaded, o.value = M.total || o.value, c.value = M.building, u.value = M.built_at, M;
|
|
1171
1173
|
} catch (M) {
|
|
1172
1174
|
return f(M), null;
|
|
1173
1175
|
}
|
|
@@ -1182,11 +1184,11 @@ function In({ apiBase: e, catalogBase: t, onError: a }) {
|
|
|
1182
1184
|
for (; !g; ) {
|
|
1183
1185
|
const T = await I();
|
|
1184
1186
|
if (!T) {
|
|
1185
|
-
await
|
|
1187
|
+
await Pe(1500);
|
|
1186
1188
|
continue;
|
|
1187
1189
|
}
|
|
1188
1190
|
if (T.ready) break;
|
|
1189
|
-
Date.now() - M > je && (await w(!0), M = Date.now()), await
|
|
1191
|
+
Date.now() - M > je && (await w(!0), M = Date.now()), await Pe(He);
|
|
1190
1192
|
}
|
|
1191
1193
|
g || (await w(!1), s.value = !0);
|
|
1192
1194
|
}
|
|
@@ -1197,11 +1199,11 @@ function In({ apiBase: e, catalogBase: t, onError: a }) {
|
|
|
1197
1199
|
if (!(T != null && T._enrichAttempted && T._meta && T._stats)) {
|
|
1198
1200
|
h.add(M);
|
|
1199
1201
|
try {
|
|
1200
|
-
const [Y,
|
|
1201
|
-
|
|
1202
|
-
|
|
1202
|
+
const [Y, z] = await Promise.all([
|
|
1203
|
+
Re(J(e.value, `/api/strategies/${M}`)),
|
|
1204
|
+
Re(J(e.value, `/api/strategies/${M}/stats`))
|
|
1203
1205
|
]), L = n.value, A = L.get(M) ?? { Id: M };
|
|
1204
|
-
_n(A, Y), Sn(A,
|
|
1206
|
+
_n(A, Y), Sn(A, z), A._enrichAttempted = !0, A.IsEnabled === !1 ? L.delete(M) : L.set(M, A), ae(n);
|
|
1205
1207
|
} finally {
|
|
1206
1208
|
h.delete(M);
|
|
1207
1209
|
}
|
|
@@ -1213,12 +1215,12 @@ function In({ apiBase: e, catalogBase: t, onError: a }) {
|
|
|
1213
1215
|
const T = await oe(
|
|
1214
1216
|
`/api/strategies?filter=${encodeURIComponent(M)}`,
|
|
1215
1217
|
e.value
|
|
1216
|
-
), Y = n.value,
|
|
1218
|
+
), Y = n.value, z = [];
|
|
1217
1219
|
let L = 0;
|
|
1218
1220
|
for (const A of T)
|
|
1219
|
-
Y.has(A.Id) || (Y.set(A.Id, { ...A, _stats: !1, _meta: !1 }),
|
|
1220
|
-
L && (
|
|
1221
|
-
for (const A of
|
|
1221
|
+
Y.has(A.Id) || (Y.set(A.Id, { ...A, _stats: !1, _meta: !1 }), z.push(A.Id), L++);
|
|
1222
|
+
L && (o.value += L, ae(n));
|
|
1223
|
+
for (const A of z) C(A);
|
|
1222
1224
|
} catch (T) {
|
|
1223
1225
|
f(T);
|
|
1224
1226
|
}
|
|
@@ -1230,14 +1232,14 @@ function In({ apiBase: e, catalogBase: t, onError: a }) {
|
|
|
1230
1232
|
g = !0;
|
|
1231
1233
|
}
|
|
1232
1234
|
async function $() {
|
|
1233
|
-
x(), n.value = /* @__PURE__ */ new Map(), s.value = !1, l.value = 0,
|
|
1235
|
+
x(), n.value = /* @__PURE__ */ new Map(), s.value = !1, l.value = 0, o.value = 0, u.value = null, S();
|
|
1234
1236
|
}
|
|
1235
|
-
return
|
|
1237
|
+
return me(x), {
|
|
1236
1238
|
catalog: m,
|
|
1237
1239
|
ready: s,
|
|
1238
1240
|
building: c,
|
|
1239
1241
|
loaded: l,
|
|
1240
|
-
total:
|
|
1242
|
+
total: o,
|
|
1241
1243
|
builtAt: u,
|
|
1242
1244
|
enrichOne: C,
|
|
1243
1245
|
searchExtra: V,
|
|
@@ -1246,7 +1248,7 @@ function In({ apiBase: e, catalogBase: t, onError: a }) {
|
|
|
1246
1248
|
stop: x
|
|
1247
1249
|
};
|
|
1248
1250
|
}
|
|
1249
|
-
async function
|
|
1251
|
+
async function Re(e) {
|
|
1250
1252
|
try {
|
|
1251
1253
|
const t = await fetch(e);
|
|
1252
1254
|
return t.ok ? await t.json() : null;
|
|
@@ -1258,15 +1260,15 @@ function _n(e, t) {
|
|
|
1258
1260
|
t && (e.Name = t.Name ?? e.Name, e.NumCopiers = t.NumCopiers ?? null, e.Fee = t.Fee ?? null, e.RiskProfile = t.RiskProfile ?? null, e.IsSimulated = t.IsSimulated ?? !1, t.IsEnabled !== void 0 && (e.IsEnabled = t.IsEnabled), t.ImageUploaded !== void 0 && (e.ImageUploaded = t.ImageUploaded), e.Profile = t.Profile ?? e.Profile, e._meta = !0);
|
|
1259
1261
|
}
|
|
1260
1262
|
function Sn(e, t) {
|
|
1261
|
-
var
|
|
1263
|
+
var o, u, m, g, f, d;
|
|
1262
1264
|
if (!t) return;
|
|
1263
|
-
const a = ((
|
|
1265
|
+
const a = ((o = t.Profitability) == null ? void 0 : o.Inception) ?? {}, n = ((u = t.Trades) == null ? void 0 : u.Inception) ?? {}, s = a.History ?? [], c = s.length > 60 ? Math.ceil(s.length / 60) : 1, l = s.filter((r, w) => w % c === 0 || w === s.length - 1).map((r) => ({ Timestamp: r.Timestamp, AccountReturn: r.AccountReturn }));
|
|
1264
1266
|
e.Inception = t.Inception ?? e.Inception, e.Currency = t.CurrencyCode || "USD", e.Return = a.UnrealisedReturn != null ? a.UnrealisedReturn * 100 : a.RealisedReturn != null ? a.RealisedReturn * 100 : null, e.MaxDD = a.MaxDrawdown != null ? a.MaxDrawdown * 100 : null, e.RealisedPnl = a.RealisedPnl ?? null, e.UnrealisedPnl = a.UnrealisedPnl ?? null, e.History = l, e.TradesTotal = n.Total ?? 0, e.Wins = n.Wins ?? 0, e.Losses = n.Losses ?? 0, e.Markets = Array.isArray(n.Markets) ? n.Markets.slice(0, 12).map((r) => ({ n: r.MarketName, c: r.Count })) : [], e.AccountBalance = ((m = t.Status) == null ? void 0 : m.Balance) ?? null, e.CopiersAUM = ((g = t.CopiersBalance) == null ? void 0 : g.Balance) ?? null, e.MonthlyProfit = ((f = t.CopiersProfit) == null ? void 0 : f.Month) ?? null, e.YearlyProfit = ((d = t.CopiersProfit) == null ? void 0 : d.Year) ?? null, e._stats = !0;
|
|
1265
1267
|
}
|
|
1266
|
-
function
|
|
1268
|
+
function Pe(e) {
|
|
1267
1269
|
return new Promise((t) => setTimeout(t, e));
|
|
1268
1270
|
}
|
|
1269
|
-
function
|
|
1271
|
+
function de() {
|
|
1270
1272
|
return {
|
|
1271
1273
|
risk: /* @__PURE__ */ new Set(),
|
|
1272
1274
|
retMin: null,
|
|
@@ -1284,13 +1286,13 @@ function ce() {
|
|
|
1284
1286
|
};
|
|
1285
1287
|
}
|
|
1286
1288
|
function Rn(e, t = {}) {
|
|
1287
|
-
const a =
|
|
1289
|
+
const a = de(), n = Ce({
|
|
1288
1290
|
...a,
|
|
1289
1291
|
...t,
|
|
1290
1292
|
risk: new Set(t.risk ?? a.risk)
|
|
1291
1293
|
}), s = k(() => e.value.filter((l) => Pn(l, n)));
|
|
1292
1294
|
function c() {
|
|
1293
|
-
const l =
|
|
1295
|
+
const l = de();
|
|
1294
1296
|
n.risk = l.risk, n.retMin = null, n.retMax = null, n.ddMax = null, n.aumMin = null, n.copiersMin = null, n.ageMin = null, n.tradesMin = null, n.winrateMin = null, n.feeMax = null, n.balanceMin = null, n.balanceMax = null, n.search = "";
|
|
1295
1297
|
}
|
|
1296
1298
|
return { filters: n, filtered: s, reset: c };
|
|
@@ -1336,8 +1338,8 @@ function Tn(e, t = "return-desc") {
|
|
|
1336
1338
|
return e.value.slice().sort(c);
|
|
1337
1339
|
});
|
|
1338
1340
|
function s(c) {
|
|
1339
|
-
const [l,
|
|
1340
|
-
a.value = a.value === l ?
|
|
1341
|
+
const [l, o] = Ze[c];
|
|
1342
|
+
a.value = a.value === l ? o : l;
|
|
1341
1343
|
}
|
|
1342
1344
|
return {
|
|
1343
1345
|
sortKey: a,
|
|
@@ -1357,9 +1359,9 @@ function An(e, t) {
|
|
|
1357
1359
|
const l = (a.value - 1) * t;
|
|
1358
1360
|
return e.value.slice(l, l + t);
|
|
1359
1361
|
}), c = k(() => {
|
|
1360
|
-
const l = a.value,
|
|
1361
|
-
if (
|
|
1362
|
-
const m = [.../* @__PURE__ */ new Set([1,
|
|
1362
|
+
const l = a.value, o = n.value;
|
|
1363
|
+
if (o <= 1) return [];
|
|
1364
|
+
const m = [.../* @__PURE__ */ new Set([1, o, l, l - 1, l + 1, l - 2, l + 2, 2, o - 1])].filter((f) => f >= 1 && f <= o).sort((f, d) => f - d), g = [];
|
|
1363
1365
|
for (let f = 0; f < m.length; f++)
|
|
1364
1366
|
f && m[f] - m[f - 1] > 1 && g.push("…"), g.push(m[f]);
|
|
1365
1367
|
return g;
|
|
@@ -1386,10 +1388,10 @@ function Fn(e) {
|
|
|
1386
1388
|
return (l === "open" ? t.value : a.value).get(c) ?? null;
|
|
1387
1389
|
}
|
|
1388
1390
|
async function s(c, l) {
|
|
1389
|
-
const
|
|
1391
|
+
const o = l === "open" ? t : a, u = o.value.get(c);
|
|
1390
1392
|
if (u && (u.loading || u.trades !== null)) return;
|
|
1391
|
-
const m = new Map(
|
|
1392
|
-
m.set(c, { loading: !0, trades: null, error: null }),
|
|
1393
|
+
const m = new Map(o.value);
|
|
1394
|
+
m.set(c, { loading: !0, trades: null, error: null }), o.value = m;
|
|
1393
1395
|
let g = "";
|
|
1394
1396
|
if (l === "closed") {
|
|
1395
1397
|
const I = /* @__PURE__ */ new Date(), _ = new Date(Date.now() - We * 864e5), h = (C) => C.toISOString().replace(/\.\d+Z$/, "Z");
|
|
@@ -1404,8 +1406,8 @@ function Fn(e) {
|
|
|
1404
1406
|
} catch (I) {
|
|
1405
1407
|
r = I.code ? I : Z("fetch_failed", I.message), d = [];
|
|
1406
1408
|
}
|
|
1407
|
-
const w = new Map(
|
|
1408
|
-
w.set(c, { loading: !1, trades: d, error: r }),
|
|
1409
|
+
const w = new Map(o.value);
|
|
1410
|
+
w.set(c, { loading: !1, trades: d, error: r }), o.value = w;
|
|
1409
1411
|
}
|
|
1410
1412
|
return { open: t, closed: a, load: s, get: n };
|
|
1411
1413
|
}
|
|
@@ -1419,26 +1421,26 @@ const Nn = ["data-theme"], Ln = { class: "brand-row" }, Dn = ["title"], Un = { "
|
|
|
1419
1421
|
defaultFilters: {},
|
|
1420
1422
|
columns: {},
|
|
1421
1423
|
locale: { default: "en-US" },
|
|
1422
|
-
pageSize: { default:
|
|
1424
|
+
pageSize: { default: ze }
|
|
1423
1425
|
},
|
|
1424
1426
|
emits: ["update:theme", "select-strategy", "error"],
|
|
1425
1427
|
setup(e, { emit: t }) {
|
|
1426
1428
|
const a = e, n = t;
|
|
1427
|
-
ne(ua, a.apiBase), ne(ca, a.catalogBase ?? a.apiBase), ne(
|
|
1428
|
-
const s =
|
|
1429
|
+
ne(ua, a.apiBase), ne(ca, a.catalogBase ?? a.apiBase), ne(Te, a.locale);
|
|
1430
|
+
const s = Me(a, "apiBase"), c = Me(a, "catalogBase"), l = $n(a.theme);
|
|
1429
1431
|
E(l.mode, (x) => n("update:theme", x)), E(
|
|
1430
1432
|
() => a.theme,
|
|
1431
1433
|
(x) => l.setMode(x)
|
|
1432
1434
|
);
|
|
1433
|
-
const
|
|
1435
|
+
const o = In({
|
|
1434
1436
|
apiBase: s,
|
|
1435
1437
|
catalogBase: c,
|
|
1436
1438
|
onError: (x) => n("error", x)
|
|
1437
|
-
}), u = Rn(
|
|
1439
|
+
}), u = Rn(o.catalog, a.defaultFilters ?? {}), m = Tn(u.filtered, a.defaultSort), g = An(m.sorted, a.pageSize), f = Fn(s), d = Ce(/* @__PURE__ */ new Set()), r = R(!1), w = R(null);
|
|
1438
1440
|
function I(x) {
|
|
1439
1441
|
d.has(x) ? d.delete(x) : d.add(x);
|
|
1440
|
-
const $ =
|
|
1441
|
-
$ && ((!$._meta || !$._stats) && !$._enrichAttempted &&
|
|
1442
|
+
const $ = o.catalog.value.find((M) => M.Id === x);
|
|
1443
|
+
$ && ((!$._meta || !$._stats) && !$._enrichAttempted && o.enrichOne(x), n("select-strategy", $));
|
|
1442
1444
|
}
|
|
1443
1445
|
function _(x) {
|
|
1444
1446
|
m.toggleColumn(x), g.setPage(1);
|
|
@@ -1447,7 +1449,7 @@ const Nn = ["data-theme"], Ln = { class: "brand-row" }, Dn = ["title"], Un = { "
|
|
|
1447
1449
|
Object.assign(u.filters, x), g.setPage(1);
|
|
1448
1450
|
}
|
|
1449
1451
|
function C() {
|
|
1450
|
-
const x =
|
|
1452
|
+
const x = de();
|
|
1451
1453
|
Object.assign(u.filters, x), u.filters.risk = x.risk, w.value = null, g.setPage(1);
|
|
1452
1454
|
}
|
|
1453
1455
|
function V({ id: x, kind: $ }) {
|
|
@@ -1456,42 +1458,42 @@ const Nn = ["data-theme"], Ln = { class: "brand-row" }, Dn = ["title"], Un = { "
|
|
|
1456
1458
|
function S(x) {
|
|
1457
1459
|
x === "prev" ? g.prev() : x === "next" ? g.next() : g.setPage(x);
|
|
1458
1460
|
}
|
|
1459
|
-
return Be(() =>
|
|
1461
|
+
return Be(() => o.start()), (x, $) => (p(), y("div", {
|
|
1460
1462
|
class: "pelican-libsoc",
|
|
1461
1463
|
"data-theme": v(l).resolved.value
|
|
1462
1464
|
}, [
|
|
1463
|
-
|
|
1465
|
+
i("header", Ln, [
|
|
1464
1466
|
q(x.$slots, "brand", {}, () => [
|
|
1465
|
-
$[6] || ($[6] =
|
|
1467
|
+
$[6] || ($[6] = i("div", { class: "default-brand" }, "Libertex Social — Copy Trading", -1))
|
|
1466
1468
|
], !0),
|
|
1467
|
-
|
|
1469
|
+
i("button", {
|
|
1468
1470
|
class: "theme-toggle",
|
|
1469
1471
|
type: "button",
|
|
1470
1472
|
title: v(l).mode.value,
|
|
1471
1473
|
onClick: $[0] || ($[0] = //@ts-ignore
|
|
1472
1474
|
(...M) => v(l).cycle && v(l).cycle(...M))
|
|
1473
1475
|
}, [
|
|
1474
|
-
|
|
1476
|
+
i("span", Un, b(v(l).resolved.value === "dark" ? "🌙" : "☀️"), 1)
|
|
1475
1477
|
], 8, Dn)
|
|
1476
1478
|
]),
|
|
1477
1479
|
P(st, {
|
|
1478
1480
|
search: v(u).filters.search,
|
|
1479
1481
|
"sort-key": v(m).sortKey.value,
|
|
1480
|
-
total: v(
|
|
1482
|
+
total: v(o).total.value,
|
|
1481
1483
|
"filtered-total": v(u).filtered.value.length,
|
|
1482
1484
|
page: v(g).page.value,
|
|
1483
1485
|
"total-pages": v(g).totalPages.value,
|
|
1484
1486
|
"onUpdate:search": $[1] || ($[1] = (M) => h({ search: M })),
|
|
1485
1487
|
"onUpdate:sortKey": $[2] || ($[2] = (M) => v(m).setKey(M)),
|
|
1486
|
-
onRefresh: v(
|
|
1488
|
+
onRefresh: v(o).refresh,
|
|
1487
1489
|
onToggleFilters: $[3] || ($[3] = (M) => r.value = !r.value)
|
|
1488
1490
|
}, null, 8, ["search", "sort-key", "total", "filtered-total", "page", "total-pages", "onRefresh"]),
|
|
1489
1491
|
P(wn, {
|
|
1490
|
-
loaded: v(
|
|
1491
|
-
total: v(
|
|
1492
|
-
active: v(
|
|
1492
|
+
loaded: v(o).loaded.value,
|
|
1493
|
+
total: v(o).total.value,
|
|
1494
|
+
active: v(o).building.value && !v(o).ready.value
|
|
1493
1495
|
}, null, 8, ["loaded", "total", "active"]),
|
|
1494
|
-
|
|
1496
|
+
i("main", Vn, [
|
|
1495
1497
|
P(Ut, {
|
|
1496
1498
|
filters: v(u).filters,
|
|
1497
1499
|
"invest-amount": w.value,
|
|
@@ -1515,12 +1517,12 @@ const Nn = ["data-theme"], Ln = { class: "brand-row" }, Dn = ["title"], Un = { "
|
|
|
1515
1517
|
onSelect: $[5] || ($[5] = (M) => n("select-strategy", M)),
|
|
1516
1518
|
onGo: S
|
|
1517
1519
|
}, {
|
|
1518
|
-
empty:
|
|
1520
|
+
empty: ue(() => [
|
|
1519
1521
|
q(x.$slots, "empty", {}, () => [
|
|
1520
1522
|
$[7] || ($[7] = D("No matches.", -1))
|
|
1521
1523
|
], !0)
|
|
1522
1524
|
]),
|
|
1523
|
-
"row-actions":
|
|
1525
|
+
"row-actions": ue((M) => [
|
|
1524
1526
|
q(x.$slots, "row-actions", Oe(Ke(M)), void 0, !0)
|
|
1525
1527
|
]),
|
|
1526
1528
|
_: 3
|
|
@@ -1534,6 +1536,6 @@ export {
|
|
|
1534
1536
|
qe as SORT_KEYS,
|
|
1535
1537
|
Xe as SORT_LABELS,
|
|
1536
1538
|
Ze as SORT_TOGGLE,
|
|
1537
|
-
|
|
1539
|
+
de as defaultFilters
|
|
1538
1540
|
};
|
|
1539
1541
|
//# sourceMappingURL=pelican-libertex-social.mjs.map
|