SPB Git

spb/hfmarketdata

Public

Open high-frequency market data platform — FirstRate full-history downloader, DuckDB/Parquet lake, open REST API and React docs platform (www.hfmarketdata.io)

web: charts — vignettes générées par notre moteur (scripts/charts-thumbs.mjs + harnais dev/charts-thumbs.html) : 408 PNG, 102 sujets × sombre/clair × 480×270 et 960×540 @2x, série synthétique dessinée avec pivots, manifeste index.json, npm run charts:thumbs

Simon-Pierre Boucher committed (Sep 7, 2026) parent fd35f89 Browse files

413 changed files +3,019 −1

413 changed files
Unified Split
added hfmarketdata/web/dev/charts-thumbs.html +19 −0
@@ -0,0 +1,19 @@
1+<!doctype html>
2+<html lang="en">
3+<head>
4+ <meta charset="utf-8" />
5+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6+ <title>hfmarketdata · chart thumbnails harness</title>
7+ <style>
8+ :root { --bg: #10131a; }
9+ [data-theme="light"] { --bg: #ffffff; }
10+ html, body { margin: 0; background: var(--bg); }
11+ body { padding: 8px; }
12+ #chart { position: relative; width: 480px; height: 270px; overflow: hidden; }
13+ </style>
14+</head>
15+<body>
16+ <div id="chart"></div>
17+ <script type="module" src="./charts-thumbs.js"></script>
18+</body>
19+</html>
added hfmarketdata/web/dev/charts-thumbs.js +204 −0
@@ -0,0 +1,204 @@
1+// Thumbnail harness for scripts/charts-thumbs.mjs: renders ONE indicator or ONE drawing tool with OUR engine on a
2+// deterministic, designed daily series (base → inverse head & shoulders → breakout → pullback → new highs), so every
3+// thumbnail shows the same market and the drawings land on meaningful pivots. Exposes
4+// `window.__thumb.render({ kind, id, theme, w, h, params })` → Promise<{ ok, error }>.
5+//
6+// URL params (manual use): ?kind=indicator&id=rsi&theme=dark&w=480&h=270
7+
8+import { createChart, darkTheme, lightTheme, listIndicators } from '../src/charts/engine/index.js'
9+
10+/* ───────────── designed synthetic series ───────────── */
11+
12+function mulberry32(seed) {
13+ let a = seed >>> 0
14+ return () => { a = (a + 0x6D2B79F5) >>> 0; let t = a; t = Math.imul(t ^ (t >>> 15), t | 1); t ^= t + Math.imul(t ^ (t >>> 7), t | 61); return ((t ^ (t >>> 14)) >>> 0) / 4294967296 }
15+}
16+function gauss(rnd) { let u = 0, v = 0; while (u === 0) u = rnd(); while (v === 0) v = rnd(); return Math.sqrt(-2 * Math.log(u)) * Math.cos(2 * Math.PI * v) }
17+const r2 = v => Math.round(v * 100) / 100
18+
19+const N = 400
20+// Spine: [index relative to the end (−1 = last bar), price]. Linear interpolation of log-price between knots.
21+const SPINE = [
22+ [-400, 104], [-330, 110], [-290, 103], [-260, 98], [-225, 103.5], [-200, 101], [-170, 105], [-150, 99], [-130, 100.5],
23+ [-112, 96], [-105, 92.5], [-97, 95], [-88, 90.5], [-78, 95.5], [-70, 92.8], // base: inverse head & shoulders
24+ [-60, 100], [-50, 97.5], [-30, 106], [-22, 102], [-12, 108.5], // breakout · pullback · new highs
25+ [-7, 106], [-4, 107.3], [-1, 105.2], // small ABC at the end
26+]
27+function spineAt(rel) {
28+ for (let k = 1; k < SPINE.length; k++) {
29+ const [i0, p0] = SPINE[k - 1], [i1, p1] = SPINE[k]
30+ if (rel <= i1) { const u = (rel - i0) / (i1 - i0); return Math.exp(Math.log(p0) + u * (Math.log(p1) - Math.log(p0))) }
31+ }
32+ return SPINE[SPINE.length - 1][1]
33+}
34+
35+export function makeThumbBars() {
36+ const rnd = mulberry32(2024)
37+ const dayMs = 86_400_000
38+ const end = Date.UTC(2024, 11, 31)
39+ const isWeekend = ts => { const d = new Date(ts).getUTCDay(); return d === 0 || d === 6 }
40+ // collect N weekdays ending on `end`
41+ const days = []
42+ for (let d = end; days.length < N; d -= dayMs) if (!isWeekend(d)) days.unshift(d)
43+ const bars = []
44+ let eps = 0, prevClose = null
45+ for (let k = 0; k < N; k++) {
46+ const rel = k - N
47+ const spine = spineAt(rel)
48+ eps = 0.55 * eps + gauss(rnd) * 0.0045
49+ const c = spine * Math.exp(eps)
50+ const o = prevClose == null ? c * Math.exp(gauss(rnd) * 0.002) : prevClose * Math.exp(gauss(rnd) * 0.0025)
51+ let hi = Math.max(o, c), lo = Math.min(o, c)
52+ const s = 0.0035 + 0.004 * Math.abs(gauss(rnd))
53+ for (let m = 0; m < 3; m++) { const p = Math.exp(Math.log(lo + (hi - lo) * rnd()) + gauss(rnd) * s); hi = Math.max(hi, p); lo = Math.min(lo, p) }
54+ const ret = Math.abs(Math.log(c / (prevClose || o)))
55+ const v = Math.round(3.2e6 * (0.7 + 0.6 * Math.abs(gauss(rnd))) * (1 + 55 * ret) * (rel >= -61 && rel <= -58 ? 1.8 : 1))
56+ bars.push({ t: days[k], o: r2(o), h: r2(hi), l: r2(lo), c: r2(c), v })
57+ prevClose = c
58+ }
59+ return bars
60+}
61+
62+/* ───────────── pivots on the designed series ───────────── */
63+
64+/** index of the extreme (key 'h' max or 'l' min) within ±span bars around the designed relative index. */
65+function extremeIndex(bars, rel, key, span = 4) {
66+ const n = bars.length
67+ const c = n + rel
68+ let best = c
69+ for (let i = Math.max(0, c - span); i <= Math.min(n - 1, c + span); i++) {
70+ if (key === 'h' ? bars[i].h > bars[best].h : bars[i].l < bars[best].l) best = i
71+ }
72+ return best
73+}
74+
75+function pivots(bars) {
76+ const n = bars.length
77+ const P = (rel, key, span) => { const i = extremeIndex(bars, rel, key, span); return { t: bars[i].t, price: bars[i][key], i } }
78+ const at = rel => bars[Math.max(0, Math.min(n - 1, n + rel))]
79+ return {
80+ at,
81+ start: P(-112, 'h', 3), ls: P(-105, 'l', 3), neck1: P(-97, 'h', 3), head: P(-88, 'l', 3), neck2: P(-78, 'h', 3), rs: P(-70, 'l', 3),
82+ bo: P(-60, 'h', 3), // breakout high
83+ pb1: P(-50, 'l', 3), // first pullback low
84+ hi1: P(-30, 'h', 3), // swing high
85+ pb2: P(-22, 'l', 3), // second pullback low
86+ hi2: P(-12, 'h', 3), // new high
87+ a: P(-7, 'l', 2), b: P(-4, 'h', 2), c: P(-1, 'l', 1),
88+ baseHi: P(-97, 'h', 12), baseLo: P(-88, 'l', 14),
89+ }
90+}
91+
92+/* ───────────── drawings per tool (points on the pivots) ───────────── */
93+
94+export function drawingsFor(tool, bars) {
95+ const p = pivots(bars)
96+ const pt = (piv, key) => ({ t: piv.t, price: key ? piv[key] : piv.price })
97+ const tp = (rel, price) => ({ t: p.at(rel).t, price })
98+ const cl = rel => ({ t: p.at(rel).t, price: p.at(rel).c })
99+ const one = (type, points, extra = {}) => [{ id: `th-${type}`, type, points, ...extra }]
100+ switch (tool) {
101+ case 'trendline': return one('trendline', [pt(p.rs), pt(p.pb1)])
102+ case 'ray': return one('ray', [pt(p.pb1), pt(p.pb2)])
103+ case 'extended': return one('extended', [pt(p.neck1), pt(p.neck2)], { style: { dash: [4, 3] } })
104+ case 'hray': return one('hray', [pt(p.bo)])
105+ case 'hline': return one('hline', [pt(p.hi1)])
106+ case 'vline': return one('vline', [cl(-60)])
107+ case 'cross': return one('cross', [cl(-30)])
108+ case 'channel': return one('channel', [pt(p.rs), pt(p.pb2), pt(p.bo)], { style: { fill: 0.08 } })
109+ case 'regression': return one('regression', [cl(-72), cl(-12)])
110+ case 'pitchfork': return one('pitchfork', [pt(p.rs), pt(p.bo), pt(p.pb1)])
111+ case 'schiff': return one('schiff', [pt(p.rs), pt(p.bo), pt(p.pb1)])
112+ case 'mschiff': return one('mschiff', [pt(p.rs), pt(p.bo), pt(p.pb1)])
113+ case 'fib': return one('fib', [pt(p.rs), pt(p.hi1)], { style: { showLabels: true } })
114+ case 'fib-extension': return one('fib-extension', [pt(p.rs), pt(p.bo), pt(p.pb1)])
115+ case 'fib-timezones': return one('fib-timezones', [pt(p.rs), pt(p.bo)], { style: { showLabels: true } })
116+ case 'fib-fan': return one('fib-fan', [pt(p.rs), pt(p.hi1)])
117+ case 'fib-arcs': return one('fib-arcs', [pt(p.rs), pt(p.hi1)])
118+ case 'gann-fan': return one('gann-fan', [pt(p.rs), pt(p.bo)], { style: { color: '#c98500' } })
119+ case 'gann-box': return one('gann-box', [pt(p.pb1), pt(p.hi1)], { style: { color: '#c98500' } })
120+ case 'rect': return one('rect', [tp(-108, p.baseHi.price * 1.003), tp(-66, p.baseLo.price * 0.997)], { style: { fill: 0.12 }, text: 'Base' })
121+ case 'ellipse': return one('ellipse', [tp(-104, p.baseHi.price * 1.01), tp(-68, p.baseLo.price * 0.99)], { style: { color: '#199e70', fill: 0.1 } })
122+ case 'triangle': return one('triangle', [pt(p.bo), pt(p.pb1), pt(p.hi1)], { style: { color: '#9085e9', fill: 0.12 } })
123+ case 'path': return one('path', [cl(-60), cl(-50), cl(-30), cl(-22), cl(-12), cl(-7), cl(-4)], { style: { width: 2, color: '#d95926' } })
124+ case 'brush': {
125+ // a hand-drawn support arc hugging the lows (5-bar smoothed lows, slightly below)
126+ const pts = []
127+ for (let k = -46; k <= -14; k += 1) { let s = 0; for (let j = -2; j <= 2; j++) s += p.at(k + j).l; pts.push({ t: p.at(k).t, price: (s / 5) * (0.984 + 0.002 * Math.sin(k / 5)) }) }
128+ return one('brush', pts, { style: { width: 2, color: '#d55181' } })
129+ }
130+ case 'arrow': return one('arrow', [tp(-57, p.pb1.price * 0.965), tp(-51, p.pb1.price * 0.993)], { style: { width: 2 } })
131+ case 'arrow-up': return one('arrow-up', [pt(p.pb1)], { text: 'Buy' })
132+ case 'arrow-down': return one('arrow-down', [pt(p.hi2)], { text: 'Sell' })
133+ case 'text': return one('text', [tp(-60, p.bo.price * 1.02)], { text: 'Breakout' })
134+ case 'callout': return one('callout', [pt(p.hi1), tp(-58, p.hi1.price * 1.03)], { text: 'Swing high\n0.382 held' })
135+ case 'price-label': return one('price-label', [pt(p.pb2)])
136+ case 'flag': return one('flag', [pt(p.hi2)], { text: 'New high' })
137+ case 'measure': return one('measure', [pt(p.pb1), pt(p.hi1)])
138+ case 'price-range': return one('price-range', [pt(p.rs), pt(p.hi1)])
139+ case 'date-range': return one('date-range', [pt(p.rs), pt(p.bo)])
140+ case 'date-price-range': return one('date-price-range', [pt(p.pb1), pt(p.hi1)])
141+ case 'vrange': return one('vrange', [cl(-62), cl(-57)], { text: 'Earnings', style: { fill: 0.12 } })
142+ case 'long': { const e = p.at(-58).c; return one('long', [tp(-58, e), tp(-31, e * 1.06), tp(-31, e * 0.97)], { style: { qty: 100 } }) }
143+ case 'short': { const e = p.at(-29).c; return one('short', [tp(-29, e), tp(-15, e * 0.962), tp(-15, e * 1.015)], { style: { qty: 100 } }) }
144+ case 'elliott-impulse': return one('elliott-impulse', [pt(p.rs), pt(p.bo), pt(p.pb1), pt(p.hi1), pt(p.pb2), pt(p.hi2)], { style: { color: '#e66767' } })
145+ case 'elliott-correction': return one('elliott-correction', [pt(p.hi2), pt(p.a), pt(p.b), pt(p.c)], { style: { color: '#e66767' } })
146+ case 'xabcd': return one('xabcd', [pt(p.rs), pt(p.bo), pt(p.pb1), pt(p.hi1), pt(p.pb2)], { style: { color: '#d55181' } })
147+ case 'head-shoulders': return one('head-shoulders', [pt(p.start), pt(p.ls), pt(p.neck1), pt(p.head), pt(p.neck2), pt(p.rs), pt(p.bo)], { style: { color: '#c98500' } })
148+ default: return []
149+ }
150+}
151+
152+/** Visible window (bars) per tool — patterns on the base need the whole structure. */
153+const TOOL_BARS = { 'head-shoulders': 135, 'elliott-correction': 60, rect: 120, ellipse: 120, regression: 110, xabcd: 120, 'elliott-impulse': 120, 'fib-timezones': 130, 'fib-arcs': 120 }
154+
155+/* ───────────── render ───────────── */
156+
157+const bars = makeThumbBars()
158+const container = document.getElementById('chart')
159+let chart = null
160+
161+function indicatorParams(id, params) {
162+ if (id === 'avwap' && !params?.anchor) { const p = pivots(bars); return { ...(params || {}), anchor: p.rs.t } }
163+ return params
164+}
165+
166+export async function render({ kind = 'indicator', id, theme = 'dark', w = 480, h = 270, bars: visible, params, volume } = {}) {
167+ document.documentElement.dataset.theme = theme
168+ container.style.width = `${w}px`
169+ container.style.height = `${h}px`
170+ if (chart) { chart.destroy(); chart = null }
171+ chart = createChart(container, { theme: theme === 'light' ? lightTheme : darkTheme, timeframe: '1day', watermark: '', reducedMotion: true, rightOffsetBars: kind === 'tool' ? 6 : 3, barSpacing: 6 })
172+ window.__chart = chart
173+ chart.setData(bars)
174+ chart.setCrosshair({ mode: 'hidden' })
175+ let n = visible || 120
176+ let showVolume = !!volume
177+ if (kind === 'indicator') {
178+ const meta = listIndicators().find(x => x.id === id)
179+ if (!meta) return { ok: false, error: `unknown indicator ${id}` }
180+ if (id === 'ichimoku') n = Math.max(n, 150)
181+ chart.setVolume(showVolume)
182+ chart.addIndicator({ type: id, params: indicatorParams(id, params) })
183+ // Give an oscillator pane enough room to read its levels (the page default is a 28 % pane).
184+ for (const p of chart.panes) if (p.kind !== 'main') p.weight = 0.62
185+ chart.invalidate('layout')
186+ } else {
187+ n = TOOL_BARS[id] || n
188+ chart.setVolume(false)
189+ const list = drawingsFor(id, bars)
190+ if (!list.length) return { ok: false, error: `unknown tool ${id}` }
191+ chart.setDrawings(list)
192+ }
193+ const total = chart.getData().length
194+ chart.setVisibleRange({ fromIndex: total - n, toIndex: total - 1 }, false)
195+ await new Promise(r => requestAnimationFrame(() => requestAnimationFrame(r)))
196+ await new Promise(r => setTimeout(r, 40))
197+ return { ok: true }
198+}
199+
200+window.__thumb = { render, bars, pivots: () => pivots(bars), drawingsFor }
201+
202+// Manual use through the URL.
203+const q = new URLSearchParams(location.search)
204+if (q.get('id')) render({ kind: q.get('kind') || 'indicator', id: q.get('id'), theme: q.get('theme') || 'dark', w: Number(q.get('w')) || 480, h: Number(q.get('h')) || 270, volume: q.get('volume') === '1' })
modified hfmarketdata/web/package.json +3 −1
@@ -16,7 +16,9 @@
16 "test:e2e": "playwright test", 16 "test:e2e": "playwright test",
17 "test:e2e:ui": "playwright test --ui", 17 "test:e2e:ui": "playwright test --ui",
18 "test:charts": "node --test \"src/charts/**/*.test.js\"", 18 "test:charts": "node --test \"src/charts/**/*.test.js\"",
19− "charts:shots": "node scripts/charts-shots.mjs" 19+ "charts:shots": "node scripts/charts-shots.mjs",
20+ "charts:thumbs": "node scripts/charts-thumbs.mjs",
21+ "charts:docs": "node scripts/charts-docs.mjs"
20 }, 22 },
21 "dependencies": { 23 "dependencies": {
22 "@mdx-js/react": "^3.1.1", 24 "@mdx-js/react": "^3.1.1",
added hfmarketdata/web/public/charts/thumbs/index.json +2674 −0
@@ -0,0 +1,2674 @@
1+{
2+ "generated": "2026-09-07T06:16:11.920Z",
3+ "dpr": 2,
4+ "sizes": {
5+ "sm": [
6+ 480,
7+ 270
8+ ],
9+ "lg": [
10+ 960,
11+ 540
12+ ]
13+ },
14+ "themes": [
15+ "dark",
16+ "light"
17+ ],
18+ "indicators": {
19+ "vwap": {
20+ "dark": {
21+ "file": "indicator-vwap-dark.png",
22+ "width": 960,
23+ "height": 540,
24+ "bytes": 34983
25+ },
26+ "light": {
27+ "file": "indicator-vwap-light.png",
28+ "width": 960,
29+ "height": 540,
30+ "bytes": 34771
31+ },
32+ "dark-lg": {
33+ "file": "indicator-vwap-dark-lg.png",
34+ "width": 1920,
35+ "height": 1080,
36+ "bytes": 66866
37+ },
38+ "light-lg": {
39+ "file": "indicator-vwap-light-lg.png",
40+ "width": 1920,
41+ "height": 1080,
42+ "bytes": 66354
43+ }
44+ },
45+ "ad": {
46+ "dark-lg": {
47+ "file": "indicator-ad-dark-lg.png",
48+ "width": 1920,
49+ "height": 1080,
50+ "bytes": 73772
51+ },
52+ "dark": {
53+ "file": "indicator-ad-dark.png",
54+ "width": 960,
55+ "height": 540,
56+ "bytes": 35368
57+ },
58+ "light-lg": {
59+ "file": "indicator-ad-light-lg.png",
60+ "width": 1920,
61+ "height": 1080,
62+ "bytes": 75240
63+ },
64+ "light": {
65+ "file": "indicator-ad-light.png",
66+ "width": 960,
67+ "height": 540,
68+ "bytes": 35792
69+ }
70+ },
71+ "adx": {
72+ "dark-lg": {
73+ "file": "indicator-adx-dark-lg.png",
74+ "width": 1920,
75+ "height": 1080,
76+ "bytes": 137706
77+ },
78+ "dark": {
79+ "file": "indicator-adx-dark.png",
80+ "width": 960,
81+ "height": 540,
82+ "bytes": 68150
83+ },
84+ "light-lg": {
85+ "file": "indicator-adx-light-lg.png",
86+ "width": 1920,
87+ "height": 1080,
88+ "bytes": 137351
89+ },
90+ "light": {
91+ "file": "indicator-adx-light.png",
92+ "width": 960,
93+ "height": 540,
94+ "bytes": 68342
95+ }
96+ },
97+ "alma": {
98+ "dark-lg": {
99+ "file": "indicator-alma-dark-lg.png",
100+ "width": 1920,
101+ "height": 1080,
102+ "bytes": 82370
103+ },
104+ "dark": {
105+ "file": "indicator-alma-dark.png",
106+ "width": 960,
107+ "height": 540,
108+ "bytes": 38752
109+ },
110+ "light-lg": {
111+ "file": "indicator-alma-light-lg.png",
112+ "width": 1920,
113+ "height": 1080,
114+ "bytes": 81324
115+ },
116+ "light": {
117+ "file": "indicator-alma-light.png",
118+ "width": 960,
119+ "height": 540,
120+ "bytes": 38352
121+ }
122+ },
123+ "ao": {
124+ "dark-lg": {
125+ "file": "indicator-ao-dark-lg.png",
126+ "width": 1920,
127+ "height": 1080,
128+ "bytes": 46446
129+ },
130+ "dark": {
131+ "file": "indicator-ao-dark.png",
132+ "width": 960,
133+ "height": 540,
134+ "bytes": 27635
135+ },
136+ "light-lg": {
137+ "file": "indicator-ao-light-lg.png",
138+ "width": 1920,
139+ "height": 1080,
140+ "bytes": 45926
141+ },
142+ "light": {
143+ "file": "indicator-ao-light.png",
144+ "width": 960,
145+ "height": 540,
146+ "bytes": 27404
147+ }
148+ },
149+ "aroon": {
150+ "dark-lg": {
151+ "file": "indicator-aroon-dark-lg.png",
152+ "width": 1920,
153+ "height": 1080,
154+ "bytes": 124792
155+ },
156+ "dark": {
157+ "file": "indicator-aroon-dark.png",
158+ "width": 960,
159+ "height": 540,
160+ "bytes": 64073
161+ },
162+ "light-lg": {
163+ "file": "indicator-aroon-light-lg.png",
164+ "width": 1920,
165+ "height": 1080,
166+ "bytes": 125425
167+ },
168+ "light": {
169+ "file": "indicator-aroon-light.png",
170+ "width": 960,
171+ "height": 540,
172+ "bytes": 64446
173+ }
174+ },
175+ "atr": {
176+ "dark-lg": {
177+ "file": "indicator-atr-dark-lg.png",
178+ "width": 1920,
179+ "height": 1080,
180+ "bytes": 87083
181+ },
182+ "dark": {
183+ "file": "indicator-atr-dark.png",
184+ "width": 960,
185+ "height": 540,
186+ "bytes": 45040
187+ },
188+ "light-lg": {
189+ "file": "indicator-atr-light-lg.png",
190+ "width": 1920,
191+ "height": 1080,
192+ "bytes": 86021
193+ },
194+ "light": {
195+ "file": "indicator-atr-light.png",
196+ "width": 960,
197+ "height": 540,
198+ "bytes": 44455
199+ }
200+ },
201+ "auto-fib": {
202+ "dark-lg": {
203+ "file": "indicator-auto-fib-dark-lg.png",
204+ "width": 1920,
205+ "height": 1080,
206+ "bytes": 68146
207+ },
208+ "dark": {
209+ "file": "indicator-auto-fib-dark.png",
210+ "width": 960,
211+ "height": 540,
212+ "bytes": 39543
213+ },
214+ "light-lg": {
215+ "file": "indicator-auto-fib-light-lg.png",
216+ "width": 1920,
217+ "height": 1080,
218+ "bytes": 67500
219+ },
220+ "light": {
221+ "file": "indicator-auto-fib-light.png",
222+ "width": 960,
223+ "height": 540,
224+ "bytes": 39234
225+ }
226+ },
227+ "avwap": {
228+ "dark-lg": {
229+ "file": "indicator-avwap-dark-lg.png",
230+ "width": 1920,
231+ "height": 1080,
232+ "bytes": 69666
233+ },
234+ "dark": {
235+ "file": "indicator-avwap-dark.png",
236+ "width": 960,
237+ "height": 540,
238+ "bytes": 36312
239+ },
240+ "light-lg": {
241+ "file": "indicator-avwap-light-lg.png",
242+ "width": 1920,
243+ "height": 1080,
244+ "bytes": 67752
245+ },
246+ "light": {
247+ "file": "indicator-avwap-light.png",
248+ "width": 960,
249+ "height": 540,
250+ "bytes": 35402
251+ }
252+ },
253+ "bb-pctb": {
254+ "dark-lg": {
255+ "file": "indicator-bb-pctb-dark-lg.png",
256+ "width": 1920,
257+ "height": 1080,
258+ "bytes": 96182
259+ },
260+ "dark": {
261+ "file": "indicator-bb-pctb-dark.png",
262+ "width": 960,
263+ "height": 540,
264+ "bytes": 49078
265+ },
266+ "light-lg": {
267+ "file": "indicator-bb-pctb-light-lg.png",
268+ "width": 1920,
269+ "height": 1080,
270+ "bytes": 94658
271+ },
272+ "light": {
273+ "file": "indicator-bb-pctb-light.png",
274+ "width": 960,
275+ "height": 540,
276+ "bytes": 48646
277+ }
278+ },
279+ "bb-width": {
280+ "dark-lg": {
281+ "file": "indicator-bb-width-dark-lg.png",
282+ "width": 1920,
283+ "height": 1080,
284+ "bytes": 77556
285+ },
286+ "dark": {
287+ "file": "indicator-bb-width-dark.png",
288+ "width": 960,
289+ "height": 540,
290+ "bytes": 42293
291+ },
292+ "light-lg": {
293+ "file": "indicator-bb-width-light-lg.png",
294+ "width": 1920,
295+ "height": 1080,
296+ "bytes": 77046
297+ },
298+ "light": {
299+ "file": "indicator-bb-width-light.png",
300+ "width": 960,
301+ "height": 540,
302+ "bytes": 41910
303+ }
304+ },
305+ "bollinger": {
306+ "dark-lg": {
307+ "file": "indicator-bollinger-dark-lg.png",
308+ "width": 1920,
309+ "height": 1080,
310+ "bytes": 114863
311+ },
312+ "dark": {
313+ "file": "indicator-bollinger-dark.png",
314+ "width": 960,
315+ "height": 540,
316+ "bytes": 53377
317+ },
318+ "light-lg": {
319+ "file": "indicator-bollinger-light-lg.png",
320+ "width": 1920,
321+ "height": 1080,
322+ "bytes": 114400
323+ },
324+ "light": {
325+ "file": "indicator-bollinger-light.png",
326+ "width": 960,
327+ "height": 540,
328+ "bytes": 53260
329+ }
330+ },
331+ "cci": {
332+ "dark-lg": {
333+ "file": "indicator-cci-dark-lg.png",
334+ "width": 1920,
335+ "height": 1080,
336+ "bytes": 90893
337+ },
338+ "dark": {
339+ "file": "indicator-cci-dark.png",
340+ "width": 960,
341+ "height": 540,
342+ "bytes": 46259
343+ },
344+ "light-lg": {
345+ "file": "indicator-cci-light-lg.png",
346+ "width": 1920,
347+ "height": 1080,
348+ "bytes": 87080
349+ },
350+ "light": {
351+ "file": "indicator-cci-light.png",
352+ "width": 960,
353+ "height": 540,
354+ "bytes": 44714
355+ }
356+ },
357+ "chaikin-osc": {
358+ "dark-lg": {
359+ "file": "indicator-chaikin-osc-dark-lg.png",
360+ "width": 1920,
361+ "height": 1080,
362+ "bytes": 82899
363+ },
364+ "dark": {
365+ "file": "indicator-chaikin-osc-dark.png",
366+ "width": 960,
367+ "height": 540,
368+ "bytes": 39043
369+ },
370+ "light-lg": {
371+ "file": "indicator-chaikin-osc-light-lg.png",
372+ "width": 1920,
373+ "height": 1080,
374+ "bytes": 84550
375+ },
376+ "light": {
377+ "file": "indicator-chaikin-osc-light.png",
378+ "width": 960,
379+ "height": 540,
380+ "bytes": 39571
381+ }
382+ },
383+ "choppiness": {
384+ "dark-lg": {
385+ "file": "indicator-choppiness-dark-lg.png",
386+ "width": 1920,
387+ "height": 1080,
388+ "bytes": 74704
389+ },
390+ "dark": {
391+ "file": "indicator-choppiness-dark.png",
392+ "width": 960,
393+ "height": 540,
394+ "bytes": 40673
395+ },
396+ "light-lg": {
397+ "file": "indicator-choppiness-light-lg.png",
398+ "width": 1920,
399+ "height": 1080,
400+ "bytes": 72945
401+ },
402+ "light": {
403+ "file": "indicator-choppiness-light.png",
404+ "width": 960,
405+ "height": 540,
406+ "bytes": 40380
407+ }
408+ },
409+ "cmf": {
410+ "dark-lg": {
411+ "file": "indicator-cmf-dark-lg.png",
412+ "width": 1920,
413+ "height": 1080,
414+ "bytes": 78854
415+ },
416+ "dark": {
417+ "file": "indicator-cmf-dark.png",
418+ "width": 960,
419+ "height": 540,
420+ "bytes": 38359
421+ },
422+ "light-lg": {
423+ "file": "indicator-cmf-light-lg.png",
424+ "width": 1920,
425+ "height": 1080,
426+ "bytes": 80622
427+ },
428+ "light": {
429+ "file": "indicator-cmf-light.png",
430+ "width": 960,
431+ "height": 540,
432+ "bytes": 38829
433+ }
434+ },
435+ "cmo": {
436+ "dark-lg": {
437+ "file": "indicator-cmo-dark-lg.png",
438+ "width": 1920,
439+ "height": 1080,
440+ "bytes": 99239
441+ },
442+ "dark": {
443+ "file": "indicator-cmo-dark.png",
444+ "width": 960,
445+ "height": 540,
446+ "bytes": 50989
447+ },
448+ "light-lg": {
449+ "file": "indicator-cmo-light-lg.png",
450+ "width": 1920,
451+ "height": 1080,
452+ "bytes": 98609
453+ },
454+ "light": {
455+ "file": "indicator-cmo-light.png",
456+ "width": 960,
457+ "height": 540,
458+ "bytes": 50372
459+ }
460+ },
461+ "coppock": {
462+ "dark-lg": {
463+ "file": "indicator-coppock-dark-lg.png",
464+ "width": 1920,
465+ "height": 1080,
466+ "bytes": 48738
467+ },
468+ "dark": {
469+ "file": "indicator-coppock-dark.png",
470+ "width": 960,
471+ "height": 540,
472+ "bytes": 28148
473+ },
474+ "light-lg": {
475+ "file": "indicator-coppock-light-lg.png",
476+ "width": 1920,
477+ "height": 1080,
478+ "bytes": 48247
479+ },
480+ "light": {
481+ "file": "indicator-coppock-light.png",
482+ "width": 960,
483+ "height": 540,
484+ "bytes": 27935
485+ }
486+ },
487+ "dema": {
488+ "dark-lg": {
489+ "file": "indicator-dema-dark-lg.png",
490+ "width": 1920,
491+ "height": 1080,
492+ "bytes": 74676
493+ },
494+ "dark": {
495+ "file": "indicator-dema-dark.png",
496+ "width": 960,
497+ "height": 540,
498+ "bytes": 35357
499+ },
500+ "light-lg": {
501+ "file": "indicator-dema-light-lg.png",
502+ "width": 1920,
503+ "height": 1080,
504+ "bytes": 76590
505+ },
506+ "light": {
507+ "file": "indicator-dema-light.png",
508+ "width": 960,
509+ "height": 540,
510+ "bytes": 36257
511+ }
512+ },
513+ "donchian": {
514+ "dark-lg": {
515+ "file": "indicator-donchian-dark-lg.png",
516+ "width": 1920,
517+ "height": 1080,
518+ "bytes": 86992
519+ },
520+ "dark": {
521+ "file": "indicator-donchian-dark.png",
522+ "width": 960,
523+ "height": 540,
524+ "bytes": 41603
525+ },
526+ "light-lg": {
527+ "file": "indicator-donchian-light-lg.png",
528+ "width": 1920,
529+ "height": 1080,
530+ "bytes": 85551
531+ },
532+ "light": {
533+ "file": "indicator-donchian-light.png",
534+ "width": 960,
535+ "height": 540,
536+ "bytes": 41046
537+ }
538+ },
539+ "dpo": {
540+ "dark-lg": {
541+ "file": "indicator-dpo-dark-lg.png",
542+ "width": 1920,
543+ "height": 1080,
544+ "bytes": 71837
545+ },
546+ "dark": {
547+ "file": "indicator-dpo-dark.png",
548+ "width": 960,
549+ "height": 540,
550+ "bytes": 39339
551+ },
552+ "light-lg": {
553+ "file": "indicator-dpo-light-lg.png",
554+ "width": 1920,
555+ "height": 1080,
556+ "bytes": 74890
557+ },
558+ "light": {
559+ "file": "indicator-dpo-light.png",
560+ "width": 960,
561+ "height": 540,
562+ "bytes": 40468
563+ }
564+ },
565+ "elder-ray": {
566+ "dark-lg": {
567+ "file": "indicator-elder-ray-dark-lg.png",
568+ "width": 1920,
569+ "height": 1080,
570+ "bytes": 47638
571+ },
572+ "dark": {
573+ "file": "indicator-elder-ray-dark.png",
574+ "width": 960,
575+ "height": 540,
576+ "bytes": 28741
577+ },
578+ "light-lg": {
579+ "file": "indicator-elder-ray-light-lg.png",
580+ "width": 1920,
581+ "height": 1080,
582+ "bytes": 47133
583+ },
584+ "light": {
585+ "file": "indicator-elder-ray-light.png",
586+ "width": 960,
587+ "height": 540,
588+ "bytes": 28498
589+ }
590+ },
591+ "ema": {
592+ "dark-lg": {
593+ "file": "indicator-ema-dark-lg.png",
594+ "width": 1920,
595+ "height": 1080,
596+ "bytes": 71999
597+ },
598+ "dark": {
599+ "file": "indicator-ema-dark.png",
600+ "width": 960,
601+ "height": 540,
602+ "bytes": 34132
603+ },
604+ "light-lg": {
605+ "file": "indicator-ema-light-lg.png",
606+ "width": 1920,
607+ "height": 1080,
608+ "bytes": 71683
609+ },
610+ "light": {
611+ "file": "indicator-ema-light.png",
612+ "width": 960,
613+ "height": 540,
614+ "bytes": 33990
615+ }
616+ },
617+ "envelope": {
618+ "dark-lg": {
619+ "file": "indicator-envelope-dark-lg.png",
620+ "width": 1920,
621+ "height": 1080,
622+ "bytes": 106070
623+ },
624+ "dark": {
625+ "file": "indicator-envelope-dark.png",
626+ "width": 960,
627+ "height": 540,
628+ "bytes": 49725
629+ },
630+ "light-lg": {
631+ "file": "indicator-envelope-light-lg.png",
632+ "width": 1920,
633+ "height": 1080,
634+ "bytes": 109499
635+ },
636+ "light": {
637+ "file": "indicator-envelope-light.png",
638+ "width": 960,
639+ "height": 540,
640+ "bytes": 51139
641+ }
642+ },
643+ "eom": {
644+ "dark-lg": {
645+ "file": "indicator-eom-dark-lg.png",
646+ "width": 1920,
647+ "height": 1080,
648+ "bytes": 84241
649+ },
650+ "dark": {
651+ "file": "indicator-eom-dark.png",
652+ "width": 960,
653+ "height": 540,
654+ "bytes": 39659
655+ },
656+ "light-lg": {
657+ "file": "indicator-eom-light-lg.png",
658+ "width": 1920,
659+ "height": 1080,
660+ "bytes": 82058
661+ },
662+ "light": {
663+ "file": "indicator-eom-light.png",
664+ "width": 960,
665+ "height": 540,
666+ "bytes": 38863
667+ }
668+ },
669+ "force": {
670+ "dark-lg": {
671+ "file": "indicator-force-dark-lg.png",
672+ "width": 1920,
673+ "height": 1080,
674+ "bytes": 82944
675+ },
676+ "dark": {
677+ "file": "indicator-force-dark.png",
678+ "width": 960,
679+ "height": 540,
680+ "bytes": 39330
681+ },
682+ "light-lg": {
683+ "file": "indicator-force-light-lg.png",
684+ "width": 1920,
685+ "height": 1080,
686+ "bytes": 82161
687+ },
688+ "light": {
689+ "file": "indicator-force-light.png",
690+ "width": 960,
691+ "height": 540,
692+ "bytes": 38810
693+ }
694+ },
695+ "hma": {
696+ "dark-lg": {
697+ "file": "indicator-hma-dark-lg.png",
698+ "width": 1920,
699+ "height": 1080,
700+ "bytes": 85053
701+ },
702+ "dark": {
703+ "file": "indicator-hma-dark.png",
704+ "width": 960,
705+ "height": 540,
706+ "bytes": 40284
707+ },
708+ "light-lg": {
709+ "file": "indicator-hma-light-lg.png",
710+ "width": 1920,
711+ "height": 1080,
712+ "bytes": 82794
713+ },
714+ "light": {
715+ "file": "indicator-hma-light.png",
716+ "width": 960,
717+ "height": 540,
718+ "bytes": 39228
719+ }
720+ },
721+ "hv": {
722+ "dark-lg": {
723+ "file": "indicator-hv-dark-lg.png",
724+ "width": 1920,
725+ "height": 1080,
726+ "bytes": 86889
727+ },
728+ "dark": {
729+ "file": "indicator-hv-dark.png",
730+ "width": 960,
731+ "height": 540,
732+ "bytes": 45451
733+ },
734+ "light-lg": {
735+ "file": "indicator-hv-light-lg.png",
736+ "width": 1920,
737+ "height": 1080,
738+ "bytes": 83117
739+ },
740+ "light": {
741+ "file": "indicator-hv-light.png",
742+ "width": 960,
743+ "height": 540,
744+ "bytes": 43601
745+ }
746+ },
747+ "ichimoku": {
748+ "dark-lg": {
749+ "file": "indicator-ichimoku-dark-lg.png",
750+ "width": 1920,
751+ "height": 1080,
752+ "bytes": 168012
753+ },
754+ "dark": {
755+ "file": "indicator-ichimoku-dark.png",
756+ "width": 960,
757+ "height": 540,
758+ "bytes": 78480
759+ },
760+ "light-lg": {
761+ "file": "indicator-ichimoku-light-lg.png",
762+ "width": 1920,
763+ "height": 1080,
764+ "bytes": 167420
765+ },
766+ "light": {
767+ "file": "indicator-ichimoku-light.png",
768+ "width": 960,
769+ "height": 540,
770+ "bytes": 78267
771+ }
772+ },
773+ "kama": {
774+ "dark-lg": {
775+ "file": "indicator-kama-dark-lg.png",
776+ "width": 1920,
777+ "height": 1080,
778+ "bytes": 72998
779+ },
780+ "dark": {
781+ "file": "indicator-kama-dark.png",
782+ "width": 960,
783+ "height": 540,
784+ "bytes": 34997
785+ },
786+ "light-lg": {
787+ "file": "indicator-kama-light-lg.png",
788+ "width": 1920,
789+ "height": 1080,
790+ "bytes": 71643
791+ },
792+ "light": {
793+ "file": "indicator-kama-light.png",
794+ "width": 960,
795+ "height": 540,
796+ "bytes": 34473
797+ }
798+ },
799+ "keltner": {
800+ "dark-lg": {
801+ "file": "indicator-keltner-dark-lg.png",
802+ "width": 1920,
803+ "height": 1080,
804+ "bytes": 114864
805+ },
806+ "dark": {
807+ "file": "indicator-keltner-dark.png",
808+ "width": 960,
809+ "height": 540,
810+ "bytes": 53576
811+ },
812+ "light-lg": {
813+ "file": "indicator-keltner-light-lg.png",
814+ "width": 1920,
815+ "height": 1080,
816+ "bytes": 114140
817+ },
818+ "light": {
819+ "file": "indicator-keltner-light.png",
820+ "width": 960,
821+ "height": 540,
822+ "bytes": 53196
823+ }
824+ },
825+ "klinger": {
826+ "dark-lg": {
827+ "file": "indicator-klinger-dark-lg.png",
828+ "width": 1920,
829+ "height": 1080,
830+ "bytes": 118784
831+ },
832+ "dark": {
833+ "file": "indicator-klinger-dark.png",
834+ "width": 960,
835+ "height": 540,
836+ "bytes": 56227
837+ },
838+ "light-lg": {
839+ "file": "indicator-klinger-light-lg.png",
840+ "width": 1920,
841+ "height": 1080,
842+ "bytes": 118149
843+ },
844+ "light": {
845+ "file": "indicator-klinger-light.png",
846+ "width": 960,
847+ "height": 540,
848+ "bytes": 55511
849+ }
850+ },
851+ "kst": {
852+ "dark-lg": {
853+ "file": "indicator-kst-dark-lg.png",
854+ "width": 1920,
855+ "height": 1080,
856+ "bytes": 93323
857+ },
858+ "dark": {
859+ "file": "indicator-kst-dark.png",
860+ "width": 960,
861+ "height": 540,
862+ "bytes": 48867
863+ },
864+ "light-lg": {
865+ "file": "indicator-kst-light-lg.png",
866+ "width": 1920,
867+ "height": 1080,
868+ "bytes": 92999
869+ },
870+ "light": {
871+ "file": "indicator-kst-light.png",
872+ "width": 960,
873+ "height": 540,
874+ "bytes": 48304
875+ }
876+ },
877+ "lsma": {
878+ "dark-lg": {
879+ "file": "indicator-lsma-dark-lg.png",
880+ "width": 1920,
881+ "height": 1080,
882+ "bytes": 123578
883+ },
884+ "dark": {
885+ "file": "indicator-lsma-dark.png",
886+ "width": 960,
887+ "height": 540,
888+ "bytes": 57801
889+ },
890+ "light-lg": {
891+ "file": "indicator-lsma-light-lg.png",
892+ "width": 1920,
893+ "height": 1080,
894+ "bytes": 122964
895+ },
896+ "light": {
897+ "file": "indicator-lsma-light.png",
898+ "width": 960,
899+ "height": 540,
900+ "bytes": 57436
901+ }
902+ },
903+ "macd": {
904+ "dark-lg": {
905+ "file": "indicator-macd-dark-lg.png",
906+ "width": 1920,
907+ "height": 1080,
908+ "bytes": 91406
909+ },
910+ "dark": {
911+ "file": "indicator-macd-dark.png",
912+ "width": 960,
913+ "height": 540,
914+ "bytes": 50008
915+ },
916+ "light-lg": {
917+ "file": "indicator-macd-light-lg.png",
918+ "width": 1920,
919+ "height": 1080,
920+ "bytes": 90697
921+ },
922+ "light": {
923+ "file": "indicator-macd-light.png",
924+ "width": 960,
925+ "height": 540,
926+ "bytes": 49465
927+ }
928+ },
929+ "mass": {
930+ "dark-lg": {
931+ "file": "indicator-mass-dark-lg.png",
932+ "width": 1920,
933+ "height": 1080,
934+ "bytes": 81163
935+ },
936+ "dark": {
937+ "file": "indicator-mass-dark.png",
938+ "width": 960,
939+ "height": 540,
940+ "bytes": 45205
941+ },
942+ "light-lg": {
943+ "file": "indicator-mass-light-lg.png",
944+ "width": 1920,
945+ "height": 1080,
946+ "bytes": 83952
947+ },
948+ "light": {
949+ "file": "indicator-mass-light.png",
950+ "width": 960,
951+ "height": 540,
952+ "bytes": 46122
953+ }
954+ },
955+ "mfi": {
956+ "dark-lg": {
957+ "file": "indicator-mfi-dark-lg.png",
958+ "width": 1920,
959+ "height": 1080,
960+ "bytes": 84205
961+ },
962+ "dark": {
963+ "file": "indicator-mfi-dark.png",
964+ "width": 960,
965+ "height": 540,
966+ "bytes": 40367
967+ },
968+ "light-lg": {
969+ "file": "indicator-mfi-light-lg.png",
970+ "width": 1920,
971+ "height": 1080,
972+ "bytes": 86171
973+ },
974+ "light": {
975+ "file": "indicator-mfi-light.png",
976+ "width": 960,
977+ "height": 540,
978+ "bytes": 41031
979+ }
980+ },
981+ "momentum": {
982+ "dark-lg": {
983+ "file": "indicator-momentum-dark-lg.png",
984+ "width": 1920,
985+ "height": 1080,
986+ "bytes": 82493
987+ },
988+ "dark": {
989+ "file": "indicator-momentum-dark.png",
990+ "width": 960,
991+ "height": 540,
992+ "bytes": 44043
993+ },
994+ "light-lg": {
995+ "file": "indicator-momentum-light-lg.png",
996+ "width": 1920,
997+ "height": 1080,
998+ "bytes": 81619
999+ },
1000+ "light": {
1001+ "file": "indicator-momentum-light.png",
1002+ "width": 960,
1003+ "height": 540,
1004+ "bytes": 43345
1005+ }
1006+ },
1007+ "obv": {
1008+ "dark-lg": {
1009+ "file": "indicator-obv-dark-lg.png",
1010+ "width": 1920,
1011+ "height": 1080,
1012+ "bytes": 79617
1013+ },
1014+ "dark": {
1015+ "file": "indicator-obv-dark.png",
1016+ "width": 960,
1017+ "height": 540,
1018+ "bytes": 37510
1019+ },
1020+ "light-lg": {
1021+ "file": "indicator-obv-light-lg.png",
1022+ "width": 1920,
1023+ "height": 1080,
1024+ "bytes": 79083
1025+ },
1026+ "light": {
1027+ "file": "indicator-obv-light.png",
1028+ "width": 960,
1029+ "height": 540,
1030+ "bytes": 36851
1031+ }
1032+ },
1033+ "pivots": {
1034+ "dark-lg": {
1035+ "file": "indicator-pivots-dark-lg.png",
1036+ "width": 1920,
1037+ "height": 1080,
1038+ "bytes": 62276
1039+ },
1040+ "dark": {
1041+ "file": "indicator-pivots-dark.png",
1042+ "width": 960,
1043+ "height": 540,
1044+ "bytes": 36887
1045+ },
1046+ "light-lg": {
1047+ "file": "indicator-pivots-light-lg.png",
1048+ "width": 1920,
1049+ "height": 1080,
1050+ "bytes": 61677
1051+ },
1052+ "light": {
1053+ "file": "indicator-pivots-light.png",
1054+ "width": 960,
1055+ "height": 540,
1056+ "bytes": 36512
1057+ }
1058+ },
1059+ "psar": {
1060+ "dark-lg": {
1061+ "file": "indicator-psar-dark-lg.png",
1062+ "width": 1920,
1063+ "height": 1080,
1064+ "bytes": 60345
1065+ },
1066+ "dark": {
1067+ "file": "indicator-psar-dark.png",
1068+ "width": 960,
1069+ "height": 540,
1070+ "bytes": 29441
1071+ },
1072+ "light-lg": {
1073+ "file": "indicator-psar-light-lg.png",
1074+ "width": 1920,
1075+ "height": 1080,
1076+ "bytes": 60195
1077+ },
1078+ "light": {
1079+ "file": "indicator-psar-light.png",
1080+ "width": 960,
1081+ "height": 540,
1082+ "bytes": 29551
1083+ }
1084+ },
1085+ "roc": {
1086+ "dark-lg": {
1087+ "file": "indicator-roc-dark-lg.png",
1088+ "width": 1920,
1089+ "height": 1080,
1090+ "bytes": 84855
1091+ },
1092+ "dark": {
1093+ "file": "indicator-roc-dark.png",
1094+ "width": 960,
1095+ "height": 540,
1096+ "bytes": 45355
1097+ },
1098+ "light-lg": {
1099+ "file": "indicator-roc-light-lg.png",
1100+ "width": 1920,
1101+ "height": 1080,
1102+ "bytes": 84630
1103+ },
1104+ "light": {
1105+ "file": "indicator-roc-light.png",
1106+ "width": 960,
1107+ "height": 540,
1108+ "bytes": 45006
1109+ }
1110+ },
1111+ "rsi": {
1112+ "dark-lg": {
1113+ "file": "indicator-rsi-dark-lg.png",
1114+ "width": 1920,
1115+ "height": 1080,
1116+ "bytes": 80049
1117+ },
1118+ "dark": {
1119+ "file": "indicator-rsi-dark.png",
1120+ "width": 960,
1121+ "height": 540,
1122+ "bytes": 43552
1123+ },
1124+ "light-lg": {
1125+ "file": "indicator-rsi-light-lg.png",
1126+ "width": 1920,
1127+ "height": 1080,
1128+ "bytes": 78844
1129+ },
1130+ "light": {
1131+ "file": "indicator-rsi-light.png",
1132+ "width": 960,
1133+ "height": 540,
1134+ "bytes": 42880
1135+ }
1136+ },
1137+ "rvi": {
1138+ "dark-lg": {
1139+ "file": "indicator-rvi-dark-lg.png",
1140+ "width": 1920,
1141+ "height": 1080,
1142+ "bytes": 106854
1143+ },
1144+ "dark": {
1145+ "file": "indicator-rvi-dark.png",
1146+ "width": 960,
1147+ "height": 540,
1148+ "bytes": 54082
1149+ },
1150+ "light-lg": {
1151+ "file": "indicator-rvi-light-lg.png",
1152+ "width": 1920,
1153+ "height": 1080,
1154+ "bytes": 105863
1155+ },
1156+ "light": {
1157+ "file": "indicator-rvi-light.png",
1158+ "width": 960,
1159+ "height": 540,
1160+ "bytes": 53568
1161+ }
1162+ },
1163+ "sma": {
1164+ "dark-lg": {
1165+ "file": "indicator-sma-dark-lg.png",
1166+ "width": 1920,
1167+ "height": 1080,
1168+ "bytes": 72252
1169+ },
1170+ "dark": {
1171+ "file": "indicator-sma-dark.png",
1172+ "width": 960,
1173+ "height": 540,
1174+ "bytes": 33944
1175+ },
1176+ "light-lg": {
1177+ "file": "indicator-sma-light-lg.png",
1178+ "width": 1920,
1179+ "height": 1080,
1180+ "bytes": 71669
1181+ },
1182+ "light": {
1183+ "file": "indicator-sma-light.png",
1184+ "width": 960,
1185+ "height": 540,
1186+ "bytes": 33673
1187+ }
1188+ },
1189+ "stddev": {
1190+ "dark-lg": {
1191+ "file": "indicator-stddev-dark-lg.png",
1192+ "width": 1920,
1193+ "height": 1080,
1194+ "bytes": 73661
1195+ },
1196+ "dark": {
1197+ "file": "indicator-stddev-dark.png",
1198+ "width": 960,
1199+ "height": 540,
1200+ "bytes": 41211
1201+ },
1202+ "light-lg": {
1203+ "file": "indicator-stddev-light-lg.png",
1204+ "width": 1920,
1205+ "height": 1080,
1206+ "bytes": 75298
1207+ },
1208+ "light": {
1209+ "file": "indicator-stddev-light.png",
1210+ "width": 960,
1211+ "height": 540,
1212+ "bytes": 41720
1213+ }
1214+ },
1215+ "stoch": {
1216+ "dark-lg": {
1217+ "file": "indicator-stoch-dark-lg.png",
1218+ "width": 1920,
1219+ "height": 1080,
1220+ "bytes": 126835
1221+ },
1222+ "dark": {
1223+ "file": "indicator-stoch-dark.png",
1224+ "width": 960,
1225+ "height": 540,
1226+ "bytes": 64697
1227+ },
1228+ "light-lg": {
1229+ "file": "indicator-stoch-light-lg.png",
1230+ "width": 1920,
1231+ "height": 1080,
1232+ "bytes": 127489
1233+ },
1234+ "light": {
1235+ "file": "indicator-stoch-light.png",
1236+ "width": 960,
1237+ "height": 540,
1238+ "bytes": 64661
1239+ }
1240+ },
1241+ "stochrsi": {
1242+ "dark-lg": {
1243+ "file": "indicator-stochrsi-dark-lg.png",
1244+ "width": 1920,
1245+ "height": 1080,
1246+ "bytes": 142004
1247+ },
1248+ "dark": {
1249+ "file": "indicator-stochrsi-dark.png",
1250+ "width": 960,
1251+ "height": 540,
1252+ "bytes": 71213
1253+ },
1254+ "light-lg": {
1255+ "file": "indicator-stochrsi-light-lg.png",
1256+ "width": 1920,
1257+ "height": 1080,
1258+ "bytes": 143192
1259+ },
1260+ "light": {
1261+ "file": "indicator-stochrsi-light.png",
1262+ "width": 960,
1263+ "height": 540,
1264+ "bytes": 71465
1265+ }
1266+ },
1267+ "supertrend": {
1268+ "dark-lg": {
1269+ "file": "indicator-supertrend-dark-lg.png",
1270+ "width": 1920,
1271+ "height": 1080,
1272+ "bytes": 69542
1273+ },
1274+ "dark": {
1275+ "file": "indicator-supertrend-dark.png",
1276+ "width": 960,
1277+ "height": 540,
1278+ "bytes": 33181
1279+ },
1280+ "light-lg": {
1281+ "file": "indicator-supertrend-light-lg.png",
1282+ "width": 1920,
1283+ "height": 1080,
1284+ "bytes": 68907
1285+ },
1286+ "light": {
1287+ "file": "indicator-supertrend-light.png",
1288+ "width": 960,
1289+ "height": 540,
1290+ "bytes": 32965
1291+ }
1292+ },
1293+ "tema": {
1294+ "dark-lg": {
1295+ "file": "indicator-tema-dark-lg.png",
1296+ "width": 1920,
1297+ "height": 1080,
1298+ "bytes": 80902
1299+ },
1300+ "dark": {
1301+ "file": "indicator-tema-dark.png",
1302+ "width": 960,
1303+ "height": 540,
1304+ "bytes": 38193
1305+ },
1306+ "light-lg": {
1307+ "file": "indicator-tema-light-lg.png",
1308+ "width": 1920,
1309+ "height": 1080,
1310+ "bytes": 80449
1311+ },
1312+ "light": {
1313+ "file": "indicator-tema-light.png",
1314+ "width": 960,
1315+ "height": 540,
1316+ "bytes": 37938
1317+ }
1318+ },
1319+ "trix": {
1320+ "dark-lg": {
1321+ "file": "indicator-trix-dark-lg.png",
1322+ "width": 1920,
1323+ "height": 1080,
1324+ "bytes": 83728
1325+ },
1326+ "dark": {
1327+ "file": "indicator-trix-dark.png",
1328+ "width": 960,
1329+ "height": 540,
1330+ "bytes": 44571
1331+ },
1332+ "light-lg": {
1333+ "file": "indicator-trix-light-lg.png",
1334+ "width": 1920,
1335+ "height": 1080,
1336+ "bytes": 83174
1337+ },
1338+ "light": {
1339+ "file": "indicator-trix-light.png",
1340+ "width": 960,
1341+ "height": 540,
1342+ "bytes": 44233
1343+ }
1344+ },
1345+ "tsi": {
1346+ "dark-lg": {
1347+ "file": "indicator-tsi-dark-lg.png",
1348+ "width": 1920,
1349+ "height": 1080,
1350+ "bytes": 89007
1351+ },
1352+ "dark": {
1353+ "file": "indicator-tsi-dark.png",
1354+ "width": 960,
1355+ "height": 540,
1356+ "bytes": 47220
1357+ },
1358+ "light-lg": {
1359+ "file": "indicator-tsi-light-lg.png",
1360+ "width": 1920,
1361+ "height": 1080,
1362+ "bytes": 88437
1363+ },
1364+ "light": {
1365+ "file": "indicator-tsi-light.png",
1366+ "width": 960,
1367+ "height": 540,
1368+ "bytes": 46743
1369+ }
1370+ },
1371+ "ultimate": {
1372+ "dark-lg": {
1373+ "file": "indicator-ultimate-dark-lg.png",
1374+ "width": 1920,
1375+ "height": 1080,
1376+ "bytes": 82175
1377+ },
1378+ "dark": {
1379+ "file": "indicator-ultimate-dark.png",
1380+ "width": 960,
1381+ "height": 540,
1382+ "bytes": 45384
1383+ },
1384+ "light-lg": {
1385+ "file": "indicator-ultimate-light-lg.png",
1386+ "width": 1920,
1387+ "height": 1080,
1388+ "bytes": 84264
1389+ },
1390+ "light": {
1391+ "file": "indicator-ultimate-light.png",
1392+ "width": 960,
1393+ "height": 540,
1394+ "bytes": 45919
1395+ }
1396+ },
1397+ "volume-ma": {
1398+ "dark-lg": {
1399+ "file": "indicator-volume-ma-dark-lg.png",
1400+ "width": 1920,
1401+ "height": 1080,
1402+ "bytes": 65882
1403+ },
1404+ "dark": {
1405+ "file": "indicator-volume-ma-dark.png",
1406+ "width": 960,
1407+ "height": 540,
1408+ "bytes": 32773
1409+ },
1410+ "light-lg": {
1411+ "file": "indicator-volume-ma-light-lg.png",
1412+ "width": 1920,
1413+ "height": 1080,
1414+ "bytes": 65020
1415+ },
1416+ "light": {
1417+ "file": "indicator-volume-ma-light.png",
1418+ "width": 960,
1419+ "height": 540,
1420+ "bytes": 32388
1421+ }
1422+ },
1423+ "volume-osc": {
1424+ "dark-lg": {
1425+ "file": "indicator-volume-osc-dark-lg.png",
1426+ "width": 1920,
1427+ "height": 1080,
1428+ "bytes": 99885
1429+ },
1430+ "dark": {
1431+ "file": "indicator-volume-osc-dark.png",
1432+ "width": 960,
1433+ "height": 540,
1434+ "bytes": 46791
1435+ },
1436+ "light-lg": {
1437+ "file": "indicator-volume-osc-light-lg.png",
1438+ "width": 1920,
1439+ "height": 1080,
1440+ "bytes": 97517
1441+ },
1442+ "light": {
1443+ "file": "indicator-volume-osc-light.png",
1444+ "width": 960,
1445+ "height": 540,
1446+ "bytes": 45661
1447+ }
1448+ },
1449+ "volume-profile": {
1450+ "dark-lg": {
1451+ "file": "indicator-volume-profile-dark-lg.png",
1452+ "width": 1920,
1453+ "height": 1080,
1454+ "bytes": 49774
1455+ },
1456+ "dark": {
1457+ "file": "indicator-volume-profile-dark.png",
1458+ "width": 960,
1459+ "height": 540,
1460+ "bytes": 29243
1461+ },
1462+ "light-lg": {
1463+ "file": "indicator-volume-profile-light-lg.png",
1464+ "width": 1920,
1465+ "height": 1080,
1466+ "bytes": 49117
1467+ },
1468+ "light": {
1469+ "file": "indicator-volume-profile-light.png",
1470+ "width": 960,
1471+ "height": 540,
1472+ "bytes": 28933
1473+ }
1474+ },
1475+ "vortex": {
1476+ "dark-lg": {
1477+ "file": "indicator-vortex-dark-lg.png",
1478+ "width": 1920,
1479+ "height": 1080,
1480+ "bytes": 112160
1481+ },
1482+ "dark": {
1483+ "file": "indicator-vortex-dark.png",
1484+ "width": 960,
1485+ "height": 540,
1486+ "bytes": 56661
1487+ },
1488+ "light-lg": {
1489+ "file": "indicator-vortex-light-lg.png",
1490+ "width": 1920,
1491+ "height": 1080,
1492+ "bytes": 113504
1493+ },
1494+ "light": {
1495+ "file": "indicator-vortex-light.png",
1496+ "width": 960,
1497+ "height": 540,
1498+ "bytes": 56861
1499+ }
1500+ },
1501+ "williams": {
1502+ "dark-lg": {
1503+ "file": "indicator-williams-dark-lg.png",
1504+ "width": 1920,
1505+ "height": 1080,
1506+ "bytes": 101947
1507+ },
1508+ "dark": {
1509+ "file": "indicator-williams-dark.png",
1510+ "width": 960,
1511+ "height": 540,
1512+ "bytes": 52535
1513+ },
1514+ "light-lg": {
1515+ "file": "indicator-williams-light-lg.png",
1516+ "width": 1920,
1517+ "height": 1080,
1518+ "bytes": 98045
1519+ },
1520+ "light": {
1521+ "file": "indicator-williams-light.png",
1522+ "width": 960,
1523+ "height": 540,
1524+ "bytes": 50919
1525+ }
1526+ },
1527+ "wma": {
1528+ "dark-lg": {
1529+ "file": "indicator-wma-dark-lg.png",
1530+ "width": 1920,
1531+ "height": 1080,
1532+ "bytes": 71990
1533+ },
1534+ "dark": {
1535+ "file": "indicator-wma-dark.png",
1536+ "width": 960,
1537+ "height": 540,
1538+ "bytes": 34097
1539+ },
1540+ "light-lg": {
1541+ "file": "indicator-wma-light-lg.png",
1542+ "width": 1920,
1543+ "height": 1080,
1544+ "bytes": 72896
1545+ },
1546+ "light": {
1547+ "file": "indicator-wma-light.png",
1548+ "width": 960,
1549+ "height": 540,
1550+ "bytes": 34485
1551+ }
1552+ },
1553+ "zigzag": {
1554+ "dark-lg": {
1555+ "file": "indicator-zigzag-dark-lg.png",
1556+ "width": 1920,
1557+ "height": 1080,
1558+ "bytes": 84635
1559+ },
1560+ "dark": {
1561+ "file": "indicator-zigzag-dark.png",
1562+ "width": 960,
1563+ "height": 540,
1564+ "bytes": 39291
1565+ },
1566+ "light-lg": {
1567+ "file": "indicator-zigzag-light-lg.png",
1568+ "width": 1920,
1569+ "height": 1080,
1570+ "bytes": 82952
1571+ },
1572+ "light": {
1573+ "file": "indicator-zigzag-light.png",
1574+ "width": 960,
1575+ "height": 540,
1576+ "bytes": 38600
1577+ }
1578+ }
1579+ },
1580+ "tools": {
1581+ "arrow": {
1582+ "dark-lg": {
1583+ "file": "tool-arrow-dark-lg.png",
1584+ "width": 1920,
1585+ "height": 1080,
1586+ "bytes": 52952
1587+ },
1588+ "dark": {
1589+ "file": "tool-arrow-dark.png",
1590+ "width": 960,
1591+ "height": 540,
1592+ "bytes": 25356
1593+ },
1594+ "light-lg": {
1595+ "file": "tool-arrow-light-lg.png",
1596+ "width": 1920,
1597+ "height": 1080,
1598+ "bytes": 52269
1599+ },
1600+ "light": {
1601+ "file": "tool-arrow-light.png",
1602+ "width": 960,
1603+ "height": 540,
1604+ "bytes": 25020
1605+ }
1606+ },
1607+ "arrow-down": {
1608+ "dark-lg": {
1609+ "file": "tool-arrow-down-dark-lg.png",
1610+ "width": 1920,
1611+ "height": 1080,
1612+ "bytes": 51716
1613+ },
1614+ "dark": {
1615+ "file": "tool-arrow-down-dark.png",
1616+ "width": 960,
1617+ "height": 540,
1618+ "bytes": 24272
1619+ },
1620+ "light-lg": {
1621+ "file": "tool-arrow-down-light-lg.png",
1622+ "width": 1920,
1623+ "height": 1080,
1624+ "bytes": 51021
1625+ },
1626+ "light": {
1627+ "file": "tool-arrow-down-light.png",
1628+ "width": 960,
1629+ "height": 540,
1630+ "bytes": 23891
1631+ }
1632+ },
1633+ "arrow-up": {
1634+ "dark-lg": {
1635+ "file": "tool-arrow-up-dark-lg.png",
1636+ "width": 1920,
1637+ "height": 1080,
1638+ "bytes": 51783
1639+ },
1640+ "dark": {
1641+ "file": "tool-arrow-up-dark.png",
1642+ "width": 960,
1643+ "height": 540,
1644+ "bytes": 25304
1645+ },
1646+ "light-lg": {
1647+ "file": "tool-arrow-up-light-lg.png",
1648+ "width": 1920,
1649+ "height": 1080,
1650+ "bytes": 51182
1651+ },
1652+ "light": {
1653+ "file": "tool-arrow-up-light.png",
1654+ "width": 960,
1655+ "height": 540,
1656+ "bytes": 25056
1657+ }
1658+ },
1659+ "brush": {
1660+ "dark-lg": {
1661+ "file": "tool-brush-dark-lg.png",
1662+ "width": 1920,
1663+ "height": 1080,
1664+ "bytes": 60374
1665+ },
1666+ "dark": {
1667+ "file": "tool-brush-dark.png",
1668+ "width": 960,
1669+ "height": 540,
1670+ "bytes": 28509
1671+ },
1672+ "light-lg": {
1673+ "file": "tool-brush-light-lg.png",
1674+ "width": 1920,
1675+ "height": 1080,
1676+ "bytes": 59507
1677+ },
1678+ "light": {
1679+ "file": "tool-brush-light.png",
1680+ "width": 960,
1681+ "height": 540,
1682+ "bytes": 28117
1683+ }
1684+ },
1685+ "callout": {
1686+ "dark-lg": {
1687+ "file": "tool-callout-dark-lg.png",
1688+ "width": 1920,
1689+ "height": 1080,
1690+ "bytes": 62512
1691+ },
1692+ "dark": {
1693+ "file": "tool-callout-dark.png",
1694+ "width": 960,
1695+ "height": 540,
1696+ "bytes": 32677
1697+ },
1698+ "light-lg": {
1699+ "file": "tool-callout-light-lg.png",
1700+ "width": 1920,
1701+ "height": 1080,
1702+ "bytes": 61786
1703+ },
1704+ "light": {
1705+ "file": "tool-callout-light.png",
1706+ "width": 960,
1707+ "height": 540,
1708+ "bytes": 32239
1709+ }
1710+ },
1711+ "channel": {
1712+ "dark-lg": {
1713+ "file": "tool-channel-dark-lg.png",
1714+ "width": 1920,
1715+ "height": 1080,
1716+ "bytes": 81461
1717+ },
1718+ "dark": {
1719+ "file": "tool-channel-dark.png",
1720+ "width": 960,
1721+ "height": 540,
1722+ "bytes": 38626
1723+ },
1724+ "light-lg": {
1725+ "file": "tool-channel-light-lg.png",
1726+ "width": 1920,
1727+ "height": 1080,
1728+ "bytes": 80895
1729+ },
1730+ "light": {
1731+ "file": "tool-channel-light.png",
1732+ "width": 960,
1733+ "height": 540,
1734+ "bytes": 38393
1735+ }
1736+ },
1737+ "cross": {
1738+ "dark-lg": {
1739+ "file": "tool-cross-dark-lg.png",
1740+ "width": 1920,
1741+ "height": 1080,
1742+ "bytes": 54683
1743+ },
1744+ "dark": {
1745+ "file": "tool-cross-dark.png",
1746+ "width": 960,
1747+ "height": 540,
1748+ "bytes": 27444
1749+ },
1750+ "light-lg": {
1751+ "file": "tool-cross-light-lg.png",
1752+ "width": 1920,
1753+ "height": 1080,
1754+ "bytes": 54003
1755+ },
1756+ "light": {
1757+ "file": "tool-cross-light.png",
1758+ "width": 960,
1759+ "height": 540,
1760+ "bytes": 26992
1761+ }
1762+ },
1763+ "date-price-range": {
1764+ "dark-lg": {
1765+ "file": "tool-date-price-range-dark-lg.png",
1766+ "width": 1920,
1767+ "height": 1080,
1768+ "bytes": 60755
1769+ },
1770+ "dark": {
1771+ "file": "tool-date-price-range-dark.png",
1772+ "width": 960,
1773+ "height": 540,
1774+ "bytes": 32697
1775+ },
1776+ "light-lg": {
1777+ "file": "tool-date-price-range-light-lg.png",
1778+ "width": 1920,
1779+ "height": 1080,
1780+ "bytes": 60248
1781+ },
1782+ "light": {
1783+ "file": "tool-date-price-range-light.png",
1784+ "width": 960,
1785+ "height": 540,
1786+ "bytes": 32433
1787+ }
1788+ },
1789+ "date-range": {
1790+ "dark-lg": {
1791+ "file": "tool-date-range-dark-lg.png",
1792+ "width": 1920,
1793+ "height": 1080,
1794+ "bytes": 55405
1795+ },
1796+ "dark": {
1797+ "file": "tool-date-range-dark.png",
1798+ "width": 960,
1799+ "height": 540,
1800+ "bytes": 28298
1801+ },
1802+ "light-lg": {
1803+ "file": "tool-date-range-light-lg.png",
1804+ "width": 1920,
1805+ "height": 1080,
1806+ "bytes": 54379
1807+ },
1808+ "light": {
1809+ "file": "tool-date-range-light.png",
1810+ "width": 960,
1811+ "height": 540,
1812+ "bytes": 27794
1813+ }
1814+ },
1815+ "elliott-correction": {
1816+ "dark-lg": {
1817+ "file": "tool-elliott-correction-dark-lg.png",
1818+ "width": 1920,
1819+ "height": 1080,
1820+ "bytes": 54801
1821+ },
1822+ "dark": {
1823+ "file": "tool-elliott-correction-dark.png",
1824+ "width": 960,
1825+ "height": 540,
1826+ "bytes": 28535
1827+ },
1828+ "light-lg": {
1829+ "file": "tool-elliott-correction-light-lg.png",
1830+ "width": 1920,
1831+ "height": 1080,
1832+ "bytes": 53503
1833+ },
1834+ "light": {
1835+ "file": "tool-elliott-correction-light.png",
1836+ "width": 960,
1837+ "height": 540,
1838+ "bytes": 27677
1839+ }
1840+ },
1841+ "elliott-impulse": {
1842+ "dark-lg": {
1843+ "file": "tool-elliott-impulse-dark-lg.png",
1844+ "width": 1920,
1845+ "height": 1080,
1846+ "bytes": 77434
1847+ },
1848+ "dark": {
1849+ "file": "tool-elliott-impulse-dark.png",
1850+ "width": 960,
1851+ "height": 540,
1852+ "bytes": 37166
1853+ },
1854+ "light-lg": {
1855+ "file": "tool-elliott-impulse-light-lg.png",
1856+ "width": 1920,
1857+ "height": 1080,
1858+ "bytes": 74748
1859+ },
1860+ "light": {
1861+ "file": "tool-elliott-impulse-light.png",
1862+ "width": 960,
1863+ "height": 540,
1864+ "bytes": 35449
1865+ }
1866+ },
1867+ "ellipse": {
1868+ "dark-lg": {
1869+ "file": "tool-ellipse-dark-lg.png",
1870+ "width": 1920,
1871+ "height": 1080,
1872+ "bytes": 66412
1873+ },
1874+ "dark": {
1875+ "file": "tool-ellipse-dark.png",
1876+ "width": 960,
1877+ "height": 540,
1878+ "bytes": 31710
1879+ },
1880+ "light-lg": {
1881+ "file": "tool-ellipse-light-lg.png",
1882+ "width": 1920,
1883+ "height": 1080,
1884+ "bytes": 66840
1885+ },
1886+ "light": {
1887+ "file": "tool-ellipse-light.png",
1888+ "width": 960,
1889+ "height": 540,
1890+ "bytes": 31847
1891+ }
1892+ },
1893+ "extended": {
1894+ "dark-lg": {
1895+ "file": "tool-extended-dark-lg.png",
1896+ "width": 1920,
1897+ "height": 1080,
1898+ "bytes": 62115
1899+ },
1900+ "dark": {
1901+ "file": "tool-extended-dark.png",
1902+ "width": 960,
1903+ "height": 540,
1904+ "bytes": 29366
1905+ },
1906+ "light-lg": {
1907+ "file": "tool-extended-light-lg.png",
1908+ "width": 1920,
1909+ "height": 1080,
1910+ "bytes": 60617
1911+ },
1912+ "light": {
1913+ "file": "tool-extended-light.png",
1914+ "width": 960,
1915+ "height": 540,
1916+ "bytes": 28594
1917+ }
1918+ },
1919+ "fib-arcs": {
1920+ "dark-lg": {
1921+ "file": "tool-fib-arcs-dark-lg.png",
1922+ "width": 1920,
1923+ "height": 1080,
1924+ "bytes": 117978
1925+ },
1926+ "dark": {
1927+ "file": "tool-fib-arcs-dark.png",
1928+ "width": 960,
1929+ "height": 540,
1930+ "bytes": 56084
1931+ },
1932+ "light-lg": {
1933+ "file": "tool-fib-arcs-light-lg.png",
1934+ "width": 1920,
1935+ "height": 1080,
1936+ "bytes": 117330
1937+ },
1938+ "light": {
1939+ "file": "tool-fib-arcs-light.png",
1940+ "width": 960,
1941+ "height": 540,
1942+ "bytes": 56006
1943+ }
1944+ },
1945+ "fib": {
1946+ "dark-lg": {
1947+ "file": "tool-fib-dark-lg.png",
1948+ "width": 1920,
1949+ "height": 1080,
1950+ "bytes": 75398
1951+ },
1952+ "dark": {
1953+ "file": "tool-fib-dark.png",
1954+ "width": 960,
1955+ "height": 540,
1956+ "bytes": 44096
1957+ },
1958+ "light-lg": {
1959+ "file": "tool-fib-light-lg.png",
1960+ "width": 1920,
1961+ "height": 1080,
1962+ "bytes": 75017
1963+ },
1964+ "light": {
1965+ "file": "tool-fib-light.png",
1966+ "width": 960,
1967+ "height": 540,
1968+ "bytes": 44119
1969+ }
1970+ },
1971+ "fib-extension": {
1972+ "dark-lg": {
1973+ "file": "tool-fib-extension-dark-lg.png",
1974+ "width": 1920,
1975+ "height": 1080,
1976+ "bytes": 72414
1977+ },
1978+ "dark": {
1979+ "file": "tool-fib-extension-dark.png",
1980+ "width": 960,
1981+ "height": 540,
1982+ "bytes": 41900
1983+ },
1984+ "light-lg": {
1985+ "file": "tool-fib-extension-light-lg.png",
1986+ "width": 1920,
1987+ "height": 1080,
1988+ "bytes": 72310
1989+ },
1990+ "light": {
1991+ "file": "tool-fib-extension-light.png",
1992+ "width": 960,
1993+ "height": 540,
1994+ "bytes": 41973
1995+ }
1996+ },
1997+ "fib-fan": {
1998+ "dark-lg": {
1999+ "file": "tool-fib-fan-dark-lg.png",
2000+ "width": 1920,
2001+ "height": 1080,
2002+ "bytes": 129190
2003+ },
2004+ "dark": {
2005+ "file": "tool-fib-fan-dark.png",
2006+ "width": 960,
2007+ "height": 540,
2008+ "bytes": 60658
2009+ },
2010+ "light-lg": {
2011+ "file": "tool-fib-fan-light-lg.png",
2012+ "width": 1920,
2013+ "height": 1080,
2014+ "bytes": 131036
2015+ },
2016+ "light": {
2017+ "file": "tool-fib-fan-light.png",
2018+ "width": 960,
2019+ "height": 540,
2020+ "bytes": 61485
2021+ }
2022+ },
2023+ "fib-timezones": {
2024+ "dark-lg": {
2025+ "file": "tool-fib-timezones-dark-lg.png",
2026+ "width": 1920,
2027+ "height": 1080,
2028+ "bytes": 54067
2029+ },
2030+ "dark": {
2031+ "file": "tool-fib-timezones-dark.png",
2032+ "width": 960,
2033+ "height": 540,
2034+ "bytes": 26957
2035+ },
2036+ "light-lg": {
2037+ "file": "tool-fib-timezones-light-lg.png",
2038+ "width": 1920,
2039+ "height": 1080,
2040+ "bytes": 53403
2041+ },
2042+ "light": {
2043+ "file": "tool-fib-timezones-light.png",
2044+ "width": 960,
2045+ "height": 540,
2046+ "bytes": 26632
2047+ }
2048+ },
2049+ "flag": {
2050+ "dark-lg": {
2051+ "file": "tool-flag-dark-lg.png",
2052+ "width": 1920,
2053+ "height": 1080,
2054+ "bytes": 52919
2055+ },
2056+ "dark": {
2057+ "file": "tool-flag-dark.png",
2058+ "width": 960,
2059+ "height": 540,
2060+ "bytes": 26024
2061+ },
2062+ "light-lg": {
2063+ "file": "tool-flag-light-lg.png",
2064+ "width": 1920,
2065+ "height": 1080,
2066+ "bytes": 52212
2067+ },
2068+ "light": {
2069+ "file": "tool-flag-light.png",
2070+ "width": 960,
2071+ "height": 540,
2072+ "bytes": 25653
2073+ }
2074+ },
2075+ "gann-box": {
2076+ "dark-lg": {
2077+ "file": "tool-gann-box-dark-lg.png",
2078+ "width": 1920,
2079+ "height": 1080,
2080+ "bytes": 67955
2081+ },
2082+ "dark": {
2083+ "file": "tool-gann-box-dark.png",
2084+ "width": 960,
2085+ "height": 540,
2086+ "bytes": 31102
2087+ },
2088+ "light-lg": {
2089+ "file": "tool-gann-box-light-lg.png",
2090+ "width": 1920,
2091+ "height": 1080,
2092+ "bytes": 67478
2093+ },
2094+ "light": {
2095+ "file": "tool-gann-box-light.png",
2096+ "width": 960,
2097+ "height": 540,
2098+ "bytes": 31053
2099+ }
2100+ },
2101+ "gann-fan": {
2102+ "dark-lg": {
2103+ "file": "tool-gann-fan-dark-lg.png",
2104+ "width": 1920,
2105+ "height": 1080,
2106+ "bytes": 127607
2107+ },
2108+ "dark": {
2109+ "file": "tool-gann-fan-dark.png",
2110+ "width": 960,
2111+ "height": 540,
2112+ "bytes": 65341
2113+ },
2114+ "light-lg": {
2115+ "file": "tool-gann-fan-light-lg.png",
2116+ "width": 1920,
2117+ "height": 1080,
2118+ "bytes": 126596
2119+ },
2120+ "light": {
2121+ "file": "tool-gann-fan-light.png",
2122+ "width": 960,
2123+ "height": 540,
2124+ "bytes": 64645
2125+ }
2126+ },
2127+ "head-shoulders": {
2128+ "dark-lg": {
2129+ "file": "tool-head-shoulders-dark-lg.png",
2130+ "width": 1920,
2131+ "height": 1080,
2132+ "bytes": 88613
2133+ },
2134+ "dark": {
2135+ "file": "tool-head-shoulders-dark.png",
2136+ "width": 960,
2137+ "height": 540,
2138+ "bytes": 42083
2139+ },
2140+ "light-lg": {
2141+ "file": "tool-head-shoulders-light-lg.png",
2142+ "width": 1920,
2143+ "height": 1080,
2144+ "bytes": 88017
2145+ },
2146+ "light": {
2147+ "file": "tool-head-shoulders-light.png",
2148+ "width": 960,
2149+ "height": 540,
2150+ "bytes": 41701
2151+ }
2152+ },
2153+ "hline": {
2154+ "dark-lg": {
2155+ "file": "tool-hline-dark-lg.png",
2156+ "width": 1920,
2157+ "height": 1080,
2158+ "bytes": 50805
2159+ },
2160+ "dark": {
2161+ "file": "tool-hline-dark.png",
2162+ "width": 960,
2163+ "height": 540,
2164+ "bytes": 24318
2165+ },
2166+ "light-lg": {
2167+ "file": "tool-hline-light-lg.png",
2168+ "width": 1920,
2169+ "height": 1080,
2170+ "bytes": 50145
2171+ },
2172+ "light": {
2173+ "file": "tool-hline-light.png",
2174+ "width": 960,
2175+ "height": 540,
2176+ "bytes": 23971
2177+ }
2178+ },
2179+ "hray": {
2180+ "dark-lg": {
2181+ "file": "tool-hray-dark-lg.png",
2182+ "width": 1920,
2183+ "height": 1080,
2184+ "bytes": 50769
2185+ },
2186+ "dark": {
2187+ "file": "tool-hray-dark.png",
2188+ "width": 960,
2189+ "height": 540,
2190+ "bytes": 24299
2191+ },
2192+ "light-lg": {
2193+ "file": "tool-hray-light-lg.png",
2194+ "width": 1920,
2195+ "height": 1080,
2196+ "bytes": 50109
2197+ },
2198+ "light": {
2199+ "file": "tool-hray-light.png",
2200+ "width": 960,
2201+ "height": 540,
2202+ "bytes": 23953
2203+ }
2204+ },
2205+ "long": {
2206+ "dark-lg": {
2207+ "file": "tool-long-dark-lg.png",
2208+ "width": 1920,
2209+ "height": 1080,
2210+ "bytes": 71087
2211+ },
2212+ "dark": {
2213+ "file": "tool-long-dark.png",
2214+ "width": 960,
2215+ "height": 540,
2216+ "bytes": 43144
2217+ },
2218+ "light-lg": {
2219+ "file": "tool-long-light-lg.png",
2220+ "width": 1920,
2221+ "height": 1080,
2222+ "bytes": 70732
2223+ },
2224+ "light": {
2225+ "file": "tool-long-light.png",
2226+ "width": 960,
2227+ "height": 540,
2228+ "bytes": 42994
2229+ }
2230+ },
2231+ "measure": {
2232+ "dark-lg": {
2233+ "file": "tool-measure-dark-lg.png",
2234+ "width": 1920,
2235+ "height": 1080,
2236+ "bytes": 60755
2237+ },
2238+ "dark": {
2239+ "file": "tool-measure-dark.png",
2240+ "width": 960,
2241+ "height": 540,
2242+ "bytes": 32697
2243+ },
2244+ "light-lg": {
2245+ "file": "tool-measure-light-lg.png",
2246+ "width": 1920,
2247+ "height": 1080,
2248+ "bytes": 60248
2249+ },
2250+ "light": {
2251+ "file": "tool-measure-light.png",
2252+ "width": 960,
2253+ "height": 540,
2254+ "bytes": 32433
2255+ }
2256+ },
2257+ "mschiff": {
2258+ "dark-lg": {
2259+ "file": "tool-mschiff-dark-lg.png",
2260+ "width": 1920,
2261+ "height": 1080,
2262+ "bytes": 83897
2263+ },
2264+ "dark": {
2265+ "file": "tool-mschiff-dark.png",
2266+ "width": 960,
2267+ "height": 540,
2268+ "bytes": 39347
2269+ },
2270+ "light-lg": {
2271+ "file": "tool-mschiff-light-lg.png",
2272+ "width": 1920,
2273+ "height": 1080,
2274+ "bytes": 83815
2275+ },
2276+ "light": {
2277+ "file": "tool-mschiff-light.png",
2278+ "width": 960,
2279+ "height": 540,
2280+ "bytes": 38830
2281+ }
2282+ },
2283+ "path": {
2284+ "dark-lg": {
2285+ "file": "tool-path-dark-lg.png",
2286+ "width": 1920,
2287+ "height": 1080,
2288+ "bytes": 71586
2289+ },
2290+ "dark": {
2291+ "file": "tool-path-dark.png",
2292+ "width": 960,
2293+ "height": 540,
2294+ "bytes": 33888
2295+ },
2296+ "light-lg": {
2297+ "file": "tool-path-light-lg.png",
2298+ "width": 1920,
2299+ "height": 1080,
2300+ "bytes": 70653
2301+ },
2302+ "light": {
2303+ "file": "tool-path-light.png",
2304+ "width": 960,
2305+ "height": 540,
2306+ "bytes": 33466
2307+ }
2308+ },
2309+ "pitchfork": {
2310+ "dark-lg": {
2311+ "file": "tool-pitchfork-dark-lg.png",
2312+ "width": 1920,
2313+ "height": 1080,
2314+ "bytes": 93219
2315+ },
2316+ "dark": {
2317+ "file": "tool-pitchfork-dark.png",
2318+ "width": 960,
2319+ "height": 540,
2320+ "bytes": 43727
2321+ },
2322+ "light-lg": {
2323+ "file": "tool-pitchfork-light-lg.png",
2324+ "width": 1920,
2325+ "height": 1080,
2326+ "bytes": 93482
2327+ },
2328+ "light": {
2329+ "file": "tool-pitchfork-light.png",
2330+ "width": 960,
2331+ "height": 540,
2332+ "bytes": 43872
2333+ }
2334+ },
2335+ "price-label": {
2336+ "dark-lg": {
2337+ "file": "tool-price-label-dark-lg.png",
2338+ "width": 1920,
2339+ "height": 1080,
2340+ "bytes": 52426
2341+ },
2342+ "dark": {
2343+ "file": "tool-price-label-dark.png",
2344+ "width": 960,
2345+ "height": 540,
2346+ "bytes": 25876
2347+ },
2348+ "light-lg": {
2349+ "file": "tool-price-label-light-lg.png",
2350+ "width": 1920,
2351+ "height": 1080,
2352+ "bytes": 51769
2353+ },
2354+ "light": {
2355+ "file": "tool-price-label-light.png",
2356+ "width": 960,
2357+ "height": 540,
2358+ "bytes": 25569
2359+ }
2360+ },
2361+ "price-range": {
2362+ "dark-lg": {
2363+ "file": "tool-price-range-dark-lg.png",
2364+ "width": 1920,
2365+ "height": 1080,
2366+ "bytes": 58210
2367+ },
2368+ "dark": {
2369+ "file": "tool-price-range-dark.png",
2370+ "width": 960,
2371+ "height": 540,
2372+ "bytes": 29915
2373+ },
2374+ "light-lg": {
2375+ "file": "tool-price-range-light-lg.png",
2376+ "width": 1920,
2377+ "height": 1080,
2378+ "bytes": 57885
2379+ },
2380+ "light": {
2381+ "file": "tool-price-range-light.png",
2382+ "width": 960,
2383+ "height": 540,
2384+ "bytes": 29712
2385+ }
2386+ },
2387+ "ray": {
2388+ "dark-lg": {
2389+ "file": "tool-ray-dark-lg.png",
2390+ "width": 1920,
2391+ "height": 1080,
2392+ "bytes": 62669
2393+ },
2394+ "dark": {
2395+ "file": "tool-ray-dark.png",
2396+ "width": 960,
2397+ "height": 540,
2398+ "bytes": 29362
2399+ },
2400+ "light-lg": {
2401+ "file": "tool-ray-light-lg.png",
2402+ "width": 1920,
2403+ "height": 1080,
2404+ "bytes": 62067
2405+ },
2406+ "light": {
2407+ "file": "tool-ray-light.png",
2408+ "width": 960,
2409+ "height": 540,
2410+ "bytes": 29059
2411+ }
2412+ },
2413+ "rect": {
2414+ "dark-lg": {
2415+ "file": "tool-rect-dark-lg.png",
2416+ "width": 1920,
2417+ "height": 1080,
2418+ "bytes": 52394
2419+ },
2420+ "dark": {
2421+ "file": "tool-rect-dark.png",
2422+ "width": 960,
2423+ "height": 540,
2424+ "bytes": 25736
2425+ },
2426+ "light-lg": {
2427+ "file": "tool-rect-light-lg.png",
2428+ "width": 1920,
2429+ "height": 1080,
2430+ "bytes": 51744
2431+ },
2432+ "light": {
2433+ "file": "tool-rect-light.png",
2434+ "width": 960,
2435+ "height": 540,
2436+ "bytes": 25397
2437+ }
2438+ },
2439+ "regression": {
2440+ "dark-lg": {
2441+ "file": "tool-regression-dark-lg.png",
2442+ "width": 1920,
2443+ "height": 1080,
2444+ "bytes": 89209
2445+ },
2446+ "dark": {
2447+ "file": "tool-regression-dark.png",
2448+ "width": 960,
2449+ "height": 540,
2450+ "bytes": 44032
2451+ },
2452+ "light-lg": {
2453+ "file": "tool-regression-light-lg.png",
2454+ "width": 1920,
2455+ "height": 1080,
2456+ "bytes": 88749
2457+ },
2458+ "light": {
2459+ "file": "tool-regression-light.png",
2460+ "width": 960,
2461+ "height": 540,
2462+ "bytes": 43816
2463+ }
2464+ },
2465+ "schiff": {
2466+ "dark-lg": {
2467+ "file": "tool-schiff-dark-lg.png",
2468+ "width": 1920,
2469+ "height": 1080,
2470+ "bytes": 73248
2471+ },
2472+ "dark": {
2473+ "file": "tool-schiff-dark.png",
2474+ "width": 960,
2475+ "height": 540,
2476+ "bytes": 36538
2477+ },
2478+ "light-lg": {
2479+ "file": "tool-schiff-light-lg.png",
2480+ "width": 1920,
2481+ "height": 1080,
2482+ "bytes": 72730
2483+ },
2484+ "light": {
2485+ "file": "tool-schiff-light.png",
2486+ "width": 960,
2487+ "height": 540,
2488+ "bytes": 36160
2489+ }
2490+ },
2491+ "short": {
2492+ "dark-lg": {
2493+ "file": "tool-short-dark-lg.png",
2494+ "width": 1920,
2495+ "height": 1080,
2496+ "bytes": 70873
2497+ },
2498+ "dark": {
2499+ "file": "tool-short-dark.png",
2500+ "width": 960,
2501+ "height": 540,
2502+ "bytes": 43340
2503+ },
2504+ "light-lg": {
2505+ "file": "tool-short-light-lg.png",
2506+ "width": 1920,
2507+ "height": 1080,
2508+ "bytes": 70487
2509+ },
2510+ "light": {
2511+ "file": "tool-short-light.png",
2512+ "width": 960,
2513+ "height": 540,
2514+ "bytes": 43182
2515+ }
2516+ },
2517+ "text": {
2518+ "dark-lg": {
2519+ "file": "tool-text-dark-lg.png",
2520+ "width": 1920,
2521+ "height": 1080,
2522+ "bytes": 53444
2523+ },
2524+ "dark": {
2525+ "file": "tool-text-dark.png",
2526+ "width": 960,
2527+ "height": 540,
2528+ "bytes": 26770
2529+ },
2530+ "light-lg": {
2531+ "file": "tool-text-light-lg.png",
2532+ "width": 1920,
2533+ "height": 1080,
2534+ "bytes": 52555
2535+ },
2536+ "light": {
2537+ "file": "tool-text-light.png",
2538+ "width": 960,
2539+ "height": 540,
2540+ "bytes": 26202
2541+ }
2542+ },
2543+ "trendline": {
2544+ "dark-lg": {
2545+ "file": "tool-trendline-dark-lg.png",
2546+ "width": 1920,
2547+ "height": 1080,
2548+ "bytes": 53664
2549+ },
2550+ "dark": {
2551+ "file": "tool-trendline-dark.png",
2552+ "width": 960,
2553+ "height": 540,
2554+ "bytes": 25644
2555+ },
2556+ "light-lg": {
2557+ "file": "tool-trendline-light-lg.png",
2558+ "width": 1920,
2559+ "height": 1080,
2560+ "bytes": 53001
2561+ },
2562+ "light": {
2563+ "file": "tool-trendline-light.png",
2564+ "width": 960,
2565+ "height": 540,
2566+ "bytes": 25276
2567+ }
2568+ },
2569+ "triangle": {
2570+ "dark-lg": {
2571+ "file": "tool-triangle-dark-lg.png",
2572+ "width": 1920,
2573+ "height": 1080,
2574+ "bytes": 66394
2575+ },
2576+ "dark": {
2577+ "file": "tool-triangle-dark.png",
2578+ "width": 960,
2579+ "height": 540,
2580+ "bytes": 31256
2581+ },
2582+ "light-lg": {
2583+ "file": "tool-triangle-light-lg.png",
2584+ "width": 1920,
2585+ "height": 1080,
2586+ "bytes": 64484
2587+ },
2588+ "light": {
2589+ "file": "tool-triangle-light.png",
2590+ "width": 960,
2591+ "height": 540,
2592+ "bytes": 30435
2593+ }
2594+ },
2595+ "vline": {
2596+ "dark-lg": {
2597+ "file": "tool-vline-dark-lg.png",
2598+ "width": 1920,
2599+ "height": 1080,
2600+ "bytes": 54743
2601+ },
2602+ "dark": {
2603+ "file": "tool-vline-dark.png",
2604+ "width": 960,
2605+ "height": 540,
2606+ "bytes": 27977
2607+ },
2608+ "light-lg": {
2609+ "file": "tool-vline-light-lg.png",
2610+ "width": 1920,
2611+ "height": 1080,
2612+ "bytes": 54021
2613+ },
2614+ "light": {
2615+ "file": "tool-vline-light.png",
2616+ "width": 960,
2617+ "height": 540,
2618+ "bytes": 27536
2619+ }
2620+ },
2621+ "vrange": {
2622+ "dark-lg": {
2623+ "file": "tool-vrange-dark-lg.png",
2624+ "width": 1920,
2625+ "height": 1080,
2626+ "bytes": 54960
2627+ },
2628+ "dark": {
2629+ "file": "tool-vrange-dark.png",
2630+ "width": 960,
2631+ "height": 540,
2632+ "bytes": 28144
2633+ },
2634+ "light-lg": {
2635+ "file": "tool-vrange-light-lg.png",
2636+ "width": 1920,
2637+ "height": 1080,
2638+ "bytes": 54276
2639+ },
2640+ "light": {
2641+ "file": "tool-vrange-light.png",
2642+ "width": 960,
2643+ "height": 540,
2644+ "bytes": 27797
2645+ }
2646+ },
2647+ "xabcd": {
2648+ "dark-lg": {
2649+ "file": "tool-xabcd-dark-lg.png",
2650+ "width": 1920,
2651+ "height": 1080,
2652+ "bytes": 82879
2653+ },
2654+ "dark": {
2655+ "file": "tool-xabcd-dark.png",
2656+ "width": 960,
2657+ "height": 540,
2658+ "bytes": 42731
2659+ },
2660+ "light-lg": {
2661+ "file": "tool-xabcd-light-lg.png",
2662+ "width": 1920,
2663+ "height": 1080,
2664+ "bytes": 80557
2665+ },
2666+ "light": {
2667+ "file": "tool-xabcd-light.png",
2668+ "width": 960,
2669+ "height": 540,
2670+ "bytes": 41209
2671+ }
2672+ }
2673+ }
2674+}
\ No newline at end of file
added hfmarketdata/web/public/charts/thumbs/indicator-ad-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-ad-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-ad-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-ad-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-adx-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-adx-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-adx-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-adx-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-alma-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-alma-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-alma-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-alma-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-ao-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-ao-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-ao-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-ao-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-aroon-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-aroon-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-aroon-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-aroon-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-atr-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-atr-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-atr-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-atr-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-auto-fib-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-auto-fib-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-auto-fib-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-auto-fib-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-avwap-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-avwap-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-avwap-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-avwap-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-bb-pctb-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-bb-pctb-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-bb-pctb-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-bb-pctb-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-bb-width-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-bb-width-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-bb-width-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-bb-width-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-bollinger-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-bollinger-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-bollinger-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-bollinger-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-cci-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-cci-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-cci-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-cci-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-chaikin-osc-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-chaikin-osc-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-chaikin-osc-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-chaikin-osc-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-choppiness-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-choppiness-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-choppiness-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-choppiness-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-cmf-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-cmf-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-cmf-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-cmf-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-cmo-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-cmo-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-cmo-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-cmo-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-coppock-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-coppock-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-coppock-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-coppock-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-dema-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-dema-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-dema-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-dema-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-donchian-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-donchian-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-donchian-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-donchian-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-dpo-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-dpo-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-dpo-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-dpo-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-elder-ray-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-elder-ray-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-elder-ray-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-elder-ray-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-ema-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-ema-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-ema-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-ema-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-envelope-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-envelope-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-envelope-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-envelope-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-eom-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-eom-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-eom-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-eom-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-force-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-force-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-force-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-force-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-hma-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-hma-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-hma-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-hma-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-hv-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-hv-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-hv-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-hv-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-ichimoku-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-ichimoku-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-ichimoku-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-ichimoku-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-kama-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-kama-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-kama-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-kama-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-keltner-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-keltner-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-keltner-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-keltner-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-klinger-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-klinger-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-klinger-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-klinger-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-kst-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-kst-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-kst-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-kst-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-lsma-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-lsma-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-lsma-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-lsma-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-macd-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-macd-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-macd-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-macd-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-mass-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-mass-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-mass-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-mass-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-mfi-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-mfi-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-mfi-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-mfi-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-momentum-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-momentum-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-momentum-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-momentum-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-obv-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-obv-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-obv-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-obv-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-pivots-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-pivots-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-pivots-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-pivots-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-psar-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-psar-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-psar-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-psar-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-roc-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-roc-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-roc-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-roc-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-rsi-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-rsi-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-rsi-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-rsi-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-rvi-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-rvi-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-rvi-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-rvi-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-sma-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-sma-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-sma-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-sma-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-stddev-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-stddev-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-stddev-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-stddev-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-stoch-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-stoch-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-stoch-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-stoch-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-stochrsi-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-stochrsi-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-stochrsi-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-stochrsi-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-supertrend-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-supertrend-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-supertrend-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-supertrend-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-tema-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-tema-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-tema-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-tema-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-trix-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-trix-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-trix-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-trix-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-tsi-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-tsi-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-tsi-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-tsi-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-ultimate-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-ultimate-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-ultimate-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-ultimate-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-volume-ma-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-volume-ma-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-volume-ma-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-volume-ma-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-volume-osc-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-volume-osc-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-volume-osc-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-volume-osc-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-volume-profile-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-volume-profile-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-volume-profile-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-volume-profile-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-vortex-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-vortex-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-vortex-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-vortex-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-vwap-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-vwap-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-vwap-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-vwap-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-williams-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-williams-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-williams-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-williams-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-wma-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-wma-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-wma-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-wma-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-zigzag-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-zigzag-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-zigzag-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/indicator-zigzag-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-arrow-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-arrow-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-arrow-down-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-arrow-down-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-arrow-down-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-arrow-down-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-arrow-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-arrow-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-arrow-up-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-arrow-up-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-arrow-up-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-arrow-up-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-brush-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-brush-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-brush-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-brush-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-callout-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-callout-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-callout-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-callout-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-channel-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-channel-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-channel-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-channel-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-cross-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-cross-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-cross-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-cross-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-date-price-range-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-date-price-range-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-date-price-range-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-date-price-range-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-date-range-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-date-range-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-date-range-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-date-range-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-elliott-correction-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-elliott-correction-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-elliott-correction-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-elliott-correction-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-elliott-impulse-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-elliott-impulse-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-elliott-impulse-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-elliott-impulse-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-ellipse-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-ellipse-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-ellipse-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-ellipse-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-extended-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-extended-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-extended-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-extended-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-fib-arcs-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-fib-arcs-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-fib-arcs-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-fib-arcs-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-fib-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-fib-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-fib-extension-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-fib-extension-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-fib-extension-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-fib-extension-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-fib-fan-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-fib-fan-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-fib-fan-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-fib-fan-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-fib-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-fib-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-fib-timezones-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-fib-timezones-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-fib-timezones-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-fib-timezones-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-flag-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-flag-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-flag-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-flag-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-gann-box-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-gann-box-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-gann-box-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-gann-box-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-gann-fan-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-gann-fan-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-gann-fan-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-gann-fan-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-head-shoulders-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-head-shoulders-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-head-shoulders-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-head-shoulders-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-hline-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-hline-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-hline-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-hline-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-hray-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-hray-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-hray-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-hray-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-long-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-long-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-long-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-long-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-measure-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-measure-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-measure-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-measure-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-mschiff-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-mschiff-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-mschiff-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-mschiff-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-path-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-path-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-path-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-path-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-pitchfork-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-pitchfork-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-pitchfork-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-pitchfork-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-price-label-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-price-label-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-price-label-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-price-label-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-price-range-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-price-range-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-price-range-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-price-range-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-ray-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-ray-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-ray-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-ray-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-rect-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-rect-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-rect-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-rect-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-regression-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-regression-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-regression-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-regression-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-schiff-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-schiff-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-schiff-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-schiff-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-short-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-short-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-short-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-short-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-text-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-text-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-text-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-text-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-trendline-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-trendline-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-trendline-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-trendline-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-triangle-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-triangle-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-triangle-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-triangle-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-vline-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-vline-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-vline-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-vline-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-vrange-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-vrange-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-vrange-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-vrange-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-xabcd-dark-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-xabcd-dark.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-xabcd-light-lg.png +0 −0

Binary file not shown.

added hfmarketdata/web/public/charts/thumbs/tool-xabcd-light.png +0 −0

Binary file not shown.

added hfmarketdata/web/scripts/charts-thumbs.mjs +119 −0
@@ -0,0 +1,119 @@
1+#!/usr/bin/env node
2+// Generates the encyclopedia thumbnails with OUR chart engine (never an external image): for each of the 60 indicators
3+// and 42 drawing tools, the same designed daily series rendered by dev/charts-thumbs.html (Playwright, DPR 2) in
4+// dark AND light theme, two sizes — 480×270 CSS px (library cards, flyout tooltips) and 960×540 (docs pages, OG
5+// image). Output: public/charts/thumbs/<indicator|tool>-<id>-<dark|light>[-lg].png + index.json (manifest).
6+//
7+// Usage: npm run charts:thumbs [-- --only=rsi,fib --kind=indicator|tool --themes=dark,light --sizes=sm,lg --port=4181]
8+// Idempotent: every file is rewritten; the manifest lists what exists.
9+
10+import { spawn } from 'node:child_process'
11+import { mkdirSync, readdirSync, statSync, writeFileSync } from 'node:fs'
12+import { dirname, join, resolve } from 'node:path'
13+import { fileURLToPath } from 'node:url'
14+import { chromium } from '@playwright/test'
15+import { INDICATOR_TYPES } from '../src/charts/indicators/index.js'
16+import { TOOLS } from '../src/charts/engine/drawings/model.js'
17+
18+const here = dirname(fileURLToPath(import.meta.url))
19+const webDir = resolve(here, '..')
20+const args = Object.fromEntries(process.argv.slice(2).filter(a => a.startsWith('--')).map(a => { const [k, v] = a.slice(2).split('='); return [k, v ?? '1'] }))
21+const PORT = Number(args.port || 4181)
22+const OUT = args.out || join(webDir, 'public', 'charts', 'thumbs')
23+const ONLY = args.only ? new Set(args.only.split(',')) : null
24+const KIND = args.kind || null
25+const THEMES = (args.themes || 'dark,light').split(',')
26+const SIZES = { sm: [480, 270], lg: [960, 540] }
27+const SIZE_KEYS = (args.sizes || 'sm,lg').split(',').filter(s => SIZES[s])
28+mkdirSync(OUT, { recursive: true })
29+
30+const HARNESS = `http://localhost:${PORT}/dev/charts-thumbs.html`
31+
32+function startVite() {
33+ const child = spawn('npx', ['vite', '--port', String(PORT), '--strictPort', '--clearScreen', 'false'], { cwd: webDir, stdio: ['ignore', 'pipe', 'pipe'] })
34+ child.stdout.on('data', d => { if (process.env.DEBUG) process.stdout.write(d) })
35+ child.stderr.on('data', d => process.stderr.write(d))
36+ return child
37+}
38+async function waitFor(url, ms = 30_000) {
39+ const t0 = Date.now()
40+ while (Date.now() - t0 < ms) {
41+ try { const r = await fetch(url); if (r.ok) return } catch { /* not yet */ }
42+ await new Promise(r => setTimeout(r, 250))
43+ }
44+ throw new Error(`Vite did not start on ${url}`)
45+}
46+
47+/** Rendering hints from the encyclopedia (optional: the catalogue may not be written yet). */
48+async function hints() {
49+ const out = {}
50+ try {
51+ const m = await import('../src/charts/catalog/indicators/all.js')
52+ for (const e of m.INDICATOR_ENTRIES) if (e.thumb) out[e.id] = e.thumb
53+ } catch (e) { console.warn(`(no catalogue hints: ${e.message.split('\n')[0]})`) }
54+ return out
55+}
56+
57+async function main() {
58+ const vite = startVite()
59+ const stop = () => { try { vite.kill('SIGTERM') } catch { /* ignore */ } }
60+ process.on('exit', stop); process.on('SIGINT', () => { stop(); process.exit(130) })
61+ const t0 = Date.now()
62+ try {
63+ await waitFor(HARNESS)
64+ const thumbHints = await hints()
65+ const browser = await chromium.launch()
66+ const ctx = await browser.newContext({ viewport: { width: 1100, height: 700 }, deviceScaleFactor: 2 })
67+ const page = await ctx.newPage()
68+ const errors = []
69+ page.on('pageerror', e => errors.push(String(e)))
70+ page.on('console', m => { if (m.type() === 'error') errors.push(m.text()) })
71+ await page.goto(HARNESS, { waitUntil: 'networkidle' })
72+ await page.waitForFunction(() => window.__thumb)
73+
74+ const jobs = []
75+ if (KIND !== 'tool') for (const id of INDICATOR_TYPES) if (!ONLY || ONLY.has(id)) jobs.push({ kind: 'indicator', id })
76+ if (KIND !== 'indicator') for (const id of TOOLS) if (!ONLY || ONLY.has(id)) jobs.push({ kind: 'tool', id })
77+
78+ const manifest = { generated: new Date().toISOString(), dpr: 2, sizes: SIZES, themes: THEMES, indicators: {}, tools: {} }
79+ let count = 0, bytes = 0
80+ for (const job of jobs) {
81+ const hint = job.kind === 'indicator' ? thumbHints[job.id] || {} : {}
82+ const files = {}
83+ for (const size of SIZE_KEYS) {
84+ const [w, h] = SIZES[size]
85+ for (const theme of THEMES) {
86+ const res = await page.evaluate(o => window.__thumb.render(o), { kind: job.kind, id: job.id, theme, w, h, bars: hint.bars, params: hint.params, volume: hint.volume })
87+ if (!res?.ok) { errors.push(`${job.kind} ${job.id}: ${res?.error || 'render failed'}`); continue }
88+ const name = `${job.kind}-${job.id}-${theme}${size === 'lg' ? '-lg' : ''}.png`
89+ const file = join(OUT, name)
90+ await page.locator('#chart').screenshot({ path: file, animations: 'disabled' })
91+ const sz = statSync(file).size
92+ bytes += sz; count++
93+ files[`${theme}${size === 'lg' ? '-lg' : ''}`] = { file: name, width: w * 2, height: h * 2, bytes: sz }
94+ }
95+ }
96+ manifest[job.kind === 'indicator' ? 'indicators' : 'tools'][job.id] = files
97+ process.stdout.write(`${job.kind.padEnd(9)} ${job.id.padEnd(20)} ${Object.keys(files).length} file(s)\n`)
98+ }
99+ await browser.close()
100+ // Merge with files already on disk when running a subset (idempotent, partial runs keep the rest of the manifest).
101+ if (ONLY || KIND || args.themes || args.sizes) {
102+ for (const f of readdirSync(OUT).filter(f => f.endsWith('.png'))) {
103+ const m = /^(indicator|tool)-(.+?)-(dark|light)(-lg)?\.png$/.exec(f)
104+ if (!m) continue
105+ const bucket = manifest[m[1] === 'indicator' ? 'indicators' : 'tools']
106+ bucket[m[2]] = bucket[m[2]] || {}
107+ const key = `${m[3]}${m[4] || ''}`
108+ if (!bucket[m[2]][key]) { const [w, h] = SIZES[m[4] ? 'lg' : 'sm']; bucket[m[2]][key] = { file: f, width: w * 2, height: h * 2, bytes: statSync(join(OUT, f)).size } }
109+ }
110+ }
111+ writeFileSync(join(OUT, 'index.json'), JSON.stringify(manifest, null, 1))
112+ console.log(`\n${count} thumbnails · ${(bytes / 1024 / 1024).toFixed(1)} MB · ${((Date.now() - t0) / 1000).toFixed(0)} s → ${OUT}`)
113+ if (errors.length) { console.error(`${errors.length} error(s):\n ${errors.join('\n ')}`); process.exitCode = 1 }
114+ } finally {
115+ stop()
116+ }
117+}
118+
119+main().catch(e => { console.error(e); process.exit(1) })
120
Menu

Theme