global: renames part 2

This commit is contained in:
nym21
2026-03-13 22:42:43 +01:00
parent 0795c1bbf8
commit a0d378d06d
117 changed files with 3024 additions and 3189 deletions

View File

@@ -9,23 +9,24 @@ import { satsBtcUsd, createPriceRatioCharts } from "./shared.js";
* @returns {PartialOptionsGroup}
*/
export function createCointimeSection() {
const { cointime, distribution, supply } = brk.metrics;
const { cointime, cohorts, supply } = brk.metrics;
const {
pricing,
prices: cointimePrices,
cap,
activity,
supply: cointimeSupply,
adjusted,
reserveRisk,
value,
coinblocksDestroyed,
} = cointime;
const { all } = distribution.utxoCohorts;
const { all } = cohorts.utxo;
// Reference lines for cap comparisons
const capReferenceLines = /** @type {const} */ ([
{ metric: supply.marketCap, name: "Market", color: colors.default },
{
metric: all.realized.realizedCap,
metric: all.realized.cap.usd,
name: "Realized",
color: colors.realized,
},
@@ -33,48 +34,44 @@ export function createCointimeSection() {
const prices = /** @type {const} */ ([
{
pricePattern: pricing.trueMarketMean,
ratio: pricing.trueMarketMeanRatio,
pattern: cointimePrices.trueMarketMean,
name: "True Market Mean",
color: colors.trueMarketMean,
},
{
pricePattern: pricing.vaultedPrice,
ratio: pricing.vaultedPriceRatio,
pattern: cointimePrices.vaulted,
name: "Vaulted",
color: colors.vaulted,
},
{
pricePattern: pricing.activePrice,
ratio: pricing.activePriceRatio,
pattern: cointimePrices.active,
name: "Active",
color: colors.active,
},
{
pricePattern: pricing.cointimePrice,
ratio: pricing.cointimePriceRatio,
pattern: cointimePrices.cointime,
name: "Cointime",
color: colors.cointime,
},
]);
const caps = /** @type {const} */ ([
{ metric: cap.vaultedCap, name: "Vaulted", color: colors.vaulted },
{ metric: cap.activeCap, name: "Active", color: colors.active },
{ metric: cap.cointimeCap, name: "Cointime", color: colors.cointime },
{ metric: cap.investorCap, name: "Investor", color: colors.investor },
{ metric: cap.thermoCap, name: "Thermo", color: colors.thermo },
{ metric: cap.vaulted.usd, name: "Vaulted", color: colors.vaulted },
{ metric: cap.active.usd, name: "Active", color: colors.active },
{ metric: cap.cointime.usd, name: "Cointime", color: colors.cointime },
{ metric: cap.investor.usd, name: "Investor", color: colors.investor },
{ metric: cap.thermo.usd, name: "Thermo", color: colors.thermo },
]);
const supplyBreakdown = /** @type {const} */ ([
{ pattern: all.supply.total, name: "Total", color: colors.bitcoin },
{
pattern: cointimeSupply.vaultedSupply,
pattern: cointimeSupply.vaulted,
name: "Vaulted",
color: colors.vaulted,
},
{
pattern: cointimeSupply.activeSupply,
pattern: cointimeSupply.active,
name: "Active",
color: colors.active,
},
@@ -82,7 +79,7 @@ export function createCointimeSection() {
const coinblocks = /** @type {const} */ ([
{
pattern: all.activity.coinblocksDestroyed,
pattern: coinblocksDestroyed,
name: "Destroyed",
title: "Coinblocks Destroyed",
color: colors.destroyed,
@@ -104,19 +101,19 @@ export function createCointimeSection() {
// Colors aligned with coinblocks: Destroyed=red, Created=orange, Stored=green
const cointimeValues = /** @type {const} */ ([
{
pattern: value.cointimeValueCreated,
pattern: value.created,
name: "Created",
title: "Cointime Value Created",
color: colors.created,
},
{
pattern: value.cointimeValueDestroyed,
pattern: value.destroyed,
name: "Destroyed",
title: "Cointime Value Destroyed",
color: colors.destroyed,
},
{
pattern: value.cointimeValueStored,
pattern: value.stored,
name: "Stored",
title: "Cointime Value Stored",
color: colors.stored,
@@ -142,31 +139,31 @@ export function createCointimeSection() {
title: "Cointime Prices",
top: [
price({
metric: all.realized.realizedPrice,
metric: all.realized.price,
name: "Realized",
color: colors.realized,
}),
price({
metric: all.realized.investorPrice,
metric: all.realized.investor.price,
name: "Investor",
color: colors.investor,
}),
...prices.map(({ pricePattern, name, color }) =>
price({ metric: pricePattern, name, color }),
...prices.map(({ pattern, name, color }) =>
price({ metric: pattern, name, color }),
),
],
},
...prices.map(({ pricePattern, ratio, name, color }) => ({
...prices.map(({ pattern, name, color }) => ({
name,
tree: createPriceRatioCharts({
context: `${name} Price`,
legend: name,
pricePattern,
ratio,
pricePattern: pattern,
ratio: pattern,
color,
priceReferences: [
price({
metric: all.realized.realizedPrice,
metric: all.realized.price,
name: "Realized",
color: colors.realized,
defaultActive: false,
@@ -238,7 +235,7 @@ export function createCointimeSection() {
unit: Unit.ratio,
}),
line({
metric: activity.activityToVaultednessRatio,
metric: activity.ratio,
name: "L/V Ratio",
color: colors.activity,
unit: Unit.ratio,
@@ -259,7 +256,7 @@ export function createCointimeSection() {
title: "Coinblocks",
bottom: coinblocks.map(({ pattern, name, color }) =>
line({
metric: pattern.height,
metric: pattern.base,
name,
color,
unit: Unit.coinblocks,
@@ -288,7 +285,7 @@ export function createCointimeSection() {
title,
bottom: [
line({
metric: pattern.height,
metric: pattern.base,
name,
color,
unit: Unit.coinblocks,
@@ -325,10 +322,10 @@ export function createCointimeSection() {
title: "Cointime Value",
bottom: [
...cointimeValues.map(({ pattern, name, color }) =>
line({ metric: pattern.height, name, color, unit: Unit.usd }),
line({ metric: pattern.base, name, color, unit: Unit.usd }),
),
line({
metric: vocdd.pattern.height,
metric: vocdd.pattern.base,
name: vocdd.name,
color: vocdd.color,
unit: Unit.usd,
@@ -364,7 +361,7 @@ export function createCointimeSection() {
name: "Base",
title,
bottom: [
line({ metric: pattern.height, name, color, unit: Unit.usd }),
line({ metric: pattern.base, name, color, unit: Unit.usd }),
],
},
rollingWindowsTree({ windows: pattern.sum, title, unit: Unit.usd }),
@@ -390,13 +387,13 @@ export function createCointimeSection() {
title: vocdd.title,
bottom: [
line({
metric: vocdd.pattern.height,
metric: vocdd.pattern.base,
name: vocdd.name,
color: vocdd.color,
unit: Unit.usd,
}),
line({
metric: reserveRisk.vocdd365dMedian,
metric: reserveRisk.vocddMedian1y,
name: "365d Median",
color: colors.time._1y,
unit: Unit.usd,
@@ -430,7 +427,7 @@ export function createCointimeSection() {
title: "Reserve Risk",
bottom: [
line({
metric: reserveRisk.reserveRisk,
metric: reserveRisk.value,
name: "Ratio",
color: colors.reserveRisk,
unit: Unit.ratio,
@@ -461,13 +458,13 @@ export function createCointimeSection() {
title: "Cointime-Adjusted Inflation",
bottom: [
dots({
metric: supply.inflation,
metric: supply.inflationRate.percent,
name: "Base",
color: colors.base,
unit: Unit.percentage,
}),
dots({
metric: adjusted.cointimeAdjInflationRate,
metric: adjusted.inflationRate.percent,
name: "Cointime-Adjusted",
color: colors.adjusted,
unit: Unit.percentage,
@@ -488,7 +485,7 @@ export function createCointimeSection() {
unit: Unit.ratio,
}),
line({
metric: adjusted.cointimeAdjTxBtcVelocity,
metric: adjusted.txVelocityBtc,
name: "Cointime-Adjusted",
color: colors.adjusted,
unit: Unit.ratio,
@@ -506,7 +503,7 @@ export function createCointimeSection() {
unit: Unit.ratio,
}),
line({
metric: adjusted.cointimeAdjTxUsdVelocity,
metric: adjusted.txVelocityUsd,
name: "Cointime-Adjusted",
color: colors.vaulted,
unit: Unit.ratio,

View File

@@ -1,5 +1,3 @@
/** Build cohort data arrays from brk.metrics */
import { colors } from "../../utils/colors.js";
import { entries } from "../../utils/array.js";
import { brk } from "../../client.js";
@@ -20,36 +18,34 @@ const ADDRESSABLE_TYPES = [
const isAddressable = (key) =>
ADDRESSABLE_TYPES.includes(/** @type {any} */ (key));
/**
* Build all cohort data from brk tree
*/
export function buildCohortData() {
const utxoCohorts = brk.metrics.distribution.utxoCohorts;
const addressCohorts = brk.metrics.distribution.addressCohorts;
const { addrCount } = brk.metrics.distribution;
const utxoCohorts = brk.metrics.cohorts.utxo;
const addressCohorts = brk.metrics.cohorts.address;
const { addresses } = brk.metrics;
const {
TERM_NAMES,
EPOCH_NAMES,
MAX_AGE_NAMES,
MIN_AGE_NAMES,
UNDER_AGE_NAMES,
OVER_AGE_NAMES,
AGE_RANGE_NAMES,
GE_AMOUNT_NAMES,
LT_AMOUNT_NAMES,
OVER_AMOUNT_NAMES,
UNDER_AMOUNT_NAMES,
AMOUNT_RANGE_NAMES,
SPENDABLE_TYPE_NAMES,
CLASS_NAMES,
} = brk;
// Base cohort representing "all"
const cohortAll = {
name: "",
title: "",
color: colors.bitcoin,
tree: utxoCohorts.all,
addrCount: addrCount.all,
addressCount: {
inner: addresses.funded.all,
delta: addresses.delta.all,
},
};
// Term cohorts
const shortNames = TERM_NAMES.short;
const termShort = {
name: shortNames.short,
@@ -66,141 +62,102 @@ export function buildCohortData() {
tree: utxoCohorts.lth,
};
// Max age cohorts (up to X time)
const upToDate = entries(utxoCohorts.maxAge).map(([key, tree], i, arr) => {
const names = MAX_AGE_NAMES[key];
return {
// Under age cohorts
const underAge = entries(UNDER_AGE_NAMES).map(([key, names], i, arr) => ({
name: names.short,
title: `UTXOs ${names.long}`,
color: colors.at(i, arr.length),
tree: utxoCohorts.underAge[key],
}));
// Over age cohorts
const overAge = entries(OVER_AGE_NAMES).map(([key, names], i, arr) => ({
name: names.short,
title: `UTXOs ${names.long}`,
color: colors.at(i, arr.length),
tree: utxoCohorts.overAge[key],
}));
const ageRange = entries(AGE_RANGE_NAMES).map(([key, names], i, arr) => ({
name: names.short,
title: `UTXOs ${names.long}`,
color: colors.at(i, arr.length),
tree: utxoCohorts.ageRange[key],
}));
const epoch = entries(EPOCH_NAMES).map(([key, names], i, arr) => ({
name: names.short,
title: names.long,
color: colors.at(i, arr.length),
tree: utxoCohorts.epoch[key],
}));
const utxosOverAmount = entries(OVER_AMOUNT_NAMES).map(
([key, names], i, arr) => ({
name: names.short,
title: `UTXOs ${names.long}`,
color: colors.at(i, arr.length),
tree,
};
});
// Min age cohorts (from X time)
const fromDate = entries(utxoCohorts.minAge).map(([key, tree], i, arr) => {
const names = MIN_AGE_NAMES[key];
return {
name: names.short,
title: `UTXOs ${names.long}`,
color: colors.at(i, arr.length),
tree,
};
});
// Age range cohorts
const dateRange = entries(utxoCohorts.ageRange).map(([key, tree], i, arr) => {
const names = AGE_RANGE_NAMES[key];
return {
name: names.short,
title: `UTXOs ${names.long}`,
color: colors.at(i, arr.length),
tree,
};
});
// Epoch cohorts
const epoch = entries(utxoCohorts.epoch).map(([key, tree], i, arr) => {
const names = EPOCH_NAMES[key];
return {
name: names.short,
title: names.long,
color: colors.at(i, arr.length),
tree,
};
});
// UTXOs above amount
const utxosAboveAmount = entries(utxoCohorts.geAmount).map(
([key, tree], i, arr) => {
const names = GE_AMOUNT_NAMES[key];
return {
name: names.short,
title: `UTXOs ${names.long}`,
color: colors.at(i, arr.length),
tree,
};
},
tree: utxoCohorts.overAmount[key],
}),
);
// Addresses above amount
const addressesAboveAmount = entries(addressCohorts.geAmount).map(
([key, cohort], i, arr) => {
const names = GE_AMOUNT_NAMES[key];
const addressesOverAmount = entries(OVER_AMOUNT_NAMES).map(
([key, names], i, arr) => {
const cohort = addressCohorts.overAmount[key];
return {
name: names.short,
title: `Addresses ${names.long}`,
color: colors.at(i, arr.length),
tree: cohort,
addrCount: {
count: cohort.addrCount,
_30dChange: cohort.addrCount30dChange,
},
addressCount: cohort.addressCount,
};
},
);
// UTXOs under amount
const utxosUnderAmount = entries(utxoCohorts.ltAmount).map(
([key, tree], i, arr) => {
const names = LT_AMOUNT_NAMES[key];
return {
name: names.short,
title: `UTXOs ${names.long}`,
color: colors.at(i, arr.length),
tree,
};
},
const utxosUnderAmount = entries(UNDER_AMOUNT_NAMES).map(
([key, names], i, arr) => ({
name: names.short,
title: `UTXOs ${names.long}`,
color: colors.at(i, arr.length),
tree: utxoCohorts.underAmount[key],
}),
);
// Addresses under amount
const addressesUnderAmount = entries(addressCohorts.ltAmount).map(
([key, cohort], i, arr) => {
const names = LT_AMOUNT_NAMES[key];
const addressesUnderAmount = entries(UNDER_AMOUNT_NAMES).map(
([key, names], i, arr) => {
const cohort = addressCohorts.underAmount[key];
return {
name: names.short,
title: `Addresses ${names.long}`,
color: colors.at(i, arr.length),
tree: cohort,
addrCount: {
count: cohort.addrCount,
_30dChange: cohort.addrCount30dChange,
},
addressCount: cohort.addressCount,
};
},
);
// UTXOs amount ranges
const utxosAmountRanges = entries(utxoCohorts.amountRange).map(
([key, tree], i, arr) => {
const names = AMOUNT_RANGE_NAMES[key];
return {
name: names.short,
title: `UTXOs ${names.long}`,
color: colors.at(i, arr.length),
tree,
};
},
const utxosAmountRange = entries(AMOUNT_RANGE_NAMES).map(
([key, names], i, arr) => ({
name: names.short,
title: `UTXOs ${names.long}`,
color: colors.at(i, arr.length),
tree: utxoCohorts.amountRange[key],
}),
);
// Addresses amount ranges
const addressesAmountRanges = entries(addressCohorts.amountRange).map(
([key, cohort], i, arr) => {
const names = AMOUNT_RANGE_NAMES[key];
const addressesAmountRange = entries(AMOUNT_RANGE_NAMES).map(
([key, names], i, arr) => {
const cohort = addressCohorts.amountRange[key];
return {
name: names.short,
title: `Addresses ${names.long}`,
color: colors.at(i, arr.length),
tree: cohort,
addrCount: {
count: cohort.addrCount,
_30dChange: cohort.addrCount30dChange,
},
addressCount: cohort.addressCount,
};
},
);
// Spendable type cohorts - split by addressability
const typeAddressable = ADDRESSABLE_TYPES.map((key, i, arr) => {
const names = SPENDABLE_TYPE_NAMES[key];
return {
@@ -208,49 +165,45 @@ export function buildCohortData() {
title: names.short,
color: colors.at(i, arr.length),
tree: utxoCohorts.type[key],
addrCount: addrCount[key],
addressCount: {
inner: addresses.funded[key],
delta: addresses.delta[key],
},
};
});
const typeOther = entries(utxoCohorts.type)
const typeOther = entries(SPENDABLE_TYPE_NAMES)
.filter(([key]) => !isAddressable(key))
.map(([key, tree], i, arr) => {
const names = SPENDABLE_TYPE_NAMES[key];
return {
name: names.short,
title: names.short,
color: colors.at(i, arr.length),
tree,
};
});
.map(([key, names], i, arr) => ({
name: names.short,
title: names.short,
color: colors.at(i, arr.length),
tree: utxoCohorts.type[key],
}));
// Class cohorts
const class_ = entries(utxoCohorts.class)
const class_ = entries(CLASS_NAMES)
.reverse()
.map(([key, tree], i, arr) => {
const names = CLASS_NAMES[key];
return {
name: names.short,
title: names.long,
color: colors.at(i, arr.length),
tree,
};
});
.map(([key, names], i, arr) => ({
name: names.short,
title: names.long,
color: colors.at(i, arr.length),
tree: utxoCohorts.class[key],
}));
return {
cohortAll,
termShort,
termLong,
upToDate,
fromDate,
dateRange,
underAge,
overAge,
ageRange,
epoch,
utxosAboveAmount,
addressesAboveAmount,
utxosOverAmount,
addressesOverAmount,
utxosUnderAmount,
addressesUnderAmount,
utxosAmountRanges,
addressesAmountRanges,
utxosAmountRange,
addressesAmountRange,
typeAddressable,
typeOther,
class: class_,

View File

@@ -211,7 +211,7 @@ function singleAddressCountChart(cohort, title) {
title: title("Address Count"),
bottom: [
line({
metric: cohort.addrCount.count,
metric: cohort.addressCount.inner,
name: "Address Count",
color: cohort.color,
unit: Unit.count,
@@ -299,7 +299,7 @@ function createSingleUtxoCount30dChangeSeries(cohort) {
function createSingleAddrCount30dChangeSeries(cohort) {
return [
baseline({
metric: cohort.addrCount._30dChange,
metric: cohort.addressCount.delta.change._1m,
name: "30d Change",
unit: Unit.count,
}),
@@ -580,8 +580,8 @@ export function createGroupedHoldingsSectionAddress({ list, all, title }) {
{
name: "Address Count",
title: title("Address Count"),
bottom: mapCohortsWithAll(list, all, ({ name, color, addrCount }) =>
line({ metric: addrCount.count, name, color, unit: Unit.count }),
bottom: mapCohortsWithAll(list, all, ({ name, color, addressCount }) =>
line({ metric: addressCount.inner, name, color, unit: Unit.count }),
),
},
{
@@ -592,9 +592,9 @@ export function createGroupedHoldingsSectionAddress({ list, all, title }) {
{
name: "Address Count",
title: title("Address Count 30d Change"),
bottom: mapCohortsWithAll(list, all, ({ name, color, addrCount }) =>
bottom: mapCohortsWithAll(list, all, ({ name, color, addressCount }) =>
baseline({
metric: addrCount._30dChange,
metric: addressCount.delta.change._1m,
name,
unit: Unit.count,
color,
@@ -706,8 +706,8 @@ export function createGroupedHoldingsSectionAddressAmount({
{
name: "Address Count",
title: title("Address Count"),
bottom: mapCohortsWithAll(list, all, ({ name, color, addrCount }) =>
line({ metric: addrCount.count, name, color, unit: Unit.count }),
bottom: mapCohortsWithAll(list, all, ({ name, color, addressCount }) =>
line({ metric: addressCount.inner, name, color, unit: Unit.count }),
),
},
{
@@ -718,9 +718,9 @@ export function createGroupedHoldingsSectionAddressAmount({
{
name: "Address Count",
title: title("Address Count 30d Change"),
bottom: mapCohortsWithAll(list, all, ({ name, color, addrCount }) =>
bottom: mapCohortsWithAll(list, all, ({ name, color, addressCount }) =>
baseline({
metric: addrCount._30dChange,
metric: addressCount.delta.change._1m,
name,
unit: Unit.count,
color,

View File

@@ -39,16 +39,16 @@ export function createPartialOptions() {
cohortAll,
termShort,
termLong,
upToDate,
fromDate,
dateRange,
underAge,
overAge,
ageRange,
epoch,
utxosAboveAmount,
addressesAboveAmount,
utxosOverAmount,
addressesOverAmount,
utxosUnderAmount,
addressesUnderAmount,
utxosAmountRanges,
addressesAmountRanges,
utxosAmountRange,
addressesAmountRange,
typeAddressable,
typeOther,
class: class_,
@@ -99,11 +99,11 @@ export function createPartialOptions() {
tree: [
createGroupedCohortFolderWithAdjusted({
name: "Compare",
title: "Max Age",
list: upToDate,
title: "Under Age",
list: underAge,
all: cohortAll,
}),
...upToDate.map(createCohortFolderWithAdjusted),
...underAge.map(createCohortFolderWithAdjusted),
],
},
// Older Than (≥ X old)
@@ -112,11 +112,11 @@ export function createPartialOptions() {
tree: [
createGroupedCohortFolderBasicWithMarketCap({
name: "Compare",
title: "Min Age",
list: fromDate,
title: "Over Age",
list: overAge,
all: cohortAll,
}),
...fromDate.map(createCohortFolderBasicWithMarketCap),
...overAge.map(createCohortFolderBasicWithMarketCap),
],
},
// Range
@@ -126,10 +126,10 @@ export function createPartialOptions() {
createGroupedCohortFolderAgeRange({
name: "Compare",
title: "Age Ranges",
list: dateRange,
list: ageRange,
all: cohortAll,
}),
...dateRange.map(createCohortFolderAgeRange),
...ageRange.map(createCohortFolderAgeRange),
],
},
],
@@ -145,7 +145,7 @@ export function createPartialOptions() {
tree: [
createGroupedCohortFolderBasicWithMarketCap({
name: "Compare",
title: "Max Size",
title: "Over Amount",
list: utxosUnderAmount,
all: cohortAll,
}),
@@ -158,11 +158,11 @@ export function createPartialOptions() {
tree: [
createGroupedCohortFolderBasicWithMarketCap({
name: "Compare",
title: "Min Size",
list: utxosAboveAmount,
title: "Under Amount",
list: utxosOverAmount,
all: cohortAll,
}),
...utxosAboveAmount.map(createCohortFolderBasicWithMarketCap),
...utxosOverAmount.map(createCohortFolderBasicWithMarketCap),
],
},
// Range
@@ -171,11 +171,11 @@ export function createPartialOptions() {
tree: [
createGroupedCohortFolderBasicWithoutMarketCap({
name: "Compare",
title: "Size Ranges",
list: utxosAmountRanges,
title: "Amount Ranges",
list: utxosAmountRange,
all: cohortAll,
}),
...utxosAmountRanges.map(createCohortFolderBasicWithoutMarketCap),
...utxosAmountRange.map(createCohortFolderBasicWithoutMarketCap),
],
},
],
@@ -191,7 +191,7 @@ export function createPartialOptions() {
tree: [
createGroupedAddressCohortFolder({
name: "Compare",
title: "Max Balance",
title: "Over Balance",
list: addressesUnderAmount,
all: cohortAll,
}),
@@ -204,11 +204,11 @@ export function createPartialOptions() {
tree: [
createGroupedAddressCohortFolder({
name: "Compare",
title: "Min Balance",
list: addressesAboveAmount,
title: "Under Balance",
list: addressesOverAmount,
all: cohortAll,
}),
...addressesAboveAmount.map(createAddressCohortFolder),
...addressesOverAmount.map(createAddressCohortFolder),
],
},
// Range
@@ -218,10 +218,10 @@ export function createPartialOptions() {
createGroupedAddressCohortFolder({
name: "Compare",
title: "Balance Ranges",
list: addressesAmountRanges,
list: addressesAmountRange,
all: cohortAll,
}),
...addressesAmountRanges.map(createAddressCohortFolder),
...addressesAmountRange.map(createAddressCohortFolder),
],
},
],

View File

@@ -434,9 +434,9 @@ export function statsAtWindow(pattern, window) {
}
/**
* Create a Rolling folder tree from a _1y24h30d7dPattern (4 rolling windows)
* Create a Rolling folder tree from a _1m1w1y24hPattern (4 rolling windows)
* @param {Object} args
* @param {{ _24h: AnyMetricPattern, _7d: AnyMetricPattern, _30d: AnyMetricPattern, _1y: AnyMetricPattern }} args.windows
* @param {{ _24h: AnyMetricPattern, _1w: AnyMetricPattern, _1m: AnyMetricPattern, _1y: AnyMetricPattern }} args.windows
* @param {string} args.title
* @param {Unit} args.unit
* @returns {PartialOptionsGroup}
@@ -450,8 +450,8 @@ export function rollingWindowsTree({ windows, title, unit }) {
title: `${title} Rolling`,
bottom: [
line({ metric: windows._24h, name: "24h", color: colors.time._24h, unit }),
line({ metric: windows._7d, name: "7d", color: colors.time._1w, unit }),
line({ metric: windows._30d, name: "30d", color: colors.time._1m, unit }),
line({ metric: windows._1w, name: "7d", color: colors.time._1w, unit }),
line({ metric: windows._1m, name: "30d", color: colors.time._1m, unit }),
line({ metric: windows._1y, name: "1y", color: colors.time._1y, unit }),
],
},
@@ -463,12 +463,12 @@ export function rollingWindowsTree({ windows, title, unit }) {
{
name: "7d",
title: `${title} 7d`,
bottom: [line({ metric: windows._7d, name: "7d", color: colors.time._1w, unit })],
bottom: [line({ metric: windows._1w, name: "7d", color: colors.time._1w, unit })],
},
{
name: "30d",
title: `${title} 30d`,
bottom: [line({ metric: windows._30d, name: "30d", color: colors.time._1m, unit })],
bottom: [line({ metric: windows._1m, name: "30d", color: colors.time._1m, unit })],
},
{
name: "1y",

View File

@@ -194,7 +194,7 @@
* @property {string} title
* @property {Color} color
* @property {PatternAll} tree
* @property {Brk._30dCountPattern} addrCount
* @property {Brk.DeltaInnerPattern} addressCount
*
* Full cohort: adjustedSopr + percentiles + RelToMarketCap (term.short)
* @typedef {Object} CohortFull
@@ -260,7 +260,7 @@
* ============================================================================
*
* Addressable cohort with address count (for "type" cohorts - no RelToMarketCap)
* @typedef {CohortBasicWithoutMarketCap & { addrCount: Brk._30dCountPattern }} CohortAddress
* @typedef {CohortBasicWithoutMarketCap & { addressCount: Brk.DeltaInnerPattern }} CohortAddress
*
* ============================================================================
* Cohort Group Types (by capability)
@@ -328,7 +328,7 @@
* @property {string} title
* @property {Color} color
* @property {AddressCohortPattern} tree
* @property {Brk._30dCountPattern} addrCount
* @property {Brk.DeltaInnerPattern} addressCount
*
* @typedef {UtxoCohortObject | AddressCohortObject | CohortWithoutRelative} CohortObject
*