SPB Git forge

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)

127commits 1branches 0releases
24.7 MBsize
maindefault branch
11 days agolast push
JavaScript 53.7% Python 38.3% CSS 4.6% TypeScript 3.1%

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 18 days ago (Sep 7, 2026) parent fd35f89

413 changed files +3,019 −1

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 16 "test:e2e": "playwright test",
17 17 "test:e2e:ui": "playwright test --ui",
18 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 23 "dependencies": {
22 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