diff --git a/website/scripts/options/chain.js b/website/scripts/options/chain.js index afba66ee7..91d976388 100644 --- a/website/scripts/options/chain.js +++ b/website/scripts/options/chain.js @@ -968,7 +968,6 @@ export function createChainSection(ctx) { unit: Unit.ratio, base: 1, }), - priceLine({ ctx, unit: Unit.ratio, number: 1 }), ], }, ], diff --git a/website/scripts/options/constants.js b/website/scripts/options/constants.js index d43334f73..64db477eb 100644 --- a/website/scripts/options/constants.js +++ b/website/scripts/options/constants.js @@ -9,7 +9,7 @@ import { line } from "./series.js"; * @param {number} num * @returns {AnyMetricPattern} */ -function getConstant(constants, num) { +export function getConstant(constants, num) { const key = num >= 0 ? `constant${String(num).replace(".", "")}` diff --git a/website/scripts/options/distribution/shared.js b/website/scripts/options/distribution/shared.js index e33f943a7..233b3471c 100644 --- a/website/scripts/options/distribution/shared.js +++ b/website/scripts/options/distribution/shared.js @@ -300,17 +300,14 @@ export function createRealizedPriceSeries(list) { * @returns {AnyFetchedSeriesBlueprint[]} */ export function createRealizedPriceRatioSeries(ctx, list) { - return [ - ...list.map(({ name, tree }) => - baseline({ - metric: tree.realized.realizedPriceExtra.ratio, - name, - unit: Unit.ratio, - base: 1, - }), - ), - priceLine({ ctx, unit: Unit.ratio, number: 1 }), - ]; + return list.map(({ name, tree }) => + baseline({ + metric: tree.realized.realizedPriceExtra.ratio, + name, + unit: Unit.ratio, + base: 1, + }), + ); } /** diff --git a/website/scripts/options/distribution/utxo.js b/website/scripts/options/distribution/utxo.js index a34cbf890..af3899bd1 100644 --- a/website/scripts/options/distribution/utxo.js +++ b/website/scripts/options/distribution/utxo.js @@ -1106,7 +1106,6 @@ function createSingleBaseSoprChart(ctx, cohort, title) { defaultActive: false, base: 1, }), - priceLine({ ctx, number: 1, unit: Unit.ratio }), ], }; } diff --git a/website/scripts/options/full.js b/website/scripts/options/full.js index 75a2b3f43..bb8e28c23 100644 --- a/website/scripts/options/full.js +++ b/website/scripts/options/full.js @@ -5,6 +5,8 @@ import { readStored, writeToStorage } from "../utils/storage.js"; import { stringToId } from "../utils/format.js"; import { collect, markUsed, logUnused } from "./unused.js"; import { setQr } from "../panes/share.js"; +import { getConstant } from "./constants.js"; +import { colors } from "../chart/colors.js"; /** * @param {BrkClient} brk @@ -86,6 +88,9 @@ export function initOptions(brk) { function arrayToMap(arr = []) { /** @type {Map} */ const map = new Map(); + /** @type {Map>} */ + const priceLines = new Map(); + for (const blueprint of arr || []) { if (!blueprint.metric) { throw new Error( @@ -101,7 +106,38 @@ export function initOptions(brk) { map.set(unit, []); } map.get(unit)?.push(blueprint); + + // Track baseline base values for auto price lines + if (blueprint.type === "Baseline") { + const baseValue = blueprint.options?.baseValue?.price ?? 0; + if (!priceLines.has(unit)) priceLines.set(unit, new Set()); + priceLines.get(unit)?.add(baseValue); + } + + // Remove from set if manual price line already exists + if (blueprint.type === "Line") { + const path = Object.values(blueprint.metric.by)[0]?.path ?? ""; + if (path.includes("constant_")) { + priceLines.get(unit)?.delete(parseFloat(blueprint.title)); + } + } } + + // Add price lines at end for remaining values + for (const [unit, values] of priceLines) { + for (const baseValue of values) { + const metric = getConstant(brk.metrics.constants, baseValue); + markUsed(metric); + map.get(unit)?.push({ + metric, + title: `${baseValue}`, + color: colors.gray, + unit, + options: { lineStyle: 4, lastValueVisible: false, crosshairMarkerVisible: false }, + }); + } + } + return map; } diff --git a/website/scripts/options/market/indicators/onchain.js b/website/scripts/options/market/indicators/onchain.js index c72f4b870..a31311be5 100644 --- a/website/scripts/options/market/indicators/onchain.js +++ b/website/scripts/options/market/indicators/onchain.js @@ -41,7 +41,6 @@ export function createOnchainSection(ctx, { indicators, movingAverage }) { unit: Unit.ratio, base: 1, }), - priceLine({ ctx, unit: Unit.ratio, number: 1 }), ], }, {